机器学习——集成算法(二)

接着集成算法讲讲GBDT和Xgboost,二者的原理其实差不多的,他们都属于提升算法。梯度上升(Gradient Boosting)是说,在集成算法中每个弱决策树的生成都是依据损失函数的梯度方向。

提升算法,是找到找到最优解F(x)使得损失函数在训练集上期望(偏差)最小。损失函数若是回归则常取最小平方误差和绝对值误差;如果是回归则采用类似Logister的似然函数,属于指数损失函数。首先从常函数F0(x)开始

                                                    

以贪心算法的思路扩展得到Fm(x)

                                   

这要求在函数空间内的最优化问题,在每次选择最优基函数时十分困难,这里使用梯度下降的方法近似计算(涉及到泛函分析,可以把f当做变量x,来类比求梯度的过程)

                                 

这里是将样本数据代入基函数f(x)得到f(x1)、f(x2)...f(xn),那么损失函数L(y,x)退化为向量L(y,f(x1))、L(y,f(x2))...L(y,f(xn))。为了求步长γ,使用线性搜索求最优步长:

                                  

求最优步长也是随着一次次迭代进行下去的,先计算伪残差(这个概念不懂)

                                  

使用数据计算拟合残差的基函数fm(x),接下来就可以计算出最优步长了(属于一维优化问题?)

                              

从而得到更新的模型

                                      

综上,整个过程通过阶段性的加性扩展和梯度下降手段,将函数估计转化为参数估计,来进行最优化求解(涉及到泛函分析力的一些知识,还不是特别清楚,等以后补上吧)

GBDT,Gradient Boosting Decision Tree是指梯度上升决策树,里面的基函数自然就是决策树了(尤其是CART)。其中的主要过程和前面介绍的提升算法差不多,在第m步迭代中根据伪残差计算决策树tm(x),

                                          

假设该决策树叶子节点数目为J,也就是把输入空间划分为J个不相交的区域R_{1m}R_{2m}...R_{Jm},式子中的b_{jm}是样本所在区域R_{jm}的预测值,I(x)是示性符号。得到第m步的分类器

                                            

其中的最优步长γm由线性搜索计算出来

                                          

更进一步,对树的每个区域分布计算步长,从而系数b_{jm}被合并到步长中(还不懂怎么操作的)

                                      

Xgboost基本的原理与上面推导的类似,但是有对目标函数taylor展开利用其二阶导的信息(GBDT只使用了一阶导去拟合)。设目标函数如下

                                           

利用Taylor展开式

                                      

令损失函数的一阶导和二阶导为

                                                                               

则目标函数展开为

                                     

现在对目标函数化简

                                     

这里的权值w是指每个叶节点的权值,样本落在叶节点q中,则定义f为f_{t}(x)=w_{q(x)}。一个决策树的核心是叶子权值和树结构,项目这个式子中,w即为权值,q即为树结构(即最终哪个样本落在哪个叶子节点上的结构)

                                           

上式子中,决策树的复杂度可考虑叶子结点数和叶权值,可以将正则惩罚项定义为(这种不是唯一的)

                                           

对于上面已经化简的式子,为了继续化简,我们定义

                                          

目标函数变为

                                        

对w求偏导

                                    

回代到原式子

                                 

这样我们只要枚举样本集中的可分点,选择增益最大的划分,来构建决策树。

 GBDT和Xgboost比较,GBDT一般以CART为基分类器,而Xgboost还可以支持LR等现行分类器,这些分类器本身就是带着L1和L2正则化惩罚项的 。GBDT是通过对树进行正则化技术来降低过拟合风险,如剪枝等减少叶节点、限制树层数的措施;而Xgboost是在目标函数中加入正则化项(包含了叶节点数和叶权值)来控制模型复杂度。Xgboost还借鉴随机森林,支持列抽样,可以降低过拟合风险。另外Xgboost虽然是串联的模型,但是在计算时是可以并行进行的,大大提高了计算速率。

 

下面列出各集成算法的优缺点。这里RF算是属于Bagging,其他三个属于Boosting,其中Adaboost属于传统范畴,而GBDT和Xgboost则与传统boosting有较大区别(算是GB算法吧),GB的每一轮迭代都是为了减少残差,是在残差减小的方向上建立的模型。

Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显;Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。

方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响;偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力。

 

随机森林

Adaboost

GBDT

Xgboost

优点

1)在当前所有算法中,具有极好的准确率;

2)能够有效地运行在大数据集上;

3)能够处理具有高维特征的输入样本,而且不需要降维;

4)能够评估各个特征在分类问题上的重要性;

5)在生成过程中,能够获取到内部生成误差的一种无偏估计;

6)对于缺省值问题也能够获得很好得结果;

1)Adaboost作为分类器时,分类精度很高;

2)在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活;

3)作为简单的二元分类器时,构造简单,结果可理解;

4)不容易发生过拟合;

1) 可以灵活处理各种类型的数据,包括连续值和离散值;

2)在相对少的调参时间情况下,预测的准确率也可以比较高,(这个是相对SVM来说的);

3)使用一些健壮的损失函数,对异常值的鲁棒性非常强,比如 Huber损失函数和Quantile损失函数

1) 采用二阶拟合,收敛速度快;

2)防止过拟合,还可以对特征的值有缺失的样本,自动学习出它的分裂方向;

3)计算速度快,支持并行计算

缺点

1)对于许多统计建模者来说,随机森林给人的感觉就像一个黑盒子,你无法控制模型内部的运行。只能在不同的参数和随机种子之间进行尝试;

2)可能有很多相似的决策树,掩盖了真实的结果;

3)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类;

4)执行数据虽然比boosting等快(随机森林属于bagging),但比单只决策树慢多了;

1)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性;1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值