版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JN_rainbow/article/details/89074766
GBDT(Gradient Boosting Decision Tree, 梯度提升决策树)不仅可以用于分类问题,还可以用于回归问题,GBDT的核心思想在于,每一棵树学习的是之前所有树的整体预测和标签的误差,这里称之为残差. 即给定A的真实年龄为18,第一棵树预测的年龄是12岁,那么第二棵树预测的目标应当是6岁(18-12)…
GBDT中的所有的树都是CART回归树,而不是分类树.
对于加法模型 f(x)=∑m=1Mβmb(x;γm)f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)f(x)=m=1∑Mβmb(x;γm) 其中b(x;γm)b(x;\gamma_m)b(x;γm)为基函数,γm\gamma_mγm为基函数的参数,βm\beta_mβm为基函数的系数. 在给定训练数据及损失函数的条件下,学习加法模型f(x)f(x)f(x)成为经验风险极小化即损失函数极小化问题. minβm,γm∑i=1NL(yi,∑m=1Mβmb(xi;γm))\min_{\beta_m,\gamma_m}\sum_{i=1}^NL\Big(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m))βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm)) 前向分步算法求解这一优化问题的想法是:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,就可以简化优化的复杂度,每一步只需要优化如下损失函数: minβ,γ∑i=1NL(yi,βb(xi;γ))\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma))β,γmini=1∑NL(yi,βb(xi;γ)) 算法
输入: 训练数据集T,损失函数L(y,f(x))L(y,f(x))L(y,f(x)),基函数集{b(x;γ)}\{b(x;\gamma)\}{b(x;γ)}
输出: 加法模型f(x)f(x)f(x)
这样就将同时求解从m=1m=1m=1到M所有参数βm,γm\beta_m,\gamma_mβm,γm的优化问题简化为逐次求解各个βm,γm\beta_m,\gamma_mβm,γm的优化问题.
利用损失函数的负梯度来作为残差的估计值. 当损失函数为平方误差损失函数时,负梯度就是残差,对于一般的损失函数,它则是残差的近似值.
对于分类问题,常用的损失函数为logloss.
对于回归问题,常用的损失函数为MSE、MAE.
同Adaboost一样,由于是boosting算法,很难并行加速.
参数 | 类型 | 默认值 | 作用 |
---|---|---|---|
loss | {‘deviance’, ‘exponential’} | ‘deviance’ | 损失函数 |
learning_rate | float | 0.1 | 学习率,即每个学习器的权重 |
n_estimators | int | 100 | 树的棵树 |
criterion | str | ‘friedman_mse’ | 分裂算法 |
max_depth | int or None | None | 决策树最大深度 |
n_iter_no_change | int or None | None | 早停轮数 |
tol | float | 1e-4 | 早停阈值 |
validation_fraction | float | 0.1 | 早停验证比例 |
min_samples_split | int or float | 2 | 分裂时最小样本数 |
min_samples_leaf | int or float | 1 | 叶节点最小样本数 |
min_weight_fraction_leaf | float | 0 | 叶节点最小样本权重总值 |
max_features | int float str None | ‘auto’ | 切分时最大的特征数量 |
max_leaf_nodes | int or None | None | 最大叶节点个数 |
min_impurity_decrease | float | 0. | 切分点不纯度最小减少程度,若节点不纯度小于该值,则被移除 |
random_state | int or None | None | 随机种子 |
verbose | int | 0 | 日志输出间隔 |
warm_start | boolean | False | 是否热启动,对上一个模型采用追加的方式 |
回归问题和分类问题都可.