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_val和y_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_val和y_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
fit中X_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
fit中sample_weight_val参数的元数据路由。- y_valstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit中y_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_ 中的类别。