zoukankan      html  css  js  c++  java
  • 梯度提升树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)
    
  • 相关阅读:
    linux内核分析第八周理解进程调度时机跟踪分析进程调度与进程切换的过程
    linux内核分析第六周分析Linux内核创建一个新进程的过程
    Linux内核学习总结
    Linux内核分析第一周通过分析汇编代码理解计算机是如何工作的
    linux内核分析第五周分析system_call中断处理过程
    linux内核分析第三周跟踪分析Linux内核的启动过程
    转载:Understanding WPF Application Lifecycle
    Quick Sort 快速排序
    C#中的Immutable(不变的)
    一个lock和一个deadlock的例子
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882824.html
Copyright © 2011-2022 走看看