梯度提升树(Gradient Boosting Decision Tree, GBDT)是提升法中的代表算法
GBDT中包含Boosting三要素
建模流程:
依据上一个弱评估器的结果,计算损失函数,并使用损失函数自适应影响下一个弱评估器的构建。集成模型输出的结果,受到整体所有弱评估器的影响。
GBDT的不同
弱评估器
GBDT的弱评估器输出类型不再和整体集成算法输出类型一致,无论GBDT整体在执行回归、分类、排序任务,弱评估器一定是回归器。GBDT通过sigmoid或softmax函数输出具体的分类结果,但实际弱评估器一定是回归器。
损失函数
GBDT损失函数不再局限于固定或单一的某个损失函数
拟合残差
GBDT通过修改后续弱评估器的拟合目标(标签y)来直接影响后续弱评估器的结构,每次用于建立弱评估器的是样本以及挡下集成输出与真实标签的差异,而Adaboost通过调整数据分布间接影响后续弱评估器。
抽样思想
GBDT加入了随机森林的随机抽样思想,在每次建树前,允许对样本和特征进行抽样来增大弱评估器之间的独立性。
sklearn 中集成了GBDT分类和GBDT回归
class sklearn.ensemble.GradientBoostingClassifier(*, loss='deviance', learning_rate=0.1, n_estimators=100, subsample=1.0, criterion='friedman_mse', min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)
类型 | 参数/属性 |
迭代过程 | 参数:n_extimators, learning_rate, loss, alpha, init 属性:loss_, init_, extimators_ |
弱评估器结构 | criterion, max_depth, min_samples_split, min_samples_leaf, min_weight_fraction_leaf, max_leaf_nodes, min_impurity_decrease |
提前停止 | 参数:validation_fraction, n_iter_no_change, tol 属性:n_estimators_ |
弱评估的器训练数据 | 参数:subsam, max_featuures, random_state 属性:oob_improvement, train_score_ |
其它 | ccp_alpha |
1. 迭代过程
n_estimators:具体迭代次数
learning_rate:学习率参数
init:输入计算初始预测结果的估计器对象
可以输入任意评估器,如决策树、逻辑回归等可以输出概率的模型
字符串“zero”,代表从0开始迭代
None对象,默认为None对象,自动选择类DummyEstimator中的某种默认方式进行预测作为结果
在init中输入训练好的模型会加重GBDT的过拟合,通常选择None作为init的输入
使用回归器完成分类任务
多分类情况会按照实际的标签数建立迭代次数*类别数个弱评估器
GBDT的8种损失函数
GBDT将损失函数从有限的指数损失、MSE推广到任意可微函数
"deviance":交叉熵损失
二分类交叉熵损失
多分类交叉熵损失
二分类指数损失
多分类指数损失
平方误差 squared_error
绝对误差 absolute_error
Huber损失 huber
quantile损失 quantile
当高度关注离群值、并且希望努力将离群值预测正确时,选择平方误差squared_error
努力排除离群值影响、更关注非离群值的时候,选择绝对误差absolute_error
试图平衡离群值与非离群值、没有偏好时,选择Huber或者Quantileloss
参数/属性名 | 作用 |
n_estimators | 集成算法种弱分类器数量,对Boosting算法而言为实际迭代次数 |
learning_rate | Boosting算法中的学习率,影响弱分类器结果的加权求和过程 |
loss、alpha | 需要优化的损失函数,以及特定损失函数需要调节的阈值 |
init | 初始化预测结果H0的设置 |
loss_ | 返回具体的损失函数对象 |
init_ | 返回具体的初始化设置 |
estimators_ | 返回实际建立的评估器列表 |
n_estimators_ | 返回实际迭代次数 |
对于GBDT,各个参数对算法的影响:
影响力 | 参数 |
几乎总是具有巨大影响力 | n_estimators(整体学习能力) learning_rate(整体学习速率) max_features(随机性) |
大部分时候具有影响力 | init(初始化) subsamples(随机性) loss(整体学习能力) |
可能有大影响力,大部分时候影响力不明显 | max_depth(粗剪枝) min_samples_split(精剪枝) min_impurity_decrease(精剪枝) max_leaf_nodes(精剪枝) criterion(分枝敏感度) |
当数据量足够大时,几乎无影响 | random_state ccp_alpha(结构风险) |
可以进行优化的参数:loss、criterion、init、n_estimators、learning_rate、max_features、subsamples、max_depth、min_impurity_decrease
参数 | 范围 |
loss | 'squared_error','absolute_error','huber','quantile' |
criterion | 'friedman_mse','squared_error','mse','mae' |
init | |
n_estimators | (25,200,25) |
learning_rate | (0.05,2.25,0.05) |
max_features | |
subsample | (0.1,0.8,0.1) |
max_depth | (2,30,2) |
min_impurity_decrease | (0,5,1) |