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, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='deprecated', validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)

源码

梯度增强分类。

GB采用正向阶段的方式建立加性模型;它允许优化任意可微的损失函数。在每一阶段,n_classes_回归树都拟合在二项或多项偏差损失函数的负梯度上。二元分类是一种特殊的情况,其中只有一个回归树被诱导。

用户指南中阅读更多内容。

参数 说明
loss {‘deviance’, ‘exponential’}, default=’deviance’
待优化的损失函数。“偏差”是指具有概率输出的分类偏差(= logistic regression)。对于损失“指数”梯度增强恢复AdaBoost算法。
learning_rate float, default=0.1
学习率通过learning_rate缩小每棵树的贡献。learning_rate和n_estimators之间存在权衡。
n_estimators int, default=100
要执行的推进阶段的数量。梯度增强对过拟合具有较强的鲁棒性,因此大量的梯度增强通常能取得较好的效果。
subsample float, default=1.0
用于拟合单个基本学习者的样本比例。如果小于1.0,会导致随机梯度提升。subsample与参数n_estimators交互。选择subsample < 1.0会导致方差的减少和偏差的增加。
criterion {‘friedman_mse’, ‘mse’, ‘mae’}, default=’friedman_mse’
该函数用来测量分割的质量。支持的标准是' friedman_mse ',即由Friedman提出的具有改进分数的均方误差, mse的平均平方误差,和' mae '的平均绝对误差。默认值' friedman_mse '通常是最好的,因为在某些情况下它可以提供更好的近似值。
版本0.18中的新功能
min_samples_leaf 分割一个内部节点所需的最小样本数:
- 如果为int,则认为min_samples_leaf是最小值。
- 如果为float,min_samples_leaf则为分数, 是每个节点的最小样本数。
ceil(min_samples_leaf * n_samples)
在版本0.18中更改:添加了分数的浮点值。
min_samples_split int or float, default=1
一个叶节点上所需的最小样本数。只有当它在每个左右分支中都留下至少min_samples_leaf训练样本时,任何深度的分割点才会被考虑。这可能会产生平滑模型的效果,特别是在回归中。
- 如果为int,则认为min_samples_split是最小值。
- 如果为float,min_samples_split则为分数, 是每个拆分的最小样本数。
ceil(min_samples_split * n_samples)
在版本0.18中更改:添加了分数的浮点值。
min_weight_fraction_leaf float, default=0.0
一个叶节点上所需的(所有输入样本的)总权重的最小加权分数。当不提供sample_weight时,样本的重量相等。
max_depth int, default=3
单个回归估计量的最大深度。最大深度限制了树中的节点数。优化此参数以获得最佳性能;最佳值取决于输入变量的相互作用。
min_impurity_decrease float, default=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数,是右子节点中的样本数。
NN_tN_t_R并且N_t_L都指的是加权和,如果sample_weight获得通过。
版本0.19中的新功能。
min_impurity_split float, default=None
树提升提前停止的阈值。如果节点的杂质高于阈值,则该节点将分裂,否则为叶。
- 从版本0.19min_impurity_split开始不推荐使用:在版本0.19中不再推荐使用 min_impurity_decrease。的默认值 min_impurity_split在0.23中从1e-7更改为0,并将在0.25中删除。使用min_impurity_decrease代替。
init estimator or ‘zero’, default=None
用于计算初始预测的估计对象。init必须提供fitpredict_proba。如果为“零”,初始的原始预测被设置为零。默认情况下,使用了预测类先验的DummyEstimator
random_state int, RandomState, default=None
控制每个增强迭代器上的树估计器随机种子。此外,它还可以在每次拆分时控制特性的随机排列(更多细节请参见注释)。如果n_iter_no_change不是None,它还控制训练数据的随机分割以获得验证集。在多个函数调用之间传递可重复输出的int
有关更多详细信息,请参见Glossary
max_features {“auto”, “sqrt”, “log2”}, int or float, default=”auto”
寻找最佳分割时要考虑的功能数量:
- 如果为int,则max_features在每个分割处考虑特征。
- 如果为float,max_features则为小数,并 在每次拆分时考虑要素。
- 如果为auto,则为max_features=sqrt(n_features)
- 如果是sqrt,则max_features=sqrt(n_features)
- 如果为log2,则为max_features=log2(n_features)
- 如果为None,则max_features=n_features
注意:直到找到至少一个有效的节点样本分区,分割的搜索才会停止,即使它需要有效检查多于max_features个数的要素也是如此。
verbose int, default=0
启用详细输出。如果是1,那么它会在一段时间内打印进度和性能(树越多,频率越低)。如果大于1,则输出每棵树的进度和性能。
max_leaf_nodes int, default=None
以最佳优先的方式使用max_leaf_nodes来种植树。最佳节点定义为杂质的相对减少。如果没有,则叶节点数没有限制。
warm_start bool, default=False
当设置为True时,重用前面调用的解决方案来适应并向集成添加更多的评估器,否则,只会拟合完整的新森林。有关更多详细信息,请参见Glossary
presort deprecated, default=’deprecated’
此参数不建议使用,将在v0.24中删除。
自版本0.22以来已弃用。
validation_fraction float, default=0.1
为提前停止而预留作为验证集的训练数据的比例。必须在0和1之间。仅在n_iter_no_change被设置为整数时使用。
0.20版中的新功能。
n_iter_no_change int, default=None
n_iter_no_change用于决定在验证分数没有提高时是否使用早期停止来终止训练。默认情况下,它被设置为None来禁用提前停止。如果设置为一个数字,它将把训练数据的validation_fraction大小放在一边作为验证,并在之前所有的n_iter_no_change迭代次数中验证分数没有提高时终止训练。分裂是分层的。
0.20版中的新功能。
tol float, default=1e-4
提前停止的的容忍度。当n_iter_no_change迭代器(如果设置为一个数字)对tol的损失不再增加时,训练停止。
0.20版中的新功能。
ccp_alpha non-negative float, default=0.0
复杂度参数用于最小代价复杂度剪枝。将选择代价复杂度最大且小于ccp_alpha的子树。默认情况下,不执行修剪。
有关更多详细信息,请参见Minimal Cost-Complexity Pruning
0.22版中的新功能。
属性 说明
n_estimators_ int
通过提前停止选择的估计器的数量(如果指定了n_iter_no_change)。否则,它将被设置为n_estimators
0.20版中的新功能。
feature_importances_ ndarray of shape (n_features,)
基于杂质的特性重要性。
oob_improvement_ ndarray of shape (n_estimators,)
相对于之前的迭代,袋外样本损失(=偏差)的改进。oob_improvement_[0]init估计器的第一阶段损失的改进。仅当subsample < 1.0时可用。
train_score_ ndarray of shape (n_estimators,)
i个得分train_score_[i]是模型在第i次迭代时对袋装样本的偏差度(= loss)。如果subsample== 1,这便是训练数据上的偏差。
loss_ LossFunction
具体的LossFunction对象。
init_ estimator
提供最初预测的估计器。通过init参数或loss.init_estimator设置。
estimators_ ndarray of DecisionTreeRegressor of shape (n_estimators, loss_.K)
拟合的次估计值的集合。loss_.K对于二进制分类为1,否则为n_classes
classes_ ndarray of shape (n_classes,)
类标签。
n_features_ int
数据的特征数。
n_classes_ int or list
类的数量。
max_features_ int
max_features的推断值。

