梯度提升树GBDT

Posted guesswhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梯度提升树GBDT相关的知识,希望对你有一定的参考价值。

梯度提升树GBDT

GBDT是Boosting家庭中,除AdaBoost外另一个重要的算法。算法思想同样是让本轮迭代找到的决策树的损失比上轮更小。

GBDT负梯度拟合

用损失函数负梯度来拟合本轮损失近似值,进而拟合一个CART回归树。第t轮的第i个样本的损失函数的负梯度表示为:

[r_{ti}=-[frac{partial L(y_i,f(x_i))} {partial f(x_i)}]_{f(x)=f_{t-1}(x)} ]

利用((x_i,r_{ti})quad i=1,2,...,m)我们可以拟合一棵CART回归树,得到了第t棵回归树,对应的叶节点区域(R_{tj},j=1,2,...,J)其中J为叶子节点的个数。

针对每一个叶子节点里的样本,我们求出使用损失函数最小,也就是拟合叶节点最好的输出值(c_{tj})如下

[c_{tj}=underbrace{argmin}_csum_{x_iin R_{tj}}L(y_i,f_{t-1}(x_i)+c) ]

这样我们得到了本轮的决策树拟合函数如下

[h_t(x)=sum_{j=1}^Jc_{tj}I(xin R_{tj}) ]

从而本轮最终得到的强学习器表达如下:

[f_t(x)=f_{t-1}(x)+sum_{j=1}^Jc_{tj}(xin R_{tj}) ]

通过损失函数负梯度拟合,来减小误差。

GBDT常用损失函数

指数损失函数--类

[L(y,f(x))=exp(-yf(x)) ]

对数损失函数--分类

[L(y,f(x))=-sum_{k=1}^Ky_klog p_k(x) ]

均方差--回归

[L(y,f(x))=(y-f(x))^2 ]

绝对损失--回归

[L(y,f(x))=|y-f(x)| ]

Huber损失、分位损失--回归

见刘建平博客园

GBDT正则化

为防止过拟合,主要有三种方式

1)学习步长

2)子采样比例,这里是不放回抽样

3)CART树进行剪枝

GBDT总结

GBDT优点:

  1. 可以灵活处理各类型数据,包括连续值和离散值
  2. 调参较少,也可达到较好的准确率,相对SVM
  3. 对异常点的鲁棒性强

GBDT缺点:

  1. 学习器之间存在信赖关系,不能并行

sklearn GBDT使用

类库

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import GradientBoostingRegressor

参数

  1. n_estimators:最大迭代次
  2. learning_rate:学习器权重缩减系数
  3. subsample:子采样
  4. init:初始化学习器
  5. loss:损失函数

实例

gbm = GradientBoostingClassifier(random_state=10)
gbm.fit(x,y)

然后使用GridSearchCV对各参数进行调试。

param_test = {‘n_estimators‘: range(20, 81, 10)}
gs = GridSearchCV(estimator=GradientBoostingClassifier(learning_rate=0.1, min_samples_split=300, min_samples_leaf=20, max_depth=8,max_features=‘sqrt‘, subsample=0.8, random_state=10), param_grid=param_test,scoring=‘roc_auc‘, iid=False, cv=5)

以上是关于梯度提升树GBDT的主要内容,如果未能解决你的问题,请参考以下文章

Spark2.0机器学习系列之6:GBDT(梯度提升决策树)GBDT与随机森林差异参数调试及Scikit代码分析

BoostingAdaboostAdaBoost模型的优缺点提升树梯度提升树GBDT

简单易学的机器学习算法——梯度提升决策树GBDT

笔记︱决策树族——梯度提升树(GBDT)

GBDT-梯度提升决策树

梯度提升树GBDT