HistGradientBoostingClassifier#

class sklearn.ensemble.HistGradientBoostingClassifier(loss='log_loss', *, learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_features=1.0, max_bins=255, categorical_features='from_dtype', monotonic_cst=None, interaction_cst=None, warm_start=False, early_stopping='auto', scoring='loss', validation_fraction=0.1, n_iter_no_change=10, tol=1e-07, verbose=0, random_state=None, class_weight=None)[source]#

基于直方图的梯度提升分类树。

对于大型数据集(n_samples >= 10 000),此估计器比 GradientBoostingClassifier 快得多。

此估计器原生支持缺失值 (NaNs)。在训练过程中,树生长器会根据潜在增益,在每个分裂点学习具有缺失值的样本应该进入左子节点还是右子节点。在预测时,具有缺失值的样本相应地分配给左子节点或右子节点。如果在训练过程中某个给定特征没有遇到缺失值,那么具有缺失值的样本将被映射到具有最多样本的子节点。

此实现受到 LightGBM 的启发。

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

0.21 版本新增。

参数:
loss{‘log_loss’}, default=’log_loss’

在提升过程中使用的损失函数。

对于二元分类问题,‘log_loss’ 也称为 logistic loss、binomial deviance 或 binary crossentropy。在内部,模型在每次提升迭代中拟合一棵树,并使用 logistic sigmoid 函数 (expit) 作为逆链接函数来计算预测的正类概率。

对于多类分类问题,‘log_loss’ 也称为 multinomial deviance 或 categorical crossentropy。在内部,模型在每次提升迭代中为每个类别拟合一棵树,并使用 softmax 函数作为逆链接函数来计算预测的类别概率。

learning_ratefloat, default=0.1

学习率,也称为 收缩率 (shrinkage)。它用作叶子值的乘法因子。使用 1 表示不收缩。

max_iterint, default=100

提升过程的最大迭代次数,即二元分类的最大树数量。对于多类分类,每迭代构建 n_classes 棵树。

max_leaf_nodesint or None, default=31

每棵树的最大叶子数量。必须严格大于 1。如果为 None,则没有最大限制。

max_depthint or None, default=None

每棵树的最大深度。树的深度是从根到最深叶子的边数。默认情况下不限制深度。

min_samples_leafint, default=20

每个叶子的最小样本数。对于样本数少于几百个的小数据集,建议降低此值,因为只会构建非常浅的树。

l2_regularizationfloat, default=0

惩罚具有小 hessians 的叶子的 L2 正则化参数。使用 0 表示无正则化(默认)。

max_featuresfloat, default=1.0

在每个节点分裂中随机选择的特征比例。这是一种正则化形式,较小的值会使树的学习器变弱,并可能防止过拟合。如果存在来自 interaction_cst 的交互约束,则只考虑允许的特征进行子采样。

1.4 版本新增。

max_binsint, default=255

用于非缺失值的最大分箱数量。在训练之前,输入数组 X 的每个特征都被分入整数值分箱中,这使得训练阶段更快。具有少量唯一值的特征可能使用少于 max_bins 的分箱。除了 max_bins 分箱外,始终保留一个分箱用于缺失值。必须不大于 255。

categorical_featuresarray-like of {bool, int, str} of shape (n_features) or shape (n_categorical_features,), default=’from_dtype’

指示类别特征。

  • None:不考虑任何特征为分类特征。

  • boolean array-like:指示分类特征的布尔掩码。

  • integer array-like:指示分类特征的整数索引。

  • str array-like:分类特征的名称(假设训练数据具有特征名称)。

  • "from_dtype":具有 dtype “category” 的 dataframe 列被视为分类特征。使用此功能时,输入必须是公开 __dataframe__ 方法的对象,例如 pandas 或 polars DataFrames。

对于每个分类特征,必须最多有 max_bins 个唯一类别。编码为数值 dtype 的分类特征的负值被视为缺失值。所有分类值都转换为浮点数。这意味着分类值 1.0 和 1 被视为同一类别。

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

0.24 版本新增。

Changed in version 1.2: 添加了对特征名称的支持。

Changed in version 1.4: 添加了 "from_dtype" 选项。

Changed in version 1.6: 默认值从 None 更改为 "from_dtype"

monotonic_cstarray-like of int of shape (n_features) or dict, default=None

使用以下整数值指定要对每个特征施加的单调约束

  • 1:单调增加

  • 0:无约束

  • -1:单调减少

