sklearn中的GBDT模型

和随机森林模型类似,scikit-learn中的GBDT模型也是基于决策树模型的集成算法,区别在于前者基于并行的bagging框架,而后者基于串行的boosting框架。

在这里插入图片描述
将boosting框架作用于CART树上,分别有适用于分类问题的GBDTClassifier和适用于回归问题的GBDTRegressor。两者在参数设定、调参等方面均极为类似。

1. 模型的主要参数

在GBDT中,存在两大类型的参数,分别为boosting框架参数单棵决策树参数

1.1 boosting框架参数

boosting框架参数主要涉及各子决策树的迭代策略:

模型参数Parameter含义GBDTClassifierGBDTRegressor
n_estimators子树数量boosting框架下弱子学习器(子决策树)的数量,其值若偏小模型易欠拟合,若偏大计算量上升且容易过拟合。默认值为100。
learning_rate步长即每个弱学习器的权重缩减系数,用于防止对负梯度方向的过拟合,提高模型的泛化能力。默认值为0.1。
loss损失函数可微的损失函数,sklearn中不支持自定义。对于分类问题,可设置为'deviance'或'exponential',前者为默认值,表示对数损失函数(类似于logitstic回归),后为表示指数损失函数(此时模型退化为Adaboost)。对于回归问题,可设置为'ls', 'lad', 'huber', 'quantile',分别表示最小平方损失、最小绝对值损失、huber损失和分位数损失,默认值为'ls'。
alpha分位数损失参数分位数损失的参数,默认0.9。
criterion分裂标准可选择平方损失和绝对值损失函数。具体可设参数为'friedman_mse', 'mse',和'mae',默认取'friedman_mse'。
subsample样本子采样比例每棵子树在训练时的行采样比值(采用无放回的采样方式),默认为1.0。若取值小于1.0,即为随机GBDT模型。
init先验评估器即根据先验知识,进行初始化的分类器或分类器(需含fit和predict方法)。
validation_fraction用于早停的验证数据比重仅在设置n_iter_no_change时有用,通过设置一定的验证数据,对模型早停标准进行检测。默认值为0.1。
n_iter_no_change早停轮数若模型连续n_iter_no_change次更新,模型的损失函数增益均在tol范围内,则停止更新。默认值为None。
tol早停损失增益阈值若模型连续n_iter_no_change次更新,模型的损失函数增益均在tol范围内,则停止更新。默认值为1e-4

在上述参数的理解和设置中需要特别强调几点:
(1) 步长。步长的意义在于限制每棵子树的拟合能力,类似于梯度下降法中的学习率。该参数的设置与n_estimators的大小关系很大,因此需要联合调参。

(2) loss和criterion。loss参数决定了每棵子决策树在训练时拟合的负梯度方向,各典型损失函数见本博客;而criterion参数则决定了每棵子树在内部分裂时的评估标准,类似于单棵决策树的不纯度增益。即使对于GBDTClassifer,因为其在内部分裂时的训练目标均为连续的损失函数(而非简单的分类标签),所以GBDTClassifer和GBDTRegressor采用的内部分裂criterion是一致的。

(3) early stopping机制。和梯度下降法一样,GBDT设置了early stopping机制。相关参数包括validation_fraction(划分用于验证的数据)、n_iter_no_change(迭代轮数)和tol(阈值)。

1.2 单棵决策树参数

单棵决策树参数与先前介绍的决策树模型非常类似。

模型参数Parameter含义DecisionTreeClassifierDecisionTreeRegressor
max_depth树的深度每棵树生长的最大深度,用于预剪枝,限制模型对应的函数空间。默认为3。
min_samples_split节点分裂后子节点允许的最小样本数用于节点分裂后子节点的校验和撤回,属于后剪枝的范畴。可设为整数或全体样本量的百分比。
min_samples_leaf叶子节点最小样本数树生长过程中,各叶子节点允许的最小样本数量,用于预剪枝。相当于对叶子节点的正则化。默认值为1。
min_weight_fraction_leaf叶子节点最小权重比例从样本权重的角度限制各叶子节点的样本规模,其效果同min_samples_leaf,默认值为0。
max_features每次分裂时选择的特征数默认为None,即选取全量特征。可设置为auto或sqrt,此为ExtraTree的默认值,即选择个全量特征的平方根进行分裂选择。此外可选参数还包括float((全量特征的比例)和log2(全量特征的对数值)
random_state随机种子用于限定模型中的随机性。GBDT模型的随机性主要体现在:(1)max_features决定的特征选择的随机性;(2)subsample决定的行采样的随机性;(3)每次分裂时特征选择的次序的随机性,进而可能导致最优分裂特征的随机(当存在若干组最优分裂策略时)
max_leaf_nodes最大叶子节点数允许模型拥有的最大叶子节点数目上限,用于限制模型规模,属于一种预剪枝策略。默认None,即无限生长。
min_impurity_decrease最小纯度增益若节点分裂后,纯度的提升值小于该阈值,则不进行本次分裂,用于限制模型规模。默认0。
min_impurity_split最小分裂纯度当节点的纯度小于该阈值时,停止分裂,作为叶子节点。是一种预剪枝策略。
presort 特征预排序是否在训练前对每个特征的大小值进行预排序,在小规模数量级上可能会提高训练速度。
此外在分类问题中经常会涉及到样本的不均衡问题,而快速计算该值可使用==sklearn.utils.compute_sample_weight==和==sklearn.utils.compute_class_weight==方法。
2. 模型的主要方法

GBDT是基于boosting框架的串行建模方法,其能够记录每步更新的情况。

模型方法Parameter含义备注
fit模型训练可通过sample_weight参数来设置权重。
predict预测结果返回综合各子决策树结果后的分类值或者回归值,其值为每棵子树对应结果值的加权和。
decision_function分类问题决策函数仅用于分类问题,数值上等于每棵子决策树对应叶子节点数值(负梯度方向拟合值)对应的加权和(利用步长加权),从而可以推导出分类问题的预测结果。
predict_prob概率预测根据decision_function得到的概率值。
predict_log_proba对数概率预测根据decision_function得到的对数概率值。
staged_predict分段预测值每棵子树的分段预测值,可用于监测学习过程。
apply预测节点统计返回各子决策树预测结果所在叶子节点的编号(在sklearn中该编号序列中也包括非叶子节点的编号)。
3. 模型的主要属性
模型属性Parameter含义备注
n_estimators_估计器列表返回由n_estimators个子决策树构成的列表
feature_importances_特征重要性基于单棵决策数的gini_importance,得到各特征的加权和
oob_improvement_样本分类结果对于袋外数据,损失函数在每棵子树上的提升值序列
train_score_特征权重对于袋内数据,损失函数在每棵子树上的提升值序列
init_含义初始时刻的基础模型
注意,相较于单棵决策树的feature_importances_,GBDT模型中的feature_importances_是对各子决策树结果的加权平均。
4. 模型的可视化

不同于单棵决策树可以进行有效的可视化,GBDT模型由于子学习器众多,且为串行运算过程,因此无法进行有效的可视化。即使可以对其中的每棵决策树进行单独的可视化,但考虑到随机性的影响,意义并不大。

5. 模型的调参

(1)根据问题场景,选择合适的损失loss和分裂标准criterion。并视情选择早停参数;
(2)联合调优n_estimators和learning_rate参数;
(3)按照决策树模型的调参顺序进行调整,详见决策树模型
(4)调整随机采样参数,主要包括列采样max_features和行采样subsample;
(5)适当同比例缩小learning_rate和增大n_estimators的参数值,以进一步提升最终模型的泛化能力。

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值