码迷,mamicode.com
首页 > 其他好文 > 详细

梯度提升树GBDT

时间:2020-05-13 16:50:25      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:class   rand   max   cart   好的   lan   之间   个数   mat   

梯度提升树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{\arg\min}_c\sum_{x_i\in R_{tj}}L(y_i,f_{t-1}(x_i)+c) \]

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

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

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

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

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

GBDT常用损失函数

指数损失函数--类

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

对数损失函数--分类

\[L(y,f(x))=-\sum_{k=1}^Ky_k\log 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

标签:class   rand   max   cart   好的   lan   之间   个数   mat   

原文地址:https://www.cnblogs.com/guesswhy/p/12882824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!