学习记录:
1、scikit-learn Adaboost类库使用小结
2、集成学习
3、集成学习之Adaboost算法原理小结
案例1
案例2
案例3
1、概述
集成学习(ensemble learning)不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。
集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影。
本质:将若干个弱分类器通过一定的策略组合之后产生一个强分类器。
弱分类器也称为“基分类器”。
目前集成学习算法的流派主要有两种:
bagging
boosting
2、bagging(袋装)
装袋(bagging)又称自主聚集(bootstrap aggregating),是一种根据均匀概率分布从数据集中重复抽样(有放回的)的技术。每个新数据集和原始数据集的大小相等。
由于新数据集中的每个样本都是从原始数据集中有放回的随机抽样出来的,所以新数据集中可能有重复的值,而原始数据集中的某些样本可能根本就没出现在新数据集中。
bagging方法的流程,如下图所示:
有放回的随机抽样:自主采样法(Bootstap sampling),也就是说对于m个样本的原始数据集,每次随机选取一个样本放入采样集,然后把这个样本重新放回原数据集中,然后再进行下一个样本的随机抽样,直到一个采样集中的数量达到m,这样一个采样集就构建好了,然后我们可以重复这个过程,生成n个这样的采样集。也就是说,最后形成的采样集,每个采样集中的样本可能是重复的,也可能原数据集中的某些样本根本就没抽到,并且每个采样集中的样本分布可能都不一样。
根据有放回的随机抽样构造的n个采样集,我们就可以对它们分别进行训练,得到n个弱分类器,然后根据每个弱分类器返回的结果,我们可以采用一定的组合策略得到我们最后需要的强分类器。
bagging通过降低弱分类器方差
bagging方法的代表算法是随机森林,准确的来说,随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。
3、boosting(提升)
boosting是一个迭代的过程,用来自适应地改变训练样本的分布,使得弱分类器聚焦到那些很难分类的样本上。
具体的做法是给每一个训练样本赋予一个权重,在每一轮训练结束时自动地调整权重。
boosting方法的流程,如下图所示:
从图中可以看出,Boosting算法的工作机制是首先从训练样本集用初始权重(初始权重是相等的,若分成n个弱分类器,则初始权重为m/n),训练出一个弱学习器1,根据弱学习器1的学习误差率e1和权重跟新系数a1更新训练样本集的权重D(2),使得之前弱学习器1学习误差率高的训练样本点的权重变高,使用跟新后的权重D(2)的训练集训练出弱分类器2,此时,产生学习误差率e2和权重跟新系数a2,在更新权重D(3),在进行训练,依次类推,直至所有弱分类器生成。即直到弱学习器数达到事先指定的数目n,最终将这n个弱学习器通过集合策略进行整合,得到最终的强学习器。
4、结合策略
4.1 平均法
对于若干个弱学习器的输出进行平均得到最终的预测输出。
最简单的平均是算术平均,也就是说最终预测是:
如果每个个体学习器有一个权重w,则最终预测是:
权重之和要为1.
4.2投票法
对于分类问题的预测,我们通常使用的是投票法。
假设我们的预测类别是:
我们的n个弱学习器的预测结果:
最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是n个弱学习器的对样本x的预测结果中,数量最多的类别c;为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
稍微复杂的投票法是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
4.3 学习法
上两节的方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,
对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
5、Adaboost算法
5.1一般过程
计算样本权重
赋予训练集中每个样本一个权重,构成权重向量D,将权重向量D初始化相等值。
计算错误率
在训练集上训练出一个弱分类器,并计算分类器的错误率:
计算弱分类器权重(权重系数)
为当前分类器赋予权重值alpha,则alpha计算公式为:
调整权重值
根据上一次训练结果,调整权重值(上一次分对的权重降低,分错的权重增加)
如果第i个样本被正确分类,则该样本权重更改为:
如果第i个样本被分错,则该样本权重更改为:
一个是-a,一个是a。分错的权重大一点,分对了权重大一点。
之后,在同一数据集上再一次训练弱分类器,然后循环上述过程,直到训练错误率为0,或者弱分类器的数目达到指定值。
5.2 详细思路
首先我们看看Adaboost的分类问题。
分类问题的误差率很好理解和计算。由于多元分类是二元分类的推广,这里假设我们是二元分类问题,输出为{-1,1},则第k个弱分类器Gk(x)在训练集上的加权误差率为
如果分类误差率ek越大,则对应的弱分类器权重系数αk越小。也就是说,误差率小的弱分类器权重系数越大。
更新更新样本权重D。
则对应的第k+1个弱分类器的样本集权重系数为:
这里Zk是规范化因子:
最后一个问题是集合策略。Adaboost分类采用的是加权表决法,最终的强分类器为
接着我们看看Adaboost的回归问题。以Adaboost R2算法为准。
然后计算每个样本的相对误差:
如何得到弱学习器权重系数α。
跟新权重
最后是结合策略,和分类问题稍有不同,采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法,最终的强回归器为: