赞
踩
严格意义上来说,集成学习算法不能算是一种机器学习算法,而像是一种模型优化手段,是一种能在各种机器学习任务上提高准确率的强有力技术。在很多数据挖掘竞赛中,集成学习算法是比赛大杀器,能很好地提升算法的性能。集成学习算法是由多个较弱的模型以一定方法组成集成模型,而这些弱学习器包括SVR、LASSO、KNN等等。Schapire从理论上证明了在知道弱学习器正确率下限的时,可以通过集成算法能将弱学习器提升为强学习器。
集成算法往往是先单独对每个模型进行训练,然后以某种方式结合这些模型的预测结果,最终得到一个总体的更具可靠性的预测结果。目前集成学习算法大多来源于Bagging、Boosting、Stacking三种思想。
Bagging算法,又称为装袋算法,最初由Leo Breiman于1996年提出,是并行式集成学习的典型代表。Bagging算法主要是从数据层面上设计,使用自助采样法随机有放回地对样本进行采样,构建出样本量相等的相互独立的样本数据集,在同一算法中训练出不同的模型。Bagging算法的集成策略也很简单,对于分类问题,一般通过投票法,以多数模型预测结果为最终结果。而对于回归问题,一般采用算术平均法,对所有模型的预测结果做算术平均得到最终结果。Bagging算法的流程如图1.1所示, Bagging算法步骤如图1.2所示。
Boosting算法是一种用来减少监督式学习中偏差的机器学习算法,与Bagging算法不同的是,Boosting串行式集成学习算法。Boosting算法基于错误提升模型性能,根据前面分类器分类错误的样本,调整训练集中各个样本的权重,构建新的分类器。其训练过程是呈阶梯状的,后一个基模型会在前一个基模型的基础上进行学习,最终以某种综合方式,比如加权法,对所有模型的预测结果进行加权来产生最终的结果。Boosting算法的流程如图2.1所示。
Boosting可以组合多个弱学习器来形成一个强学习器,提高了模型的整体预测精度。在模型训练过程中,每个算法会生成一个弱规则,而Boosting算法总是更加关注被错误分类的规则。如果第一个基础的学习算法预测错误,则该点在下一次的基础学习算法的权重会变高。关于Boosting算法,最常用的是AdaBoost和XGBoost。
Stacking是一种分层模型集成框架,在1992年被Wolpert提出。Stacking集成可以有多层的情况,但通常会设计两层,第一层由多种基模型组成,输入为原始训练集,而输出为各种基模型的预测值,而第二层只有一个元模型,对第一层的各种模型的预测值和真实值进行训练,从而得到完成的集成模型。同理,预测测试集的过程也要先经过所有基模型的预测,组成第二层的特征,再用第二层的元模型预测出最终的结果。为了防止模型过拟合的情况,一般Stacking算法在第一层训练基模型时会结合k折交叉验证法。以五折交叉验证法为例,Stacking算法的过程如图3.1所示。
Stacking算法原理很简单,以两层结构为例,在训练阶段,假设有训练集数据D={(x1,y1), (x2,y2), … , xn,yn},根据5折交叉验证法被随机划分为5个大小相似且互斥的数据子集D1、D2、D3、D4和D5。分别以其中一个数据子集为验证集,其他4个为训练集,来训练第一层的基模型BM1,BM2, … , BMn,每个基模型都被训练5次。以第一个基模型BM1为例,对验证集进行预测,分别得到p1,p2,p3,p4和p5,组成原数据集大小的prob1。以此类推,得到prob1, prob2, prob3, … , probn作为第二层元模型的特征,与真实值label组成第二层的数据集,用于元模型训练。
在测试阶段,以第一个基模型BM1为例,5个训练好的基模型BM1分别对测试集进行预测,得到ρ1,ρ2,ρ3,ρ4和ρ5,取平均得到prob1。以此类推,得到 组成第二层的样本集,导入第二层训练好的元模型进行预测,得到最终预测结果。
无论是模型选择、算法结构,还是特征处理上,传统的Stacking算法都有很多需要改进的地方。这里是我对传统Stacking算法优化的一些尝试,感兴趣的可以去看看。 stacking优化.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。