首先,集成学习是指综合多个模型的结果,以提升机器学习的性能。相比单个模型,往往能取得更好的结果。而Bagging和Boosting是集成学习中的两个方法(还有一个stacking,暂不做阐释),刚开始接触时稍有混乱,在此稍浅地记录下学习历程,以便快速理解
1. Bagging
Bagging是Bootstrap Aggregating的简称,这是一种并行的方法,其首先生成多种基分类器,在最后预测时通过投票法,从多个基分类器中得到预测结果,有效降低样本方差,每个基分类器之间具有弱关联性,相对独立
其中最常用的Bagging法为随机森林(Random Forest):
Random Forest的分类器一般是决策树,且通常为CART决策树,步骤如下:
- 假设原样本集有M个样本,每个样本包含N个属性,则首先有放回地抽取M个样本(每次抽1个,抽完后放回,重新在M个样本中抽1个,因此子集中将包含重复样本)
- 如此,这个子集包含MxN个元素,再随机从N个属性中,选择n<<N个属性作为决策树每个节点的分裂属性(一般n=logN),若为CART树,则根据GINI指数来确定每个节点选择哪种属性来分裂(原始Bagging使用了所有属性,而不是随机选择n个)
- 重复上述步骤,生成大量决策树
- 对于每个测试数据,根据每棵决策树的预测结果,投票表决得到最后结果(可以是少数服从多数,也可以是加权,或者一票否决等)
RF的优点: - 随机性的引入,使得RF不易陷入过拟合
- 随机性的引入,使得RF具有较强的抗干扰性,在很多数据集上都体现出优势
- 能够处理高维数据(N很多)
- 并行,训练速度快,实现简单
- 训练过程中,能够检测到各属性间的相互影响
2. Boosting
Boosting是一种串行的方法,每个基分类器之间强关联,必须训练得到前一个基分类器,才能够根据偏差来获得下一个分类器,直至误差小于阈值
Boosting的分支有很多,其中之一为Adaboost,即自适应Boosting,这里直接引用李航《统计学习方法》中的例子辅助理解:
- 对所有样本赋予权重,第一次时没有先验知识可赋予相同权重wi=N1
- 根据训练集与权重分布,选择使误差最低的阈值v, 误差ei=∑Gi(xj)!=yjwj
- 计算系数αi=21logei1−ei
- 计算规范化因子Zm=∑i=1Nwmiexp(−αmyiGm(xi)),第一轮的Z已在图片中标注
- 计算新的权重wm+1,i=Zmwmiexp(−αmyiGm(xi))
于是可以得到新的权重{wm+1,1,wm+1,2,...,wm+1,N},可以看到,对于上一轮分错的样本,将被赋予更高的权重,因此下一轮的分割阈值也将随之改变
最后的G由前面G1 G2 G3累加而成,由此也可以看出“累加”的特性,必须串行进行
此外还有GBDT,传统Boosting包括Adaboost更关注正确错误样本的加权,而GBDT的目的则是为了使之前的模型误差往梯度下降的方向进行
在GBDT中,将损失函数的负梯度作为当前模型残差的近似值,进而拟合一棵CART树
如若选择均方根误差作为损失函数,即
L=∑iN(yi−f(xi))2
则在对第i个样本的负梯度为−∂f(xi)∂L=yi−f(xi)
选择其它损失函数时,只要能求一阶导,皆可算出对应偏差,作为下一轮迭代的初始样本
XGBoost则是在GBDT的基础上的优化,两者的区别主要如下:
- GBDT通常以CART树作为基学习器,而XGBoost则还可以使用线性学习器
- GBDT的梯度仅使用了一阶导信息,而XGBoost对代价函数进行二阶泰勒展开,同时使用了一阶导和二阶导
- 类似RF,支持列抽样,即并不是对所有属性进行学习,而是随机选择一定的属性,既防止过拟合,也减少计算量,加快速度
- 引入正则项,控制模型复杂度,并降低模型方差
- XGBoost支持并行,这里的并行指的是在计算最佳分裂点时,对特征值的排序这一步。在进行特征分裂时,需要计算各特征的增益等,这一步可通过多线程并行,但是对于下一轮迭代的计算,也依旧是串行的。