VotingClassifier#

class sklearn.ensemble.VotingClassifier(estimators, *, voting='hard', weights=None, n_jobs=None, flatten_transform=True, verbose=False)#

软投票/多数规则分类器,用于未拟合的估计器。

更多信息请参阅 用户指南

Added in version 0.17.

Parameters:
estimators由(str, estimator)元组组成的列表

调用 VotingClassifierfit 方法将拟合这些原始估计器的克隆版本, 这些克隆版本将存储在类属性 self.estimators_ 中。可以使用 set_params 将估计器设置为 'drop'

Changed in version 0.21: 'drop' 被接受。在 0.22 版本中弃用使用 None,并在 0.24 版本中移除支持。

voting{‘hard’, ‘soft’}, default=’hard’

如果为 ‘hard’,则使用预测的类别标签进行多数规则投票。 否则如果为 ‘soft’,则根据预测概率之和的 argmax 预测类别标签,这推荐用于一组校准良好的分类器。

weights形状为 (n_classifiers,) 的类数组,default=None

用于加权预测类别标签出现次数(’hard’ 投票)或加权类别概率后进行平均(’soft’ 投票)的权重序列( floatint )。如果为 None ,则使用均匀权重。

n_jobsint, default=None

用于 fit 的并行运行的作业数量。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。更多细节请参阅 Glossary

Added in version 0.18.

flatten_transformbool, default=True

仅在 voting=’soft’ 时影响 transform 输出的形状。 如果 voting=’soft’ 且 flatten_transform=True,transform 方法返回形状为 (n_samples, n_classifiers * n_classes) 的矩阵。如果 flatten_transform=False,则返回 (n_classifiers, n_samples, n_classes)。

verbosebool, default=False

如果为 True,则在拟合过程中打印所用的时间。

Added in version 0.23.

Attributes:
estimators_分类器列表

estimators 中定义的已拟合子估计器集合,不包括 ‘drop’。

named_estimators_Bunch

通过名称访问任何已拟合子估计器的属性。

Added in version 0.20.

le_LabelEncoder

在拟合期间用于编码标签并在预测期间解码的转换器。

classes_形状为 (n_classes,) 的 ndarray

类别标签。

n_features_in_int

特征数量在:term:fit 期间被看到。

feature_names_in_形状为 ( n_features_in_ ,) 的 ndarray

fit 期间看到的特征名称。仅在底层估计器在拟合时暴露此类属性时定义。

Added in version 1.0.

See also

VotingRegressor

预测投票回归器。

Examples

>>> import numpy as np
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.naive_bayes import GaussianNB
>>> from sklearn.ensemble import RandomForestClassifier, VotingClassifier
>>> clf1 = LogisticRegression(random_state=1)
>>> clf2 = RandomForestClassifier(n_estimators=50, random_state=1)
>>> clf3 = GaussianNB()
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> y = np.array([1, 1, 1, 2, 2, 2])
>>> eclf1 = VotingClassifier(estimators=[
...         ('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard')
>>> eclf1 = eclf1.fit(X, y)
>>> print(eclf1.predict(X))
[1 1 1 2 2 2]
>>> np.array_equal(eclf1.named_estimators_.lr.predict(X),
...                eclf1.named_estimators_['lr'].predict(X))
True
>>> eclf2 = VotingClassifier(estimators=[
...         ('lr', clf1), ('rf', clf2), ('gnb', clf3)],
...         voting='soft')
>>> eclf2 = eclf2.fit(X, y)
>>> print(eclf2.predict(X))
[1 1 1 2 2 2]

要删除一个估计器,可以使用 set_params 将其移除。这里我们删除一个估计器,结果只剩下 2 个已拟合的估计器:

>>> eclf2 = eclf2.set_params(lr='drop')
>>> eclf2 = eclf2.fit(X, y)
>>> len(eclf2.estimators_)
2

设置 flatten_transform=Truevoting='soft' 会扁平化 transform 的输出形状:

>>> eclf3 = VotingClassifier(estimators=[
...        ('lr', clf1), ('rf', clf2), ('gnb', clf3)],
...        voting='soft', weights=[2,1,1],
...        flatten_transform=True)
>>> eclf3 = eclf3.fit(X, y)
>>> print(eclf3.predict(X))
[1 1 1 2 2 2]
>>> print(eclf3.transform(X).shape)
(6, 6)
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,)

目标值。

sample_weightarray-like,形状为 (n_samples,),默认=None

样本权重。如果为 None,则样本等权重。 请注意,这仅在所有底层估计器都支持样本权重时才受支持。

Added in version 0.18.

**fit_paramsdict

传递给底层估计器的参数。

Added in version 1.5.

仅在 enable_metadata_routing=True 时可用, 可以通过使用 sklearn.set_config(enable_metadata_routing=True) 设置。 有关更多详细信息,请参阅 Metadata Routing User Guide

Returns:
selfobject

返回实例本身。

fit_transform(X, y=None, **fit_params)#

返回每个估计器的类别标签或概率。

返回每个估计器对X的预测。

Parameters:
X{array-like, sparse matrix, dataframe} of shape (n_samples, n_features)

输入样本。

yndarray of shape (n_samples,), default=None

目标值(无监督变换时为None)。

**fit_paramsdict

额外的拟合参数。

Returns:
X_newndarray array of shape (n_samples, n_features_new)

变换后的数组。

get_feature_names_out(input_features=None)#

获取变换后的输出特征名称。

Parameters:
input_features字符串数组或None,默认=None

未使用,此处仅为API一致性约定而存在。

Returns:
feature_names_out字符串对象的ndarray

变换后的特征名称。

get_metadata_routing()#

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

请查看 用户指南 以了解路由机制的工作原理。

Added in version 1.5.

Returns:
routingMetadataRouter

MetadataRouter 封装的 路由信息。

get_params(deep=True)#

获取集成估计器的参数。

返回在构造函数中给定的参数以及 estimators 参数中包含的估计器。

Parameters:
deepbool, default=True

设置为True时,获取各种估计器及其参数。

Returns:
paramsdict

参数和估计器名称映射到它们的值,或参数名称映射到它们的值。

property n_features_in_#

特征数量在:term:fit 期间被看到。

property named_estimators#

字典,用于按名称访问任何拟合的子估计器。

Returns:
Bunch
predict(X)#

预测X的类别标签。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。

Returns:
majarray-like,形状为 (n_samples,)

预测的类别标签。

predict_proba(X)#

计算样本X中可能结果的概率。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。

Returns:
avgarray-like,形状为 (n_samples, n_classes)

每个样本每类的加权平均概率。

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$') VotingClassifier#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • 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 in fit .

Returns:
selfobject

The updated object.

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_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$') VotingClassifier#

Request metadata passed to the score method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to score .

  • 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 in score .

Returns:
selfobject

The updated object.

transform(X)#

返回每个估计器的类标签或概率。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

训练向量,其中 n_samples 是样本数量, n_features 是特征数量。

Returns:
probabilities_or_labels
如果 voting='soft'flatten_transform=True

返回形状为 (n_samples, n_classifiers * n_classes) 的 ndarray, 为每个分类器计算的类概率。

如果 voting='soft'flatten_transform=False

形状为 (n_classifiers, n_samples, n_classes) 的 ndarray

如果 voting='hard'

形状为 (n_samples, n_classifiers) 的 ndarray,为每个分类器预测的类标签。