集成学习
集成学习理论
集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想。
集成学习的种类
(1)集成学习分哪几种?他们有何异同?
- Boosting:迭代式学习
Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。
它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
Boosting的过程很类似于人类学习的过程,我们学习新知识的过程往往是迭代式的,第一遍学习的时候,我们会记住一部分知识,但往往也会犯一些错误,对于这些错误,我们的印象会很深。第二遍学习的时候,就会针对犯过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的次数减少到很低的程度。
- Bagging:集体投票决策
Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
Bagging方法更像是一个集体决策的过程,每个个体都进行单独学习,学习的内容可以相同,也可以不同,也可以部分重叠。但由于个体之间存在差异性,最终做出的判断不会完全一致。在最终做决策时,每个个体单独作出判断,再通过投票的方式做出最后的集体决策。
- 对比:boosting主要是降低bias;bagging 主要用来降 variance
我们再从消除基分类器的偏差和方差的角度来理解Boosting和Bagging方法的差异。基分类器,有时又被称为弱分类器,因为基分类器的错误率要大于集成分类器。基分类器的错误,是偏差和方差两种错误之和。偏差主要是由于分类器的表达能力有限导致的系统性错误,表现在训练误差不收敛。方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。
Boosting方法是通过逐步聚焦于基分类器分错的样本,减小集成分类器的偏差。Bagging方法则是采取分而治之的策略,通过对训练样本多次采样(多个基分类器并行训练,不就相当于多次采样?),并分别训练出多个不同模型,然后做综合,来减小集成分类器的方差。假设所有基分类器出错的概率是独立的,在某个测试样本上,用简单多数投票方法来集成结果,超过半数基分类器出错的概率会随着基分类器的数量增加而下降。
集成学习的步骤和例子
虽然集成学习的具体算法和策略各不相同,但都共享同样的基本步骤。
(1)集成学习有哪些基本步骤?请举几个集成学习的例子
集成学习一般可分为以下3个步骤:
1.找到误差互相独立的基分类器。
2.训练基分类器。
3.合并基分类器的结果。
合并基分类器的方法有 voting 和 stacking 两种。前者是用投票的方式,将获得最多选票的结果作为最终的结果。后者是用串行的方式,把前一个基分类器的结果输出到下一个分类器,将所有基分类器的输出结果相加(或者用更复杂的算法融合,比如把各基分类器的输出作为特征,使用逻辑回归作为融合模型进行最后的结果预测)作为最终的输出。
AdaBoost 和 Gradient Boosting 是 Boosting 的两大经典算法
更详细的内容,看后面的小节。
基本分类器
基分类器的选择是集成学习主要步骤中的第一步,也是非常重要的一步。到底选择什么样的基分类器,为什么很多集成学习模型都选择决策树作为基分类器,这些都是需要明确的问题,做到知其然,也知其所以然。
(1)常用的基分类器是什么?
最常用的基分类器是决策树,主要有以下3个方面的原因。
1.决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重。(怎么理解?)
2.决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
3.数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。
除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。
(2)可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?请解释为什么?
随机森林属于Bagging类的集成学习。Bagging的主要好处是集成后的分类器的方差,比基分类器的方差小。Bagging所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样Bagging才能有用武之地。线性分类器或者K-近邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器使用Bagging并不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样,而导致他们在训练中更难收敛,从而增大了集成分类器的偏差。
问题:关键是什么叫做模型的敏感性?(可能与损失函数有关?暂留)
偏差与方差
我们经常用过拟合、欠拟合来定性地描述模型是否很好地解决了特定的问题。从定量的角度来说,可以用模型的偏差(Bias)与方差(Variance) 来描述模型的性能。
集成学习往往能够“神奇”地提升弱分类器的性能。
(1)什么是偏差和方差?
可以参考之前的文章:模型泛化:偏差、方差、噪声
相当于一个是预测输出和真实值之前的偏差(偏差 bias),一个是预测输值的方差(variance 方差)。
偏差通常是假设函数的设计有问题,如拟合能力不行;方差通常是由于模型的复杂度相对过高导致。
(2)如何从减小方差和偏差的角度解释Boosting和Bagging的原理?
Bagging能够提高弱分类器性能的原因是降低了方差,Boosting能够提升弱分类器性能的原因是降低了偏差。
为什么?
① Bagging
Bagging 是 Bootstrap Aggregating 的简称,意思就是再抽样,然后在每个样本上训练出来的模型取平均。
理论上,在随机变量完全独立的情况下,n个随机变量的方差为σ2/n,也就是说方差减小到了原来的1/n。因此,对n个独立不相关的模型的预测结果取平均,方差是原来单个模型的1/n。
所以,诸多模型采取各种方法来达到模型的独立性,进而降低模型方差的效果。
比如在随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有属性中选取最优属性,这就是为了避免弱分类器之间过强的相关性。通过训练集的重采样也能够带来弱分类器之间的一定独立性,从而降低Bagging后模型的方差。
②Boosting
Boosting的训练过程(在训练好一个弱分类器后,我们需要计算弱分类器的错误或者残差,作为下一个分类器的输入)本身就是在不断减小损失函数,使得模型偏差不断降低。
但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使得各弱分类器之间是强相关的,缺乏独立性,所以并不会对降低方差有作用。
一般来说,偏差与方差是有冲突的,这称为”偏差-方差窘境“,泛化误差、偏差、方差和模型复杂度的关系如下图所示:
更多详细内容可以查看之前详细的文章:模型泛化:偏差、方差、噪声
小结
Bagging(装袋法):通过减少方差来提高预测结果
Boosting:
经典集成学习
随机森林
随机森林是一种基于bagging方法的改进树模型。
AdaBoost
Boosting的思想:对分类正确的样本降低了权重,对分类错误的样本升高或者保持权重不变。在最后进行模型融合的过程中,也根据错误率对基分类器进行加权融合。错误率低的分类器拥有更大的“话语权”。
补:关于更详细的 Adaboost 可以查看比《百面》详细很多的系列文章: 集成学习之Boosting—— AdaBoost原理
梯度提升决策树(GBDT)的基本原理
优秀博文:GBDT算法原理深入解析
采用决策树作为弱分类器的Gradient Boosting算法被叫做(Gradient Boosting Decision Tree,GBDT)。
GBDT非常好地体现了“从错误中学习”的理念,基于决策树预测的残差进行迭代的学习。
其核心思想是,每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。
AdaBoost采用的是增加上一轮学习错误样本的权重的策略,而在Gradient Boosting中则将负梯度作为上一轮基学习器犯错的衡量指标,在下一轮学习中通过拟合负梯度来纠正上一轮犯的错误。
这里的关键问题是:为什么通过拟合负梯度就能纠正上一轮的错误了?Gradient Boosting的发明者给出的答案是:函数空间的梯度下降。
(1)GBDT的基本原理是什么?
集成学习之Boosting —— Gradient Boosting原理
GBDT选择树模型作为基分类器的原因?
决策树有很多优良的特性,比如能灵活处理各种类型的数据,包括连续值和离散值;对缺失值不敏感;不需要做特征标准化/归一化;可解释性好等等,但其致命缺点是不稳定,导致容易过拟合,因而很多时候准确率不如其他算法。决策树是非参数模型,这并不意味着其没有参数,而是在训练之前参数数量是不确定的,因此完全生长的决策树有着较大的自由度,能最大化地拟合训练数据。然而单颗决策树是不稳定的,样本数相同的训练集产生微小变动就能导致最终模型的较大差异,即模型的方差大,泛化性能不好。点击
(2)GBDT 分别与 Adaboost 和 梯度下降的区别?
GBDT 分别与 Adaboost的差别在于损失函数不同,一个是指数函数(Adaboost),一个是Logistic函数(GBDT);
GBDT 与梯度下降的区别在于模型参数的更新空间不同,一个是参数空间(梯度下降),一个是函数空间(GBDT)。
(3)GBDT的优点和局限性
GBDT继承了决策树的诸多优点,同时也改进了其缺点。由于GBDT采用的树都是复杂度低的树,所以方差很小,通过梯度提升的方法集成多个决策树,最终能够很好的解决过拟合的问题。然而Boosting共有的缺点为训练是按顺序的,难以并行,这样在大规模数据上可能导致速度过慢,所幸近年来XGBoost和LightGBM的出现都极大缓解了这个问题
优点:
(1)预测阶段的计算速度快,树与树之间可并行化计算。
(2)在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
(3)采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
局限性:
(1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
(2)GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
(3)训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
XGBoost
(陈天奇2014)
XGBoost 与 GBDT的联系和区别?
(1)GBDT是机器学习算法,XGBoost是该算法的工程实现。
(2)在使用CART作为基分类器时,XGBoost 显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
(3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
(4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
(5)传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
(6)传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
LightGBM
(微软2016)
LightGBM:基于决策树的提升算法。是基于 XGBoost的一种改进。
小结
方法和思想:Bagging, Boosting, Stacking
Bagging(装袋法):
- 有放回的抽样,随机生成子集训练模型
- 使用训练的多个模型 进行投票,少数服从多数(分类问题),或者取平均值(回归问题)
- 通过减少方差来提高预测结果
Boosting:
Stacking
具体方法小结
Adaboost
Adaboost 通过提升错分数据点的权重来进行参数更新,从而提升模型模型。
- 使用的数据:第一颗树的训练使用全部的数据集,从第二颗新加入的树开始,每次的训练只会针对上一次分错的数据集上,不断迭代,最后总的树对所有树的结果进行求和。
- 权重更新:每次误差(error)的计算公式——先对权重(w)取平均值,然后取 log
Gradient Boosting(GBDT)是通过计算梯度来定位模型的不足。