总览:提升算法按照基分类器是否强依赖,分类器可由基分类器并行生成的为Boosting,串行生成的为Bagging;Bagging中的代表是RF(随机森林),Boosting中主要是Adboost和提升树(boosting tree),而提升树中最常用的是GDBT(Gradient Boosting Tree)。提升算法始终关注两点:一是如何得到基分类器,也就是在每一轮训练中如何改变数据的权值或者概率分布,二是基分类器如何组合成强分类器。
1、Bagging之RF
Bagging是有放回的采样(GDBT的子采样是无放回采样),多数表决(分类),建单平均(回归),分别对应前文提到的两个关注点。因为每次都采用采样来训练模型,因此泛化能力较强,模型的方差低,对训练数据的拟合程度降低,偏差变大;
随机森林在Bagging的基础上进行了改进,首先使用CART决策树作为基分类器,其次在选择特征划分节点时,没有对所有的特征进行过滤,而是考虑特征的子集,随机选择一部分特征,从中选择一个最优的特征进行树的划分,进一步提升了泛化能力;
随机森林的优缺点:
训练可并行化,可给出各个特征对于输出的重要性,模型的方差小,泛化能力强,对部分缺失数据不敏感;缺点是在噪声比较大的样本集上容易陷入过拟合。
2、Boosting之Adboost和GDBT
Boosting
Boosting是将基分类器串行,首先初始化样本权重,然后根据分类误差率更新分类器权重,再更新样本权重;里面涉及的问题包括:(a)如何计算误差率;(b)如何得到基分类器权重;(c)如何更新样本权重;(d)如何集成基分类器;
Adaboost是使用前一轮基分类器的误差率来更新训练样本和类别的权重,回归使用的是CART分类树,分类使用的是CART回归树,算法流程:
这里的样本权值更新公式和类别权重公式由Adaboost的损失函数得到,其损失函数的定义为:
同时为了防止Adaboost过拟合会添加正则项:
Adaboost优缺点:
分类精度高,不容易过拟合,缺点是对异常值敏感,可能会赋予较大的权重。
GDBT
基分类器只使用CART回归树模型,使用负梯度去拟合本轮损失的近似值,进而拟合一个CART回归树。
算法流程:
GBDT的损失函数:
指数损失函数:
对数损失函数:
同时GDBT为防止过拟合,正则化:
通常V的取值范围是(0,1)
优缺点:
灵活处理各类型数据,包括连续值和离散值,准确度高;缺点是不能并行。
3、XGBoost
XGBoost在GBDT的基础上进行了三方面的优化:
(1)算法本身,支持更多的弱分类器,损失函数部分加入了正则,同时在GBDT只对误差做负梯度拟合不同,XGBoost损失函数对误差部分做二阶泰勒展开,更加准确
(2)算法运行效率,Boosting无法并行,但对每颗树的建立,也就是最耗时的决策树的分裂过程,可以进行并行优化;对不同特征的特征划分点XGBoost分别在不同的线程中并行选择分裂的最大增益。同时特征排序存在内存中,方便重复迭代。
(3)健壮性优化,对缺失值的特征处理和加入正则
4、LightGBM
参考: