【集成学习】
集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想。是一种分类和回归模型。(判别模型)
集成学习的种类有:Boosting, Bagging 。
提升树(boosting)是2000年由Friedman等人提出。AdaBoost算法是1995年由Freund和Schapire提出。
“三个臭皮匠,顶一个诸葛亮”
1.模型
Q1:如何得到若干个个体学习器?
两种选择:
A.所有的个体学习器都是一个类(同质)
B.所有的个体学习器不全是一个类(异质)
Q2:如何选择一种结合策略,将这些个体学习器集合成一个强学习器?(集成学习的学习策略)
A.回归:平均法 对于若干个弱学习器的输出进行平均得到最终的预测输出。
B.分类:预测法 相对多数投票法/绝对多数投票法/加权投票法
2.基分类器
基分类器,有时又被称为弱分类器。因为基分类器的错误率要大于集成分类器。基分类器的错误,是偏差和方差两种错误之和。
偏差主要是由于分类器的表达能力有限导致的系统性错误,表现在训练误差不收敛。
方差是由于分类器对于样本分布过于敏感,导致在训练样本数较少时,产生过拟合。
最常用的基分类器:
A.决策树。原因:
( I )决策树可以较为方便地将样本的权重整合到训练过程中,而不需要使用过采样的方法来调整样本权重;
( 2)决策树的表达能力和泛化能力,可以通过调节树的层数来做折中;
( 3)数据样本的扰动对于决策树的影晌较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的“不稳定学习器”更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引了随机性。
B.神经网络模型。原因:
(1)神经网络模型也比较“不稳定”;
(2)可以通过调整神经元数量、 连接方式、网络层数、初始权值等方式引入随机性。
Q:可否将随机森林中的基分类器,由决策树替换为线性分类器或K-近邻?为什么?
不可以。
因为,随机森林属于 Bagging 类的集成学习。Bagging 主要优势是减少集成分类器的方差。而Bagging 所采用的基分类器,最好是本身对样本分布较为敏感的(即所谓不稳定的分类器),这样 Bagging 才能有用武之地。
而线性分类器或者 k-近邻都是较为稳定的分类器,本身方差就不大,所以以它们为基分类器使用 Bagging不能在原有基分类器的基础上获得更好的表现,甚至可能因为Bagging的采样 而导致他们在训练中更难收敛,从而增大集成分类器的偏差。
(总结就是,随机森林要求基分类器不稳定,以发挥其减少方差的作用,而线性分类器或K-近邻都较为稳定(即本身方差不大),故替换后,不仅不能发挥其减少方差的作用,反而会造成其训练师难以收敛以致偏差增加)
3.集成学习分类与异同
Boosting与Bagging
-
Boosting
Boosting 方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。
基本思路:将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。
Boosting方法是通过逐步聚焦于基分类器分错的样本 ,减少集成分类器的偏差。
(利用前一轮迭代弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去。)
-
Bagging
Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
Bagging 方法更像是一个集体决策的过程。每个个体都进行单独学习,学习的内容可以相同, 也可以不同,也可以部分重叠 但由于个体之间存在差异性,最终做出的判断不会完全一致,在最终做决策时,每个个体单独作出判断 再通过投票的万式做出最后的集体决策。
Bagging方法则是采取分而治之的策略,通过对训练样本多次采样,并分别训练多个不同模型 ,然后做综合,来减少集成分类器的方差。(假设所有基分类器出错的概率是独立的,在某个测试样本上,用简单多数投票方法来集成结果,超过半数基分类器出错的概率会随着基分类器的数量增加而下降。)
(这里的随机采样一般采用的是自助采样法(Bootstap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集。)
4.集成学习的步骤与boosting的几个算法
集成学习一般可分为以下3个步骤:
(1)找到误差互相独立的基分类器;
(2)训练基分类器;
(3)合并基分类器的结果。(voting和stacking)
-
Adaboost算法:
(1)确定基分类器。这里可以选取 ID3 决策树作为基分类器,事实上,任何分类模型都可以作为基分类器 但树形模型由于结构简单且较易产生随机性所以比较常用;
(2)训练基分类器。假设训练集为{xi,yi} ,i= 1,…N,其中yi∈{-1,1},并且有T个基分类器,则可以按照如下过程来训练基分类器:
(3)合并基分类器:给定一个未知样本Z,输出分类结果为加权投票的结果
-
梯度提升决策树(Gradient Boosting Decision Tree , GBDT)
核心思想:根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。
基本流程:在每一轮迭代中,首先计算出当前模型在所有样本上的负梯度 然后以该值为目标训练一个新的弱分类器进行拟合并计算出该弱分类器的权重,最终实现对模型的重新。
伪代码:
(负梯度值作为残差的近似值(伪残差);计算分割点(利用cart树的分割点);线性搜索步长(权重);)
步骤:
(1)确定基分类器:GBDT中使用的决策树通常为CART;
(2)训练基分类器:是利用残差训练的(在预测的过程中 我们也需要把所有树的预测值加起来,得到最终的预测结果)。使用梯度提升( Gradient Boosting )作为训练方法;
Q:在逻辑回归或者神经网络的训练过程中往往采用梯度下降(Gradient Descent)作为训练方法, 二者之间有什么联系和区别吗?
同:两者都是在每一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新;
异:
在梯度下降中 模型是以参数化形式表示,从而模型的更新等价于参数的重新;
在梯度提升中,模型并不需要进行参数化表示,而是直接走义在函数空间中,从而大大扩展了可以使用的模型种类。
(3)合并基分类器:累加。
优点和局限性:
【优:】
(1)预测阶段的计算速度快,树与树之间可并行化计算;
(2)在分布稠密的数据集上,泛化能力和表达能力都很好;
(3)采用决策树作为弱分类器使得 GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
【局:】
(1)GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络;
(2)GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值恃征时明显;
(3)训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
-
XGBOOST
XGBoost 是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法法和工程上的许多改进,被广泛应用在Kaggle及其他许多机器学习竞赛中并取得了不错的成绩。
XGBoost与GBDT的联系和区别:
(1)GBDT是机器学习算法,XGBoost是该算法的工程实现;
(2)在使用 CART作为基分类器时, XGBoost 显式地加入了正则项来控制模型的复杂度,有利于防止过拟台,从而提高模型的泛化能力;
(3)GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost 对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数;
(4)GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器;
(5)GBDT在每轮迭代时使用全部的数据, XGBoost采用了与随机森林相似的策略,支持对数据进行采样(特征选取并行,建树串行);
(6)GBDT没有设计对缺失值进行处理, XGBoost 能够自动学习出缺失值的处理策略。
5.代码
REFERENCE
《统计学习方法》李航
《百面机器学习》诸葛越