如果是一个具有 str 键的 dict,则按名称将特征映射到单调约束。如果是一个数组,则按位置将特征映射到约束。请参阅 使用特征名称指定单调约束 以获取用法示例。

约束仅对二元分类有效,并且对正类概率保持有效。在 用户指南 中阅读更多内容。

0.23 版本新增。

Changed in version 1.2: 接受以特征名称为键的约束字典。

interaction_cst{“pairwise”, “no_interactions”} or sequence of lists/tuples/sets of int, default=None

指定交互约束,即在子节点分裂中可以相互交互的特征集。

每个项指定允许相互交互的特征索引集。如果特征数量多于这些约束中指定的数量,则它们被视为指定为附加集。

字符串“pairwise”和“no_interactions”分别是仅允许成对交互和不允许交互的简写。

例如,总共有 5 个特征,interaction_cst=[{0, 1}] 等同于 interaction_cst=[{0, 1}, {2, 3, 4}],并指定树的每个分支要么只在特征 0 和 1 上分裂,要么只在特征 2、3 和 4 上分裂。

请参阅 此示例 了解如何使用 interaction_cst

1.2 版本新增。

warm_startbool, default=False

设置为 True 时,重用上一次调用 fit 的解决方案,并向集成添加更多估计器。为了使结果有效,估计器应仅在相同数据上重新训练。请参阅 词汇表

early_stopping‘auto’ or bool, default=’auto’

如果为 ‘auto’,当样本大小大于 10000 或者 X_valy_val 被传递给 fit 时,启用提前停止。如果为 True,则启用提前停止,否则禁用。

0.23 版本新增。

scoringstr or callable or None, default=’loss’

用于提前停止的评分方法。仅当启用 early_stopping 时使用。选项包括

  • str: 有关选项,请参阅 String name scorers

  • callable: 带有签名 scorer(estimator, X, y) 的可调用评分器对象(例如函数)。有关详细信息,请参阅 Callable scorers

  • None:使用 准确率 (accuracy)

  • ‘loss’:根据损失值检查提前停止。

validation_fractionint or float or None, default=0.1

用于提前停止的训练数据中作为验证数据的比例(或绝对大小)。如果为 None,则在训练数据上进行提前停止。如果未执行提前停止(例如 early_stopping=False),或者如果 X_valy_val 被传递给 fit,则忽略此值。

n_iter_no_changeint, default=10

用于确定何时“提前停止”。当最后 n_iter_no_change 个分数中没有一个比倒数第 n_iter_no_change - 1 个分数更好时(在一定的容差范围内),拟合过程停止。仅在执行提前停止时使用。

tolfloat, default=1e-7

比较分数时使用的绝对容差。容差越高,越有可能提前停止:较高的容差意味着后续迭代更难被认为是相对于参考分数的改进。

verboseint, default=0

详细程度级别。如果不为零,打印一些关于拟合过程的信息。1 打印摘要信息,2 打印每次迭代的信息。

random_stateint, RandomState instance or None, default=None

伪随机数生成器,用于控制分箱过程中的子采样,以及在启用提前停止时控制训练/验证数据分割。传递一个整数可在多次函数调用中获得可重现的输出。请参阅 词汇表

class_weightdict or ‘balanced’, default=None

与类别相关的权重,形式为 {class_label: weight}。如果未给出,则所有类别都被假定权重为一。“balanced”模式使用 y 的值根据输入数据中类别的频率自动调整权重,调整方式为 n_samples / (n_classes * np.bincount(y))。请注意,如果指定了 sample_weight(通过 fit 方法传递),这些权重将与 sample_weight 相乘。

1.2 版本新增。

属性:
classes_array, shape = (n_classes,)

类别标签。

do_early_stopping_bool

指示训练期间是否使用了提前停止。

n_iter_int

提升过程的迭代次数。

n_trees_per_iteration_int

每次迭代构建的树的数量。对于二元分类,此值为 1;对于多类分类,此值为 n_classes

train_score_ndarray, shape (n_iter_+1,)

训练数据上每次迭代的分数。第一个条目是第一次迭代之前集成的分数。分数根据 scoring 参数计算。如果 scoring 不是‘loss’,则分数在最多 10 000 个样本的子集上计算。如果未提前停止,则为空。

validation_score_ndarray, shape (n_iter_+1,)

保留的验证数据上每次迭代的分数。第一个条目是第一次迭代之前集成的分数。分数根据 scoring 参数计算。如果未提前停止或 validation_fraction 为 None,则为空。

is_categorical_ndarray, shape (n_features, ) or None

分类特征的布尔掩码。None 表示没有分类特征。

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

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

