在集成学习中,要想获得好的泛化性能,那么个体学习器应该好而不同。即个体学习器要有一定的准确性,即学习器不能太好,并且要有多样性,即学习器间具于差异。
经过数学推导可知,随着集成中个体分类器数目的增大,集成的错误率将指数级下降,且最终趋向于零。
基学习器的结合策略
一般来说,基学习器的结合策略分为:
一、平均法;
1)简单平均法;
2)加权平均法。
其中简单平均法很简单,
即
而加权平均法是实际中用得比较多的。即
而加权平均法的权重一般从训练数据中学习而得(回想下Adaboost)。然而,现实任务中的训练样本通常不充分或者噪声,这将使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,这不仅会带来很大的计算开销,还会容易导致过拟合。因此,实验和应用均显示出,加权平均法不一定优于简单平均法。一般来说,在个体学习器性能差异(注意是性能,不是多样性)较大时,宜使用加权平均法;而在个体学习器性能相近时,宜使用简单平均法。
二、投票法
1)绝对多数投票法;
2)相对多数投票法;
3)加权投票法。
其中绝对多数投票法,只有在某标记得票过半数时,才预测为该标记;否则拒绝预测;
而相对多数投票法的话,即预测为投票最多的标记;若同时有多个标记获得最高票,则从中随机选择一个。
在实际中,因为绝对多数投票法有拒绝预测这一性质。因此,在可靠性要求较高的学习任务中,这是一种非常好的机制。
三、学习法
当训练数据很多时,一种更为强大的结合策略是使用学习法。Stacking是学习法的典型代表。
需要注意的是:
这里很多多同学可能有疑问,这样搞了之后,次级训练集的个数会不会少了很多呢?答案是不会的,因为Zi是一个集合,所以次级训练集的个数按道理来说是和初级训练集的个数是一样的。其次,因为训练集经过了一次变化,所以初级训练集和次级训练集是完全不同的。所以也不会增加过拟合的风险。
基学习器的性能分析
基学习器的多样性分析。
我们在上面提到过,想要构建泛化能力强的集成,个体学习器应该“好而不同”。经过“误差-分歧分解”之后,我们可以得到这么一个结论:个体学习器准确性越高、多样性越大,则集成性能越好。
在度量基学习器的多样性时,我们引入了“不合度量(disaggreement measure)”,“相关度量(correlation coefficient)”、“Q-统计量(Q-statistic)”、“k-统计量(k-statistic)”等指标。
这些“成队形”性指标,可以很容易的在2维图上表示出来。例如,著名的“k-误差图”
其中横轴的k值代表两个基分类器的相似程度,0代表在数据集上偶然一致,1代表在数据集上完全一致。显然,数据点云的位置越高,则个体分类器的准确性越低;点云的位置越靠右,则个体学习器的多样性越小。所以,理想的情况是要分布在二维平面的左下角是比较好的。
如何增强个体学习器的多样性
一般来说,增强基学习器的多样性的一般做法是在学习过程中引入随机性,通常分为四种做法:
一、数据样本扰动
二、输入属性扰动
三、输出表示扰动
四、算法参数扰动
最后
需要指出的是,由于集成包含多个学习器,即使个体学习器有较好的可解释性,集成仍是黑箱模型。
Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。
首先介绍Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。
Bagging和Boosting的区别
1. Bagging (bootstrap aggregating)
Bagging即套袋法,其算法过程如下:
从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
2. Boosting
其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。
关于Boosting的两个核心问题:
2.1 在每一轮如何改变训练数据的权值或概率分布?
通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。
2.2 通过什么方式来组合弱分类器?
通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。
而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
3. Bagging,Boosting二者之间的区别
Bagging和Boosting的区别:
1)样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算:
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
4. 总结
这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。
下面是将决策树与这些算法框架进行结合所得到的新的算法:
Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT
参考文章
机器学习-周志华-第八章
机器学习算法工程师公众号