数据分析与机器学习学习笔记--集成算法

1.引言

       之前的博客提出了许多的算法,但是在某些特定情况下各种算法可达到的精度不满足我们的要求,为了解决这一情况该怎么办呢?俗话说的好“三个臭皮匠赛过诸葛亮”,于是就有人提出这一假设,一个算法不行为什么不用多个算法呢,因此集成算法的就应运而生。集成算法主要分为Bagging模型、Boosting模型和Stacking模型三类,对于前两种算法目前应用较多,第三种算法使用的不是太多,但是其效果依旧十分强大,在这篇文章中对于Stacking模型的介绍依据的是Ben Gorman的一篇文章。

2.Bagging

       Bagging模型主要通过训练多个分类器,并将其所占权重取平均,根据全局结果生成最终结果,公式如下

       随进森林是Bagging模型最为典型的应用,此部分主要通过对随即森林的解释帮助理解Bagging模型。随即森林即我们生成了许多的决策树并将其连在一次就生成了一个随机森林。为何叫随进森林呢?在随机森林中我们有两个随机,第一是数据采样随机,第二是特征选择随机。首先解释数据采样随机,数据采样随机就是我们在所有数据集中选取那些数据进行建模,比如我们有10000条对儿童身高分布的数据,我们生成的每棵树都从中随机算则60%作为我们建模的数据。其次,特征随机就是我们从所有特征中随机选择部分特征来进行建模,此处又会牵扯到特征重要性的计算方式,此部分我们放在文章最后部分(不要问为什么没有放一张随机森林的图片,我也想放,但是通过Graphviz生成的图片大的不得了,本人还不会变小。。。。)。

3.Boosting

       相对Bagging模型的三个臭皮匠赛过诸葛亮,Boosting模型提出的是从弱学习器开始,逐步加强,当然此处说的弱学习器并不是指某一特定的学习器,我们只是将其与依据Boosting生成的最终模型对比而称之为弱学习器,通过加权生成最终的模型公式如下

       具体的实现过程如下,假设我们有100个样本,第一次我们训练得到的模型正确预测900个;接下来第二个模型,我们在预测错误的100个中进行建模这次又预测正确50个,将这个模型添加到第一个模型,此时整体模型的预测正确率达到95%;接下来在依次进行第三个模型的生成,并依旧将其添加到整体模型中。最终我们生成一个优秀的模型。

       此模型最典型的算法为AdaBoost和XgBoost,XgBoost算法比较复杂,我在之后单独拿出来写一篇博客介绍,此处就通过介绍AdaBoost帮助理解Boosting模型。AdaBoost算法中在初始时我们设置每个权重为均值,之后每次根据上一轮的结果进行权重更新,最终预测正确率高的弱学习器所占据的权重会较高。上式1计算的是被某个分类器分类错误的总体错误率;2式计算的是该分类器在最终模型中所占据的权重,当一个分类器的错误率越低时该公式的计算结果相应的越高,当错误率为0.5时此式子结果为0,为什么会有这种现象呢,因为任何一个分类我们预测正确与错误的概率均为0.5.因此,当一个分类器的错误率为0.5时我们认为此分类器毫无作用;3式为权重的更新;4式即为最终生成的模型。

4.Stacking

       Stacking模型在Kaggle竞赛上的使用十分火热,此模型的核心思想是将第一个算法的到结果作为一个特征添加到数据集中,进行第二次建模,在Ben Gorman 的这篇文章 A Kaggler's Guide to Model Stacking in Practice中详细介绍了一个Stacking模型的搭建过程,这篇文章逐步的介绍了Stacking模型的生成过程以及该模型的优缺点,有可能不会对其进行深入的讲解,但是帮助第一次接触该模型的读者对Stacking形成一个整体概念和具体工作流程是个不错的选择。

5.特征重要性计算

       假设我们有4个特征A,B,C,D,现在我们计算A特征的重要性,首先我们不作处理,根据4个特征进行建模并用此模型进行预测,计算出相应的精确度或错误率err1。第二步,我们将A特征进行一次破坏,简单的方法就是将特征A的数据全部替换为在(-1, 1)间的随机分布数值,并且保持其他3个特征不变,再次用4个特征进行建模,同样是用词模型进行预测,计算出此模型的对应的精确度或错误率err2。最后,我们对比两次的错误率(精确度),如果err1≈err2那么我们就认为特征A的重要性低,如果err1<<err2那么我们认为特征A的重要性高(精度的比较方式相反)。下面两图即为形式化的计算方式,其中A''为数据打乱后的特征A。

6.总结

       集成模型无论是在竞赛中还是目前商用都比较常见,熟练掌握集成模型是一个不可或缺的技能,本篇文章只是简单的介绍了集成算法的概念,并没有进一步的书写实现过程和具体的推导过程,同时在此十分感谢知乎用户@xyzh,是她的回答给我提供了很好的帮助。

Reference

A Kaggler's Guide to Model Stacking in Practice:

http://blog.kaggle.com/2016/12/27/a-kagglers-guide-to-model-stacking-in-practice/

  

(新成员镇楼)

猜你喜欢

转载自blog.csdn.net/spz1063769322/article/details/80845158