1.0 版本新增。

另请参阅

GradientBoostingClassifier

精确的梯度提升方法,对于具有大量样本的数据集,其扩展性不佳。

sklearn.tree.DecisionTreeClassifier

决策树分类器。

RandomForestClassifier

一个元估计器,它在数据集的各种子样本上拟合多个决策树分类器,并使用平均来提高预测准确性并控制过拟合。

AdaBoostClassifier

一个元估计器,它首先在原始数据集上拟合一个分类器,然后在同一数据集上拟合额外的分类器副本,其中错误分类实例的权重被调整,以便后续分类器更多地关注困难的案例。

示例

>>> from sklearn.ensemble import HistGradientBoostingClassifier
>>> from sklearn.datasets import load_iris
>>> X, y = load_iris(return_X_y=True)
>>> clf = HistGradientBoostingClassifier().fit(X, y)
>>> clf.score(X, y)
1.0
decision_function(X)[source]#

计算 X 的决策函数。

参数:
Xarray-like, shape (n_samples, n_features)

输入样本。

返回:
decisionndarray, shape (n_samples,) or (n_samples, n_trees_per_iteration)

每个样本的原始预测值(即树叶值的总和)。n_trees_per_iteration 等于多类分类中的类别数。

fit(X, y, sample_weight=None, *, X_val=None, y_val=None, sample_weight_val=None)[source]#

拟合梯度提升模型。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

输入样本。

yarray-like of shape (n_samples,)

目标值。

sample_weightarray-like of shape (n_samples,) default=None

训练数据的权重。

0.23 版本新增。

X_valarray-like of shape (n_val, n_features)

用于提前停止的验证特征的额外样本。在 Pipeline 中,可以使用 Pipeline(..., transform_input=["X_val"]) 以与 X 相同的方式转换 X_val

在版本 1.7 中新增。

y_valarray-like of shape (n_samples,)

用于提前停止的验证目标值的额外样本。

在版本 1.7 中新增。

sample_weight_valarray-like of shape (n_samples,) default=None

用于提前停止的验证的额外权重。

在版本 1.7 中新增。

返回:
selfobject

拟合的估计器。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查阅 用户指南,了解路由机制如何工作。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

predict(X)[source]#

预测 X 的类别。

参数:
Xarray-like, shape (n_samples, n_features)

输入样本。

返回:
yndarray, shape (n_samples,)

预测的类别。

predict_proba(X)[source]#

预测 X 的类别概率。

参数:
Xarray-like, shape (n_samples, n_features)

输入样本。

返回:
pndarray, shape (n_samples, n_classes)

输入样本的类别概率。

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(*, X_val: bool | None | str = '$UNCHANGED$', sample_weight: bool | None | str = '$UNCHANGED$', sample_weight_val: bool | None | str = '$UNCHANGED$', y_val: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier[source]#

配置是否应请求元数据以传递给 fit 方法。

请注意,此方法仅在以下情况下相关:此估计器用作 元估计器 中的子估计器,并且通过 enable_metadata_routing=True 启用了元数据路由(请参阅 sklearn.set_config)。请查看 用户指南 以了解路由机制的工作原理。

每个参数的选项如下:

  • True:请求元数据,如果提供则传递给 fit。如果未提供元数据,则忽略该请求。

  • False:不请求元数据,元估计器不会将其传递给 fit

  • None:不请求元数据,如果用户提供元数据,元估计器将引发错误。

  • str:应将元数据以给定别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

在版本 1.3 中新增。

参数:
X_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fitX_val 参数的元数据路由。

sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fit 方法中 sample_weight 参数的元数据路由。

sample_weight_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight_val 参数的元数据路由。

y_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

fity_val 参数的元数据路由。

返回:
selfobject

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') HistGradientBoostingClassifier[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

输入样本。

生成:
decisiongenerator of ndarray of shape (n_samples,) or (n_samples, n_trees_per_iteration)

输入样本的决策函数,对应于集成树预测的原始值。类别对应于属性 classes_ 中的类别。

staged_predict(X)[source]#

预测每次迭代的类别。

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

0.24 版本新增。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

输入样本。

生成:
ygenerator of ndarray of shape (n_samples,)

输入样本的预测类别,针对每次迭代。

staged_predict_proba(X)[source]#

预测每次迭代的类别概率。

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

参数:
Xshape 为 (n_samples, n_features) 的 array-like

输入样本。

生成:
ygenerator of ndarray of shape (n_samples,)

输入样本的预测类别概率,针对每次迭代。