前言
如果你能找到这里,真是我的幸运~这里是蓝白绛的学习笔记,本集合主要针对《百面机器学习——算法工程师带你去面试》这本书。主要记录我认为重要的知识点,希望对大家有帮助。
第十二章 集成学习
1、集成学习的种类
- 集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想。
- Boosting:Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。其基本思想是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
- Bagging:Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。为了让基分类器之间相互独立,将训练集分为若干子集。由于个体之间存在差异性,最终做出的判断不会完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式作出最后的集体决策。其中很著名的算法是基于决策树基分类器的随机森林。
- 从消除基分类器的偏差和方差的角度来理解Boosting和Bagging方法的差异。基分类器的错误率要大于集成分类器,基分类器的错误是偏差和方差两种错误之和。
- 偏差主要是由于分类器的表达能力有限导致的系统性误差,表现在训练误差不收敛。Boosting方法通过逐步聚焦于基分类器分错的样本,减小集成分类器的偏差。
- 方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。Bagging方法则是采取分而治之的策略,通过对训练样本多次采样,训练多个不同模型进行综合,来减小集成分类器的方差。用简单多数投票方法来集成结果,超过半数基分类器出错的概率会随着基分类器的数量增加而下降。
2、集成学习的步骤和例子
- 集成学习一般可以分为以下3个步骤:
(1) 找到误差相互独立的基分类器。
(2) 训练基分类器。
(3) 合并基分类器的结果。
第(3)步合并基分类器的方法有voting和stacking两种。stacking是用串行的方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加作为最终的输出(或用更复杂的方法,将各基分类器的输出作为特征,用逻辑回归作为融合模型进行最后的结果预测)。 - Adaboost采取了Boosting的思想,对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变。在最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合。
另一个非常流行的是梯度提升决策树,思想是每一棵树学的是之前所有树结论和的残差,这个残差是一个加预测值后能得真实值的累加量。比如预测年龄,真实年龄是25岁,第一棵树预测22岁,则第二棵树将年龄设为3岁去学习。使用残差继续学习,就是GBDT中的Gradient Boosted所表达的意思。
3、基分类器
- 最常用的基分类器是决策树,主要有以下3个方面的原因:
(1) 决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。
(2) 决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
(3) 数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分类属性,很好地引入了随机性。 - 除了决策树,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。
- Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小,所采用的基分类器最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样Bagging才能有用武之地。
线性分类器或者K近邻都是较为稳定的分类器,本身方差就不大,所以用他们做基分类器Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样,导致它们在训练中更难收敛,从而增大了集成分类器的偏差。
4、偏差与方差
- 有监督学习中,模型的泛化误差来源于两个方面:偏差和方差。
- 偏差:所有采样得到的大小为的训练数据集训练出的所有模型的输出的平均值和真实模型输出的偏差。偏差通常是由于我们对学习算法作出了错误的假设所导致的,比如真实模型是某个二次函数,但我们假设模型是一次函数。由偏差带来的误差通常在训练误差上就能体现出来。
-
方差:所有采样得到的大小为的训练数据集训练出的所有模型的输出的方差。方差通常是由于模型的复杂度相对于训练样本过高导致的,比如一共有100个训练样本,而我们假设模型是阶数不大于200的多项式函数。由方差带来的误差通常体现在测试误差相对于训练误差的增量上。
- 从减小方差和偏差的角度解释Boosting和Bagging的原理:
- Bagging能够提高弱分类器性能的原因是降低了方差。
- Boosting能够提高弱分类器性能的原因是降低了偏差。
Bagging:Bagging是Bootstrap Aggregating的简称,意思就是再抽样,然后在每个样本上训练出来的模型取平均。假设有个随机变量,方差为,两两变量之间的相关性为,则个随机变量的均值的方差为。在随机变量完全独立的情况下(),个随机变量的方差为,也就是说方差减小到了原来的。当然模型之间不可能完全独立。为了追求模型的独立性,诸多Bagging的方法做了不同的改进。比如在随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有属性中选取最优属性,就是为了避免弱分类器之间过强的相关性。
Boosting:Boosting训练好弱分类器后,我们计算弱分类器的错误或残差,作为下一个分类器的输入。这个过程就是在不断减小损失函数,使模型不断逼近“靶心”,即使模型偏差不断降低。(Boosting不会显著降低方差,因为Boosting的各弱分类器之间是强相关的,缺乏独立性,所以不会对降低方差有作用)
-
泛化误差、偏差、方差和模型复杂度的关系:
如下图所示。对于给定的学习任务和训练数据集,我们需要对模型的复杂度做合理的假设。如果模型复杂度过低,虽然方差很小,但偏差会很高;如果模型复杂度过高,虽然偏差低,但方差会很高。
小结
这是本章的第一部分,主要讲了Bagging、Boosting的训练方法,典型的用到Bagging的方法有随机森林,典型的用到Boosting的方法有Adaboost、梯度提升决策树。第一部分还从偏差和方差的角度解释了Bagging和Boosting的原理。之前虽然知道Bagging和Boosting,但是并没有想过模型的偏差和方差,这一点非常有启发。
结尾
如果您发现我的文章有任何错误,或对我的文章有什么好的建议,请联系我!如果您喜欢我的文章,请点喜欢~*我是蓝白绛,感谢你的阅读!