GradientBoostingClassifier#
- class sklearn.ensemble.GradientBoostingClassifier(*, loss='log_loss', 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)[source]#
用于分类的梯度提升。
此算法以向前阶段式方式构建加性模型;它允许优化任意可微损失函数。在每个阶段,都会在损失函数(例如二元或多类对数损失)的负梯度上拟合
n_classes_个回归树。二元分类是一种特殊情况,其中只诱导一个回归树。HistGradientBoostingClassifier是此算法的一种快得多的变体,适用于中型和大型数据集(n_samples >= 10_000),并支持单调约束。在用户指南中阅读更多内容。
- 参数:
- loss{‘log_loss’, ‘exponential’}, default=’log_loss’
要优化的损失函数。‘log_loss’ 指的是二项式和多项式偏差,与逻辑回归中使用的相同。它对于具有概率输出的分类是一个很好的选择。对于损失 ‘exponential’,梯度提升恢复了 AdaBoost 算法。
- learning_ratefloat, default=0.1
学习率通过
learning_rate缩小每棵树的贡献。学习率和 n_estimators 之间存在权衡。值必须在[0.0, inf)范围内。有关此参数及其与
subsample相互作用的示例,请参阅梯度提升正则化。- n_estimatorsint, default=100
要执行的提升阶段数。梯度提升对过拟合相当鲁棒,因此通常较大的值会带来更好的性能。值必须在
[1, inf)范围内。- subsamplefloat, default=1.0
用于拟合单个基本学习器的样本分数。如果小于 1.0,则会导致随机梯度提升。
subsample与参数n_estimators相互作用。选择subsample < 1.0会导致方差减小而偏差增加。值必须在(0.0, 1.0]范围内。- criterion{‘friedman_mse’, ‘squared_error’}, default=’friedman_mse’
衡量分割质量的函数。支持的标准是 'friedman_mse'(带有 Friedman 改进分数的均方误差)和 'squared_error'(均方误差)。默认值 'friedman_mse' 通常是最佳选择,因为它在某些情况下可以提供更好的近似。
版本 0.18 新增。
- min_samples_splitint or float, default=2
分割内部节点所需的最小样本数。
如果为 int,则值必须在
[2, inf)范围内。如果为 float,则值必须在
(0.0, 1.0]范围内,并且min_samples_split将为ceil(min_samples_split * n_samples)。
版本 0.18 更改:添加了分数浮点值。
- min_samples_leafint or float, default=1
叶节点所需的最小样本数。只有当分割点在左右分支中都留下至少
min_samples_leaf个训练样本时,才会考虑该分割点。这可能具有平滑模型的效果,尤其是在回归中。如果为 int,则值必须在
[1, inf)范围内。如果为 float,则值必须在
(0.0, 1.0)范围内,并且min_samples_leaf将为ceil(min_samples_leaf * n_samples)。
版本 0.18 更改:添加了分数浮点值。
- min_weight_fraction_leaffloat, default=0.0
叶节点所需的总权重(所有输入样本)的最小加权分数。如果未提供 sample_weight,则样本具有相等的权重。值必须在
[0.0, 0.5]范围内。- max_depthint or None, default=3
单个回归估计器的最大深度。最大深度限制了树中的节点数。调整此参数以获得最佳性能;最佳值取决于输入变量的相互作用。如果为 None,则节点会扩展直到所有叶子都是纯净的,或者直到所有叶子包含的样本少于 min_samples_split。如果为 int,则值必须在
[1, inf)范围内。- min_impurity_decreasefloat, default=0.0
如果此分割导致的杂质减少大于或等于此值,则会分割节点。值必须在
[0.0, inf)范围内。加权杂质减少方程如下
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是右子节点中的样本数。如果传递了
sample_weight,则N、N_t、N_t_R和N_t_L都指的是加权和。Added in version 0.19.
- initestimator or ‘zero’, default=None
用于计算初始预测的估计器对象。
init必须提供 fit 和 predict_proba。如果为 ‘zero’,则初始原始预测设置为零。默认情况下,使用预测类先验的DummyEstimator。- random_stateint, RandomState instance or None, default=None
控制在每次提升迭代中赋予每个树估计器的随机种子。此外,它还控制每次分割时特征的随机排列(有关详细信息,请参阅注释)。如果
n_iter_no_change不为 None,它还控制训练数据的随机分割以获取验证集。传递一个 int 以在多次函数调用中获得可重现的输出。请参阅术语表。- max_features{‘sqrt’, ‘log2’}, int or float, default=None
寻找最佳分割时要考虑的特征数量。
如果为 int,则值必须在
[1, inf)范围内。如果为 float,则值必须在
(0.0, 1.0]范围内,并且每次分割时考虑的特征将为max(1, int(max_features * n_features_in_))。如果为 ‘sqrt’,则
max_features=sqrt(n_features)。如果为 ‘log2’,则
max_features=log2(n_features)。如果为 None,则
max_features=n_features。
选择
max_features < n_features会导致方差减小而偏差增加。注意:即使需要有效检查多于
max_features个特征,搜索分割也不会停止,直到找到至少一个有效的节点样本分区。- verboseint, default=0
启用详细输出。如果为 1,则会偶尔打印进度和性能(树越多,频率越低)。如果大于 1,则会为每棵树打印进度和性能。值必须在
[0, inf)范围内。- max_leaf_nodesint, default=None
以最佳优先方式增长树,使其具有
max_leaf_nodes个叶节点。最佳节点定义为杂质的相对减少。值必须在[2, inf)范围内。如果为None,则叶节点数不受限制。- warm_startbool, default=False
当设置为
True时,重用上次调用 fit 的解决方案,并向集成添加更多估计器,否则,擦除以前的解决方案。请参阅术语表。- validation_fractionfloat, default=0.1
作为验证集预留的训练数据比例,用于提前停止。值必须在
(0.0, 1.0)范围内。仅当n_iter_no_change设置为整数时使用。0.20 版本新增。
- n_iter_no_changeint, default=None
n_iter_no_change用于决定当验证分数没有提高时是否使用提前停止来终止训练。默认情况下,设置为 None 以禁用提前停止。如果设置为一个数字,它将把validation_fraction大小的训练数据作为验证集,并在所有前n_iter_no_change次迭代中验证分数没有提高时终止训练。分割是分层的。值必须在[1, inf)范围内。请参阅梯度提升中的提前停止。0.20 版本新增。
- tolfloat, default=1e-4
提前停止的容忍度。当损失在
n_iter_no_change次迭代中(如果设置为数字)没有至少提高 tol 时,训练停止。值必须在[0.0, inf)范围内。0.20 版本新增。
- ccp_alphanon-negative float, default=0.0
用于最小成本复杂性剪枝的复杂性参数。将选择成本复杂性小于
ccp_alpha的最大子树。默认情况下,不执行剪枝。值必须在[0.0, inf)范围内。有关详细信息,请参阅最小成本复杂性剪枝。有关此类剪枝的示例,请参阅使用成本复杂性剪枝后剪枝决策树。版本 0.22 新增。
- 属性:
- n_estimators_int
如果指定了
n_iter_no_change,则由提前停止选择的估计器数量。否则设置为n_estimators。0.20 版本新增。
- n_trees_per_iteration_int
每次迭代构建的树的数量。对于二元分类器,这始终是 1。
版本 1.4.0 新增。
feature_importances_ndarray of shape (n_features,)基于杂质的特征重要性。
- oob_improvement_ndarray of shape (n_estimators,)
袋外样本上相对于前一次迭代的损失改进。
oob_improvement_[0]是第一阶段相对于init估计器的损失改进。仅当subsample < 1.0时可用。- oob_scores_ndarray of shape (n_estimators,)
袋外样本上的损失值完整历史记录。仅当
subsample < 1.0时可用。在版本 1.3 中新增。
- oob_score_float
袋外样本上的损失的最后一个值。它与
oob_scores_[-1]相同。仅当subsample < 1.0时可用。在版本 1.3 中新增。
- train_score_ndarray of shape (n_estimators,)
第 i 个分数
train_score_[i]是迭代i时模型在袋内样本上的损失。如果subsample == 1,则这是训练数据上的损失。- init_estimator
提供初始预测的估计器。通过
init参数设置。- estimators_ndarray of DecisionTreeRegressor of shape (n_estimators,
n_trees_per_iteration_) 拟合的子估计器集合。
n_trees_per_iteration_对于二元分类为 1,否则为n_classes。- classes_ndarray of shape (n_classes,)
类别标签。
- n_features_in_int
在 拟合 期间看到的特征数。
0.24 版本新增。
- feature_names_in_shape 为 (
n_features_in_,) 的 ndarray 在 fit 期间看到的特征名称。仅当
X具有全部为字符串的特征名称时才定义。1.0 版本新增。
- n_classes_int
类的数量。
- max_features_int
推断的 max_features 值。
另请参阅
HistGradientBoostingClassifier基于直方图的梯度提升分类树。
sklearn.tree.DecisionTreeClassifier决策树分类器。
RandomForestClassifier一个元估计器,它在数据集的各个子样本上拟合多个决策树分类器,并使用平均来提高预测准确性并控制过拟合。
AdaBoostClassifier一个元估计器,它首先在原始数据集上拟合一个分类器,然后在同一数据集上拟合额外的分类器副本,其中调整错误分类实例的权重,使后续分类器更关注困难情况。
注意事项
特征总是在每次分割时随机排列。因此,即使使用相同的训练数据和
max_features=n_features,如果在搜索最佳分割期间枚举的几个分割的准则改进相同,则找到的最佳分割可能会有所不同。为了在拟合期间获得确定性行为,必须固定random_state。References
J. Friedman, Greedy Function Approximation: A Gradient Boosting Machine, The Annals of Statistics, Vol. 29, No. 5, 2001.
Friedman, Stochastic Gradient Boosting, 1999
T. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning Ed. 2, Springer, 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
- apply(X)[source]#
将集成中的树应用于 X,返回叶节点索引。
版本0.17中新增。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,其 dtype 将转换为
dtype=np.float32。如果提供了稀疏矩阵,它将转换为稀疏的csr_matrix。
- 返回:
- X_leavesarray-like of shape (n_samples, n_estimators, n_classes)
对于 X 中的每个数据点 x 和集成中的每棵树,返回 x 在每个估计器中最终到达的叶节点索引。在二元分类的情况下,n_classes 为 1。
- decision_function(X)[source]#
计算
X的决策函数。- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。
- 返回:
- scorendarray of shape (n_samples, n_classes) or (n_samples,)
输入样本的决策函数,对应于从集成树预测的原始值。类的顺序对应于属性 classes_ 中的顺序。回归和二元分类产生形状为 (n_samples,) 的数组。
- fit(X, y, sample_weight=None, monitor=None)[source]#
拟合梯度提升模型。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。- yarray-like of shape (n_samples,)
目标值(分类中的字符串或整数,回归中的实数)对于分类,标签必须对应于类别。
- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。如果为 None,则样本权重相等。在每个节点中搜索分割时,将忽略会创建净零或负权重子节点的分割。在分类的情况下,如果分割会导致任一子节点中的任何单个类具有负权重,也会忽略该分割。
- monitorcallable, default=None
在每次迭代后调用 monitor,使用当前迭代、估计器引用和
_fit_stages的局部变量作为关键字参数callable(i, self, locals())。如果可调用对象返回True,则停止拟合过程。monitor 可用于各种目的,例如计算保留估计、提前停止、模型内省和快照。
- 返回:
- selfobject
拟合的估计器。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅 用户指南,了解路由机制如何工作。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deepbool, default=True
如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。
- 返回:
- paramsdict
参数名称映射到其值。
- predict(X)[source]#
预测 X 的类别。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。
- 返回:
- yndarray of shape (n_samples,)
预测值。
- predict_log_proba(X)[source]#
预测 X 的类别对数概率。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。
- 返回:
- pndarray of shape (n_samples, n_classes)
输入样本的类别对数概率。类的顺序对应于属性 classes_ 中的顺序。
- Raises:
- AttributeError
如果
loss不支持概率。
- predict_proba(X)[source]#
预测 X 的类别概率。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。
- 返回:
- pndarray of shape (n_samples, n_classes)
输入样本的类别概率。类的顺序对应于属性 classes_ 中的顺序。
- Raises:
- AttributeError
如果
loss不支持概率。
- score(X, y, sample_weight=None)[source]#
返回在提供的数据和标签上的 准确率 (accuracy)。
在多标签分类中,这是子集准确率 (subset accuracy),这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
测试样本。
- yshape 为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like
X的真实标签。- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
- 返回:
- scorefloat
self.predict(X)相对于y的平均准确率。
- set_fit_request(*, monitor: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingClassifier[source]#
配置是否应请求元数据以传递给
fit方法。请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过
enable_metadata_routing=True启用了元数据路由(请参阅sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。每个参数的选项如下:
True:请求元数据,如果提供则传递给fit。如果未提供元数据,则忽略该请求。False:不请求元数据,元估计器不会将其传递给fit。None:不请求元数据,如果用户提供元数据,元估计器将引发错误。str:应将元数据以给定别名而不是原始名称传递给元估计器。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。在版本 1.3 中新增。
- 参数:
- monitorstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit中monitor参数的元数据路由。- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有<component>__<parameter>形式的参数,以便可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计器参数。
- 返回:
- selfestimator instance
估计器实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') GradientBoostingClassifier[source]#
配置是否应请求元数据以传递给
score方法。请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过
enable_metadata_routing=True启用了元数据路由(请参阅sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。每个参数的选项如下:
True:请求元数据,如果提供则传递给score。如果未提供元数据,则忽略该请求。False:不请求元数据,元估计器不会将其传递给score。None:不请求元数据,如果用户提供元数据,元估计器将引发错误。str:应将元数据以给定别名而不是原始名称传递给元估计器。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。在版本 1.3 中新增。
- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
score方法中sample_weight参数的元数据路由。
- 返回:
- selfobject
更新后的对象。
- staged_decision_function(X)[source]#
计算
X在每次迭代的决策函数。此方法允许在每个阶段后进行监控(即确定测试集上的误差)。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
输入样本。在内部,它将转换为
dtype=np.float32,如果提供了稀疏矩阵,则转换为稀疏的csr_matrix。
- 生成:
- scoregenerator of ndarray of shape (n_samples, k)
输入样本的决策函数,对应于从集成树预测的原始值。类对应于属性 classes_ 中的顺序。回归和二元分类是
k == 1的特殊情况,否则k==n_classes。