XGBoost学习笔记

XGBoost是陈天奇等人提出的、非常流行的GBDT的变种。其代码库为https://github.com/dmlc/xgboost

XGBoost的教学视频https://www.youtube.com/watch?v=ufHo8vbk6g4

slides:https://www.slideshare.net/ShangxuanZhang/kaggle-winning-solution-xgboost-algorithm-let-us-learn-from-its-author

这个模型可以接受dense或者sparse的matrix作为input features,a numeric vector作为target vector,目标一般选为reg:linear或者binary:logistic,number_of_iterations是模型中加入的树的数目。eval_merics可以用来设定训练metric,一般用auc。classify的结果是概率而不是预测类别,这个需要注意。模型的training objective就是典型的boosting算法的objective。

 

在每一个iteration,模型会加入一棵新的树,所以在第t步,这一步的prediction就是由t棵树的结果构成的。

对于不同的objective,选择的损失函数分别为:

整个算法的目标是使上述损失函数最小化。

算法的正则化约束为如下图。主要取决于树的多少和树的复杂度。

我们使用梯度下降方法来优化目标。在这里我们同时考虑目标函数的一阶导和二阶导。当我们在t步时,我们已经有了t-1步生成的t-1棵树,所以只需要考虑第t棵树,即ft.

为了生成二阶导,我们对目标函数做二阶泰勒展开:

其中gi和hi分别是一阶偏导和二阶偏导。

我们把前t-1步已经优化过的目标删掉,就得到第t步的优化目标。

我们使用决策树来完成第t步的优化,即在每一步,我们都build一棵新的决策树。决策树从一棵空树开始build,在一个小步决定一个节点根据某个feature的某个位置进行分裂。

以上就是XGboost的基本情况,更多细节我们在Difference between Xgboost and lightgbm中阐述。

 

你可能感兴趣的:(GBDT系列)