当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn GradientBoostingClassifier用法及代码示例


本文简要介绍python语言中 sklearn.ensemble.GradientBoostingClassifier 的用法。

用法:

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)

用于分类的梯度提升。

GB 以正向stage-wise 方式构建加法模型;它允许优化任意可微损失函数。在每个阶段 n_classes_ 回归树都适合二项式或多项式偏差损失函数的负梯度。二元分类是一种特殊情况,其中只引入了一个回归树。

在用户指南中阅读更多信息。

参数

loss{‘deviance’, ‘exponential’},默认='偏差'

要优化的损失函数。 ‘deviance’ 指的是带有概率输出的分类的偏差(=逻辑回归)。对于损失‘exponential’梯度提升恢复AdaBoost算法。

learning_rate浮点数,默认=0.1

学习率将每棵树的贡献缩小 learning_rate 。 learning_rate 和 n_estimators 之间存在权衡。

n_estimators整数,默认=100

要执行的升压级数。梯度提升对于过度拟合相当稳健,因此大量通常会带来更好的性能。

subsample浮点数,默认=1.0

用于拟合各个基础学习器的样本分数。如果小于 1.0,则会导致随机梯度提升。 subsample 与参数 n_estimators 交互。选择 subsample < 1.0 会导致方差减少和偏差增加。

criterion{‘friedman_mse’, ‘squared_error’, ‘mse’, ‘mae’},默认='friedman_mse'

测量分割质量的函数。支持的标准是均方误差的‘friedman_mse’,Friedman 的改进分数,均方误差的‘squared_error’,平均绝对误差的‘mae’。 ‘friedman_mse’ 的默认值通常是最好的,因为它在某些情况下可以提供更好的近似值。

min_samples_splitint 或浮点数,默认=2

拆分内部节点所需的最小样本数:

  • 如果是 int,则将 min_samples_split 视为最小数字。
  • 如果是浮点数,那么 min_samples_split 是一个分数,而 ceil(min_samples_split * n_samples) 是每个拆分的最小样本数。
min_samples_leafint 或浮点数,默认=1

叶节点所需的最小样本数。只有在左右分支中的每个分支中至少留下min_samples_leaf 训练样本时,才会考虑任何深度的分割点。这可能具有平滑模型的效果,尤其是在回归中。

  • 如果是 int,则将 min_samples_leaf 视为最小数字。
  • 如果是浮点数,那么 min_samples_leaf 是分数,而 ceil(min_samples_leaf * n_samples) 是每个节点的最小样本数。
min_weight_fraction_leaf浮点数,默认=0.0

需要在叶节点处的权重总和(所有输入样本的)的最小加权分数。当未提供sample_weight 时,样本具有相同的权重。

max_depth整数,默认=3

单个回归估计器的最大深度。最大深度限制了树中的节点数。调整此参数以获得最佳性能;最佳值取决于输入变量的相互作用。

min_impurity_decrease浮点数,默认=0.0

如果该分裂导致杂质减少大于或等于该值,则该节点将被分裂。

加权杂质减少方程如下:

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

其中N是样本总数,N_t是当前节点的样本数,N_t_L是左孩子的样本数,N_t_R是右孩子的样本数.

N , N_t , N_t_RN_t_L 都是指加权和,如果通过了 sample_weight

init估计器或‘zero’,默认=无

用于计算初始预测的估计器对象。 init 必须提供 fitpredict_proba 。如果‘zero’,则初始原始预测设置为零。默认情况下,使用 DummyEstimator 预测类先验。

random_stateint、RandomState 实例或无,默认=无

控制在每次提升迭代中给予每个树估计器的随机种子。此外,它还控制每次拆分时特征的随机排列(有关详细信息,请参阅注释)。如果n_iter_no_change 不是None,它还控制训练数据的随机拆分以获得验证集。传递 int 以获得跨多个函数调用的可重现输出。请参阅词汇表。

max_features{‘auto’, ‘sqrt’, ‘log2’}, int 或浮点数,默认=无

寻找最佳分割时要考虑的特征数量:

  • 如果是 int,则在每次拆分时考虑 max_features 特征。
  • 如果是浮点数,那么 max_features 是一个分数,并且在每次拆分时都会考虑 int(max_features * n_features) 特征。
  • 如果 ‘auto’,那么 max_features=sqrt(n_features)
  • 如果 ‘sqrt’,那么 max_features=sqrt(n_features)
  • 如果 ‘log2’,那么 max_features=log2(n_features)
  • 如果没有,那么 max_features=n_features

