Ensemble 集成学习。团队合作,好几个model一起上。
1、什么是Ensemble
2、Bagging(决策树+随机森林)
3、Boosting
Adaboost、Gradient boost
4、Stacking
1、什么是Ensemble
Ensemble(集成学习),简单来说就是人多力量大。
没有什么事情是一个分类器搞不定的,如果有,就多用几个。
一系列的分类器,他们应该各自有各自的作用。
集成学习分为两大类:Bagging和boosting
- Bagging(“人海战术”):很多个水平差不多的人做理综题。无顺序,适用于模型复杂容易过拟合的分类器(通过对数据重采样方式)
- Boosting(“逐个击破”):很多个偏科但有专长的人做理综题。有顺序(迭代),适用于模型简单的分类器(通过对数据更新权值方式)
2、Bagging
思想:在原始数据集上通过有放回抽样重新选出N个新数据集来训练分类器,将多个分类器的结果进行average(回归)或voting(分类)。
- 可以解决复杂模型(比如决策树)带来的过拟合问题,代表算法是随机森林
- 我们自己创造出不同的dataset,再用不同的dataset去训练一个复杂的模型,每个模型独自拿出来虽然方差很大,但是把不同的方差的模型集合起来,整个的方差就不会那么大,而且偏差也会很小。
Decision Tree(决策树):是一种基本的分类与回归方法,在分类中相比LR模型更复杂,所以更容易造成过拟合
随机森林:决策树在bagging方法下的应用
- 传统的随机森林是通过之前的重采样的方法做,但是得到的结果是每棵树都差不多(效果并不好)
- 限制一些特征或者问题不能用,这样就能保证就算用同样的dataset,每次产生的决策树也会是不一样的,最后把所有的决策树的结果都集合起来,就会得到随机森林
- out-of-bag方法可以做验证
- 随机森林主要是解决过拟合问题
3、Boosting (Adaboost、Gradient boost)
- 同样是根据“集成学习”思想提出的算法,Boosting的核心原理与Bagging一样,对原始样本抽样来训练多个分类器,综合得到效果强大的最终模型
- 与Bagging不同的是,Boosting在每次抽取样本之前会对每一条观测数据赋予相应的权重,再根据带有权重的样本训练出新模型(AdaBoost)。通过这种方法来优化每一轮迭代所产生的基分类器。
- 如同每次模拟考试之后老师往往会给予成绩不理想的学生更多的关注一样
后面的问题在于 如何获得互补得到 f 。下面给出两种方法。
Adaboost(自动更新样本权值,再根据带有权值的新样本更新function)
思路
首先,引出错误率这个概念,在这里错误率不是简单指 wrong / (right+wrong),而实需要乘上相应的weight。如果错误率小于0.5就认为 f 很好,如果大于0.5就认为 f 不好。
然后,举例说明,首先我们有一组 data,并且每个 data 对应的 weight U1 都是1,经过 train 之后得到的 f1 进行分类时会有一个错误,错误率为0.25;此时修改每个data对应的weight U2,并且分类错误的数据对应的 weight 要比较大,识别正确的数据对应的 weight 要比较小,此时如果再用 f1识别的话,错误率就会变大,比如在此处为0.5。
最后,用修改过 weight 的 data 在重新 train 一个 f2,此时,f2 在修改过weight 的数据上就会有比较低的错误率。
接下来就是第一组 data 需要改变成第二组 data 怎么做。
其实很简单,如果 某个数据被 f1 错误的识别了,就吧这个数据对应的 weight * d1,如果正确识别,就把对应的 weight / d1。
d1 大于 1 (证明过程不重要,此处直接给结论,d1等于多少)。
Adaboost最后
- 为了用一个式子去表达两种情况,我们把dt变为at
- 我们更新完得到很多的f,要把所有的f累加然后看正负号判断是Class1还是Class2
举例说明
Gradient boost(并不是更新样本的权值,而是直接更新function的权值)
- Gradient boost是一种更为一般的boost的方法
- L(g)的形式表明,希望g(x)与y^同号,这样相乘就越大,L就越小
- GradientBoost其实可以想象成在做梯度下降,只是这个梯度是一个函数
f(x)与a是怎么来的
Gradient boost具体步骤:
- 一、f(x)是怎么来的——训练数据,是下面式子最大化
- 二、a是怎么来的——固定住f(x),最小化L(g),就得到了a,会发现此时的a与Adaboost里面的是一样的
- 三、g(x)根据f与a就求得了
- 总结:Gradient Boost的优点是可以任意更改目标函数(f(x)),这样就可以创造出很多新的方法。
4、Stacking
因为同一组数据,不同的人或者用不同得到model会得到不同的结果,有的好有的坏,因此需要权衡几个model最后的结果,来决定最终的output。
将training data 分为几组,第一组用来训练多个不同的model,并得到output,然后用这些output作为input,用另一部分的training data train一个model,来权衡最终的输出。