StackingClassifier#
- class sklearn.ensemble.StackingClassifier(estimators, final_estimator=None, *, cv=None, stack_method='auto', n_jobs=None, passthrough=False, verbose=0)#
堆叠估计器与最终分类器。
堆叠泛化包括将单个估计器的输出堆叠起来,并使用一个分类器来计算最终预测。堆叠允许通过使用其输出作为最终估计器的输入来利用每个单个估计器的优势。
请注意,
estimators_
是在完整的X
上拟合的,而final_estimator_
是使用基估计器的交叉验证预测进行训练的,使用cross_val_predict
。更多信息请参阅 用户指南 。
Added in version 0.22.
- Parameters:
- estimatorslist of (str, estimator)
将堆叠在一起的基础估计器。列表中的每个元素定义为一个字符串(即名称)和估计器实例的元组。可以使用
set_params
将估计器设置为 ‘drop’。估计器的类型通常预期为分类器。然而,对于某些用例(例如序数回归),可以传递回归器。
- final_estimatorestimator, default=None
将用于组合基础估计器的分类器。默认分类器是
LogisticRegression
。- cvint, cross-validation generator, iterable, or “prefit”, default=None
确定在
cross_val_predict
中使用的交叉验证分割策略,以训练final_estimator
。cv 的可能输入为:None,使用默认的 5 折交叉验证,
整数,指定 (Stratified) KFold 中的折数,
用作交叉验证生成器的对象,
产生训练、测试分割的可迭代对象,
"prefit"
表示假设estimators
已预拟合。在这种情况下,估计器将不会重新拟合。
对于整数/None 输入,如果估计器是分类器且 y 是二元或多类,则使用
StratifiedKFold
。在所有其他情况下,使用KFold
。这些分割器以shuffle=False
实例化,因此分割在多次调用中将相同。请参阅 用户指南 以了解可以在此处使用的各种交叉验证策略。
如果传递 “prefit”,则假设所有
estimators
已经拟合。final_estimator_
在完整训练集上的estimators
预测上进行训练,并且不是交叉验证预测。请注意,如果模型已经在相同的数据上训练以训练堆叠模型,则存在非常高的过拟合风险。Added in version 1.1: ‘prefit’ 选项在 1.1 中添加
Note
如果训练样本数量足够大,增加分割数量将不会带来好处。实际上,训练时间会增加。
cv
不用于模型评估,而是用于预测。- stack_method{‘auto’, ‘predict_proba’, ‘decision_function’, ‘predict’}, default=’auto’
每个基础估计器调用的方法。可以是:
如果 ‘auto’,将按顺序尝试为每个估计器调用
'predict_proba'
、'decision_function'
或'predict'
。否则,可以是
'predict_proba'
、'decision_function'
或'predict'
。如果估计器未实现该方法,将引发错误。
- n_jobsint, default=None
并行运行所有`estimators``fit
的作业数量。
None表示 1,除非在
joblib.parallel_backend `上下文中。-1 表示使用所有处理器。详见术语表。- passthroughbool, default=False
当 False 时,仅使用估计器的预测作为` final_estimator
的训练数据。当 True 时,
final_estimator `在预测以及原始训练数据上进行训练。- verboseint, default=0
详细级别。
- Attributes:
- classes_ndarray of shape (n_classes,) or list of ndarray if` y
is of type
“multilabel-indicator” `. 类标签。
- estimators_list of estimators
` estimators
参数的元素,已在训练数据上拟合。如果估计器已设置为
‘drop’,则不会出现在
estimators_中。当
cv=”prefit”时,
estimators_设置为
estimators `并且不会重新拟合。- named_estimators_:class:` ~sklearn.utils.Bunch `
属性,用于按名称访问任何拟合的子估计器。
n_features_in_
int特征数量在:term:
fit
期间被看到。- feature_names_in_ndarray of shape (` n_features_in_ `,)
在 :term:` fit `期间看到的特征名称。仅当基础估计器在拟合时暴露此类属性时定义。
Added in version 1.0.
- final_estimator_estimator
预测` estimators_ `输出的分类器。
- stack_method_list of str
每个基础估计器使用的方法。
- classes_ndarray of shape (n_classes,) or list of ndarray if` y
See also
StackingRegressor
带有最终回归器的堆叠估计器。
Notes
当每个估计器使用` predict_proba
时(即大多数情况下
stack_method=’auto’或具体为
stack_method=’predict_proba’ `),在二元分类问题的情况下,每个估计器预测的第一列将被丢弃。确实,这两个特征将完全共线。在某些情况下(例如序数回归),可以将回归器作为 :class:` StackingClassifier `的第一层传递。然而,请注意,y 将在内部按数字递增顺序或字典顺序编码。如果此顺序不合适,应手动按所需顺序对类别进行数字编码。
References
[1]Wolpert, David H. “Stacked generalization.” Neural networks 5.2 (1992): 241-259.
Examples
>>> from sklearn.datasets import load_iris >>> from sklearn.ensemble import RandomForestClassifier >>> from sklearn.svm import LinearSVC >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.preprocessing import StandardScaler >>> from sklearn.pipeline import make_pipeline >>> from sklearn.ensemble import StackingClassifier >>> X, y = load_iris(return_X_y=True) >>> estimators = [ ... ('rf', RandomForestClassifier(n_estimators=10, random_state=42)), ... ('svr', make_pipeline(StandardScaler(), ... LinearSVC(random_state=42))) ... ] >>> clf = StackingClassifier( ... estimators=estimators, final_estimator=LogisticRegression() ... ) >>> from sklearn.model_selection import train_test_split >>> X_train, X_test, y_train, y_test = train_test_split( ... X, y, stratify=y, random_state=42 ... ) >>> clf.fit(X_train, y_train).score(X_test, y_test) 0.9...
- decision_function(X)#
决策函数用于
X
中的样本,使用最终估计器。- Parameters:
- X{array-like, sparse matrix} of shape (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。
- Returns:
- decisionsndarray of shape (n_samples,), (n_samples, n_classes), or (n_samples, n_classes * (n_classes-1) / 2)
决策函数计算最终估计器。
- fit(X, y, *, sample_weight=None, **fit_params)#
拟合估计器。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练向量,其中` n_samples
是样本数量,
n_features `是特征数量。- yarray-like,形状为 (n_samples,)
目标值。注意` y
将在内部按数字递增顺序或字典顺序编码。如果顺序 重要(例如用于序数回归),应在调用 :term:
fit之前对目标
y `进行数字编码。- sample_weightarray-like,形状为 (n_samples,),默认=None
样本权重。如果为 None,则样本等权重。 注意,这仅在所有底层估计器都支持样本权重时才受支持。
- **fit_paramsdict
传递给底层估计器的参数。
Added in version 1.6: 仅在` enable_metadata_routing=True`时可用,可以通过使用
sklearn.set_config(enable_metadata_routing=True)
设置。 有关更多详细信息,请参阅 Metadata Routing 用户指南 。
- Returns:
- selfobject
返回已拟合的估计器实例。
- fit_transform(X, y=None, **fit_params)#
拟合数据,然后进行转换。
将转换器拟合到
X
和y
,并带有可选参数fit_params
, 并返回X
的转换版本。- Parameters:
- X形状为 (n_samples, n_features) 的类数组
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组, 默认=None
目标值(无监督转换为 None)。
- **fit_paramsdict
其他拟合参数。
- Returns:
- X_new形状为 (n_samples, n_features_new) 的 ndarray 数组
转换后的数组。
- get_feature_names_out(input_features=None)#
获取变换后的输出特征名称。
- Parameters:
- input_features字符串数组或None,默认=None
输入特征。只有在
passthrough
为True
时,才使用输入特征名称。如果
input_features
为None
,则使用feature_names_in_
作为输入特征名称。如果feature_names_in_
未定义,则生成名称:[x0, x1, ..., x(n_features_in_ - 1)]
。如果
input_features
是数组类型,则input_features
必须与feature_names_in_
匹配(如果feature_names_in_
已定义)。
如果
passthrough
为False
,则仅使用estimators
的名称来生成输出特征名称。
- Returns:
- feature_names_out字符串对象的ndarray
变换后的特征名称。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
Added in version 1.6.
- Returns:
- routingMetadataRouter
MetadataRouter
封装的 路由信息。
- get_params(deep=True)#
获取集成估计器的参数。
返回在构造函数中给定的参数以及
estimators
参数中包含的估计器。- Parameters:
- deepbool, default=True
设置为True时,获取各种估计器及其参数。
- Returns:
- paramsdict
参数和估计器名称映射到它们的值,或参数名称映射到它们的值。
- property n_features_in_#
特征数量在:term:
fit
期间被看到。
- predict(X, **predict_params)#
预测X的目标。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。- **predict_paramsdict of str -> obj
传递给
final_estimator
的predict
方法的参数。注意,这可能用于从某些估计器返回不确定性,使用return_std
或return_cov
。请注意,它只会考虑最终估计器的不确定性。如果
enable_metadata_routing=False
(默认): 参数直接传递给final_estimator
的predict
方法。如果
enable_metadata_routing=True
:参数安全地路由到final_estimator
的predict
方法。有关更多详细信息,请参阅 Metadata Routing User Guide 。
Changed in version 1.6:
**predict_params
可以通过元数据路由 API 进行路由。
- Returns:
- y_predndarray,形状为 (n_samples,) 或 (n_samples, n_output)
预测的目标。
- predict_proba(X)#
预测使用最终估计器的
X
的类别概率。- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。
- Returns:
- probabilitiesndarray,形状为 (n_samples, n_classes) 或 list of ndarray,形状为 (n_output,)
输入样本的类别概率。
- score(X, y, sample_weight=None)#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为你要求每个样本的每个标签集都被正确预测。
- Parameters:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组
` X`的真实标签。
- sample_weight形状为 (n_samples,) 的类数组,默认=None
样本权重。
- Returns:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StackingClassifier #
Request metadata passed to the
fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed tofit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it tofit
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weight
parameter infit
.
- Returns:
- selfobject
The updated object.
- set_output(*, transform=None)#
设置输出容器。
请参阅 介绍 set_output API 以了解如何使用API的示例。
- Parameters:
- transform{“default”, “pandas”, “polars”}, 默认=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
Added in version 1.4:
"polars"
选项已添加。
- Returns:
- self估计器实例
估计器实例。
- set_params(**params)#
设置集成估计器的参数。
有效的参数键可以通过
get_params()
列出。请注意,您可以直接设置estimators
中包含的估计器的参数。- Parameters:
- **params关键字参数
使用例如
set_params(parameter_name=new_value)
设置特定参数。此外,除了设置估计器的参数外,还可以设置或通过将它们设置为 ‘drop’ 来移除估计器中的单个估计器。
- Returns:
- self对象
估计器实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StackingClassifier #
Request metadata passed to the
score
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed toscore
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it toscore
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weight
parameter inscore
.
- Returns:
- selfobject
The updated object.
- transform(X)#
返回每个估计器的类标签或X的概率。
- Parameters:
- X{array-like, sparse matrix},形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。
- Returns:
- y_preds形状为 (n_samples, n_estimators) 或 (n_samples, n_classes * n_estimators) 的 ndarray
每个估计器的预测输出。