另见:

sklearn.ensemble.HistGradientBoostingClassifier

sklearn.tree.DecisionTreeClassifier, RandomForestClassifier

AdaBoostClassifier

注意:

在每次分割时,特性总是随机地进行分配。因此,即使在相同的训练数据和max_features=n_features的情况下,如果搜索最佳分割时列举的几个分割对准则的改进相同,那么找到的最佳分割也会有所不同。为了在拟合过程中获得确定性行为,必须修复random_state

参考文献

J. Friedman, Greedy Function Approximation: A Gradient Boosting Machine, The Annals of Statistics, Vol. 29, No. 5, 2001.

​ 10. Friedman, Stochastic Gradient Boosting, 1999

T. Hastie, R. Tibshirani and J. Friedman. Elements of Statistical Learning Ed. 2, Springer, 2009.

实例

>>> from sklearn.datasets import make_classification
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> from sklearn.model_selection import train_test_split
>>> X, y = make_classification(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, random_state=0)
>>> clf = GradientBoostingClassifier(random_state=0)
>>> clf.fit(X_train, y_train)
GradientBoostingClassifier(random_state=0)
>>> clf.predict(X_test[:2])
array([10])
>>> clf.score(X_test, y_test)
0.88

方法

方法 说明
apply(X) 将森林中的树应用于X,返回叶子索引。
decision_function(X) 计算X的决策函数。
fit(X, y[, sample_weight, monitor]) 拟合gradient boosting模型。
get_params([deep]) 获取此估计器的参数。
predict(X) 预测X的类。
predict_log_proba(X) 预测X的类对数概率。
predict_proba(X) 预测X的类概率。
score(X, y[, sample_weight]) 返回给定测试数据和标签上的平均准确度。
set_params(**params) 设置此估算器的参数。
staged_decision_function(X) 每次迭代计算X的决策函数。
staged_predict(X) 预测X在每个阶段的分类。
staged_predict_proba(X) 预测X在每个阶段的类概率。
__init__(*, 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, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='deprecated', validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)

[源码]

apply(X)

[源码]

将森林中的树应用于X,返回叶子索引。

0.17版本的新功能

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它的dtype将被转换为dtype=np.float32。如果提供了一个稀疏矩阵,它将被转换为一个csr_matrix
返回值 说明
X_leaves array-like of shape (n_samples, n_estimators, n_classes)
对于X中的每个数据点x和集合中的每棵树,返回叶节点x的索引,最后返回到每个估计器中。对于二进制分类,n_classes是1。
decision_function(X)