选择 max_features < n_features 会导致方差减少和偏差增加。

注意:在找到至少一个节点样本的有效分区之前,对拆分的搜索不会停止,即使它需要有效地检查超过 max_features 的特征。

verbose整数,默认=0

启用详细输出。如果为 1,那么它会不时打印进度和性能(树越多,频率越低)。如果大于 1,那么它会打印每棵树的进度和性能。

max_leaf_nodes整数,默认=无

以best-first 方式用max_leaf_nodes 种植树。最佳节点定义为杂质的相对减少。如果 None 则无限数量的叶节点。

warm_start布尔,默认=假

当设置为 True 时,重用前一个调用的解决方案以适应并向集成添加更多估计器,否则,只需删除前一个解决方案。请参阅词汇表。

validation_fraction浮点数,默认=0.1

留出作为提前停止验证集的训练数据的比例。必须介于 0 和 1 之间。仅在 n_iter_no_change 设置为整数时使用。

n_iter_no_change整数,默认=无

n_iter_no_change 用于决定当验证分数没有提高时是否使用提前停止来终止训练。默认情况下,它设置为 None 以禁用提前停止。如果设置为一个数字,它将留出 validation_fraction 大小的训练数据作为验证,并在验证分数在之前的所有 n_iter_no_change 迭代次数中都没有提高时终止训练。分裂是分层的。

tol浮点数,默认=1e-4

提前停止的公差。当 n_iter_no_change 迭代(如果设置为数字)的损失至少没有改善 tol 时,训练停止。

ccp_alpha非负浮点数,默认=0.0

用于最小Cost-Complexity 修剪的复杂度参数。将选择具有最大成本复杂度且小于ccp_alpha 的子树。默认情况下,不进行剪枝。有关详细信息,请参阅最小 Cost-Complexity 修剪。

属性

n_estimators_int

通过提前停止选择的估计器数量(如果指定了n_iter_no_change)。否则设置为 n_estimators

feature_importances_ndarray 形状 (n_features,)

基于杂质的特征重要性。

oob_improvement_ndarray 形状(n_estimators,)

out-of-bag 样本相对于前一次迭代的损失(=偏差)的改进。 oob_improvement_[0] 是第一阶段损失相对于init 估计器的改进。仅在 subsample < 1.0 时可用

train_score_ndarray 形状(n_estimators,)

i-th 分数 train_score_[i] 是模型在 in-bag 样本上迭代 i 时的偏差(= 损失)。如果subsample == 1 这是训练数据的偏差。

loss_LossFunction

具体的LossFunction 对象。

init_估计器

提供初始预测的估计器。通过 init 参数或 loss.init_estimator 设置。

estimators_ndarray of DecisionTreeRegressor of shape (n_estimators, loss_.K )

拟合sub-estimators 的集合。 loss_.K 为 1 表示二进制分类,否则为 n_classes。

classes_ndarray 形状 (n_classes,)

类标签。

n_features_int

已弃用:属性 n_features_ 在版本 1.0 中已弃用,并将在 1.2 中删除。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

n_classes_int

类的数量。

max_features_int

max_features 的推断值。

注意

每次拆分时,特征总是随机排列。因此,即使在相同的训练数据和 max_features=n_features 的情况下,如果在搜索最佳拆分期间枚举的几个拆分的标准改进相同,则找到的最佳拆分可能会有所不同。要在拟合期间获得确定性行为,必须修复 random_state

参考

J. Friedman,贪心函数逼近:梯度提升机,统计年鉴,卷。 2001 年第 29 期,第 5 期。

  1. 弗里德曼,随机梯度提升,1999

T. Hastie、R. Tibshirani 和 J. Friedman。统计学习的要素。 2,施普林格,2009 年。

例子

以下示例显示了如何将具有 100 个决策树桩的梯度提升分类器拟合为弱学习器。

>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> X, y = make_hastie_10_2(random_state=0)
>>> X_train, X_test = X[:2000], X[2000:]
>>> y_train, y_test = y[:2000], y[2000:]
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
...     max_depth=1, random_state=0).fit(X_train, y_train)
>>> clf.score(X_test, y_test)
0.913...

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.ensemble.GradientBoostingClassifier。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。