1、GBDT的原理算法
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,全部树的结论累加起来作最终答案。它在被提出之初就和SVM一块儿被认为是泛化能力较强的算法。
GBDT中的树是回归树(不是分类树),GBDT用来作回归预测,调整后也能够用于分类。
GBDT的思想使其具备自然优点能够发现多种有区分性的特征以及特征组合。业界中,Facebook使用其来自动发现有效的特征、特征组合,来做为LR模型中的特征,以提升CTR预估(Click-Through Rate Prediction)的准确性(详见参考文献五、6);GBDT在淘宝的搜索及预测业务上也发挥了重要做用(详见参考文献7)。网络
提高树利用加法模型和前向分步算法实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。dom
但对于通常的损失函数,每每每一步优化没那么容易,如上图中的绝对值损失函数和Huber损失函数。针对这一问题,Freidman提出了梯度提高算法:利用最速降低的近似方法,即利用损失函数的负梯度在当前模型的值,做为回归问题中提高树算法的残差的近似值,拟合一个回归树。(注:鄙人私觉得,与其说负梯度做为残差的近似值,不如说残差是负梯度的一种特例)算法以下(截图来自《The Elements of Statistical Learning》):机器学习
算法步骤解释:函数
2、GBDT的参数设置性能
一、推荐GBDT树的深度:6;(横向比较:DecisionTree/RandomForest须要把树的深度调到15或更高)学习
二、【问】xgboost/gbdt在调参时为何树的深度不多就能达到很高的精度?
用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。可是用DecisionTree/RandomForest的时候须要把树的深度调到15或更高。用RandomForest所须要的树的深度和DecisionTree同样我能理解,由于它是用bagging的方法把DecisionTree组合在一块儿,至关于作了屡次DecisionTree同样。可是xgboost/gbdt仅仅用梯度上升法就能用6个节点的深度达到很高的预测精度,使我惊讶到怀疑它是黑科技了。请问下xgboost/gbdt是怎么作到的?它的节点和通常的DecisionTree不一样吗?优化
【答】spa
(1)Boosting主要关注下降误差(bais),所以Boosting能基于泛化性能至关弱的学习器构建出很强的集成;Bagging主要关注下降方差(variance),所以它在不剪枝的决策树、神经网络等学习器上效用更为明显。
(2)随机森林(random forest)和GBDT都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。
Bagging算法是这样作的:每一个分类器都随机从原样本中作有放回的采样,而后分别在这些采样后的样本上训练分类器,而后再把这些分类器组合起来。简单的多数投票通常就能够。其表明算法是随机森林。Boosting的意思是这样,他经过迭代地训练一系列的分类器,每一个分类器采用的样本分布都和上一轮的学习结果有关。其表明算法是AdaBoost, GBDT。
(3)其实就机器学习算法来讲,其泛化偏差能够分解为两部分,误差(bias)和方差(variance)。这个可由下图的式子导出(这里用到了几率论公式D(X)=E(X^2)-[E(X)]^2)。误差指的是算法的指望预测与真实预测之间的误差程度,反应了模型自己的拟合能力;方差度量了同等大小的训练集的变更致使学习性能的变化,刻画了数据扰动所致使的影响。这个有点儿绕,不过你必定知道过拟合。
以下图所示,当模型越复杂时,拟合的程度就越高,模型的训练误差就越小。但此时若是换一组数据可能模型的变化就会很大,即模型的方差很大。因此模型过于复杂的时候会致使过拟合。
当模型越简单时,即便咱们再换一组数据,最后得出的学习器和以前的学习器的差异就不那么大,模型的方差很小。仍是由于模型简单,因此误差会很大。rest
也就是说,当咱们训练一个模型时,误差和方差都得照顾到,漏掉一个都不行。
对于Bagging算法来讲,因为咱们会并行地训练不少不一样的分类器的目的就是下降这个方差(variance) ,由于采用了相互独立的基分类器多了之后,h的值天然就会靠近.因此对于每一个基分类器来讲,目标就是如何下降这个误差(bias),因此咱们会采用深度很深甚至不剪枝的决策树。
对于Boosting来讲,每一步咱们都会在上一轮的基础上更加拟合原数据,因此能够保证误差(bias),因此对于每一个基分类器来讲,问题就在于如何选择variance更小的分类器,即更简单的分类器,因此咱们选择了深度很浅的决策树。
3、参考文献
一、http://www.jianshu.com/p/005a4e6ac775