[源码]

计算X的决策函数。

计算决策函数X

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
返回值 说明
score ndarray of shape (n_samples, n_classes) or (n_samples,)
输入样本的决策函数,它对应于从集合树中预测的原始值。类的顺序对应于属性classes_中的顺序。回归和二分类产生一个数组shape[n_samples]。
property feature_importances_

基于杂质的功能的重要性。

越高,功能越重要。特征的重要性计算为该特征带来的标准的(标准化)总缩减。这也被称为基尼重要性。

警告:基于杂质的特征重要性可能会误导高基数特征(许多唯一值)。另见 sklearn.inspection.permutation_importance

返回值 说明
feature_importances_ ndarray of shape (n_features,)
除非所有树都是仅由根节点组成的单节点树,否则此数组的值总计为1,在这种情况下,它将是零数组。
fit(X, y, sample_weight=None, monitor=None)

[源码]

拟合gradient boosting模型。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
y array-like of shape (n_samples, )
目标值(分类中的字符串或整数,回归中的实数)分类时,标签必须与类对应。
sample_weight array-like of shape (n_samples,), default=None
样本权重。如果没有,那么样本的权重相等。当在每个节点中搜索分割时,将忽略创建具有净零权值或负权值的子节点的分割。在分类的情况下,如果分割会导致任何一个类在任一子节点中具有负权值,那么分割也将被忽略。
monitor callable, default=None
使用当前迭代器下的对估计器的引用和_fit_stages的局部变量作为可调用的关键字参数callable(i、self、locals()),在每次迭代之后调用监视器。如果callable返回True,拟合过程将停止。该监视器可用于各种各样的情景,如计算拉出的估计、提前停止、模型内省和快照。
返回值 说明
self object
get_params(deep=True)

[源码]

获取此估计器的参数。

参数 说明
deep bool, default=True
如果为True,则将返回此估算器和作为估算器的所包含子对象的参数。
返回值 说明
params mapping of string to any
参数名称与其值相对应。
predict(X)

[源码]

预测X的分类。

对输入样本的预测类别进行计算,作为分类器在集成中的加权平均预测。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
返回值 说明
y ndarray of shape (n_sample, )
预测后的回归值。
predict_log_proba(X)

[源码]

预测X的类对数概率。

将输入样本的预测类对数概率计算为集合中基本估计器的平均预测类对数的对数。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
返回值 说明
p ndarray of shape (n_samples, n_classes)
输入样本的类对数概率。类的顺序与属性classes_中的顺序相对应。
报错信息 说明
Raises AttributeError
loss不支持概率。
predict_proba(X)

[源码]

预测X的类概率。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
返回值 说明
p ndarray of shape (n_samples, n_classes)
输入样本的分类概率。类的顺序与属性classes_中的顺序相对应。
报错信息 说明
Raises AttributeError
loss不支持概率。
p ndarray of shape (n_samples, n_classes)
输入样本的分类概率。输出的顺序与其classes_属性相一致。
score(self, X, y, sample_weight=None)

[源码]

返回测试数据和标签的平均准确率。

在多标签分类中,这是子集精度,这是一个苛刻的指标,因为你需要对每个样本正确预测每个标签集。

参数 说明
X array-like of shape (n_sample, n_features)
测试样本。
y array-like of shpe (n_sample, ) or (n_samples, n_outputs)
X的正确标签。
sample_weight array-like of shape (n_samples, ), default = None
样本权重。
返回值 说明
score float
self.predict(X) 关于y的平均准确率。
set_params(**params)

[源码]

设置该估计器的参数。

该方法适用于简单估计器和嵌套对象(如pipline)。后者具有形式为<component>_<parameter>的参数,这样就可以更新嵌套对象的每个组件。

参数 说明
**params dict
估计器参数
返回值 说明
self object
估计实例。
staged_decision_function(X)

每次迭代计算X的决策函数。

该方法允许在每个阶段后进行监控(即在测试集上确定错误)。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
返回值 说明
score generator of ndarray of shape (n_samples, k)
输入样本的决策函数,它对应于从集合树中预测的原始值。这些类对应于属性classes_中的类。回归和二分类是k== 1的特例,否则k==n_classes
staged_predict(X)

[源码]

返回X阶段性的预测。

该方法允许在每个阶段后进行监控(即在测试集上确定错误)。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
产出 说明
y generator of ndarray of shape (n_samples, )
预测后的回归值。
staged_predict_proba(self, X)

[源码]

预测X的类概率。

该方法允许在每个阶段后进行监控(即在测试集上确定错误)。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,它将被转换为dtype=np.float32。以及是否将稀疏矩阵提供给稀疏csr_matrix
产出 说明
p generator of ndarray of shape (n_samples,)
输入样本的预测值。