一对一分类器#

class sklearn.multiclass.OneVsOneClassifier(estimator, *, n_jobs=None)[source]#

一对一多类别策略。

此策略包括为每个类别对拟合一个分类器。在预测时,选择获得最多投票的类别。由于它需要拟合 n_classes * (n_classes - 1) / 2 个分类器,因此此方法通常比一对多方法慢,因为它具有 O(n_classes^2) 的复杂度。但是,对于诸如内核算法之类的在 n_samples 上扩展性不佳的算法,此方法可能更有优势。这是因为每个单独的学习问题只涉及数据的一个小子集,而对于一对多方法,则需要 n_classes 次使用完整数据集。

更多信息请参见用户指南

参数:
estimator估计器对象

实现fit的回归器或分类器。当传递分类器时,将优先使用decision_function,如果不可用,则回退到predict_proba。当传递回归器时,将使用predict

n_jobsint,默认为None

用于计算的作业数:n_classes * ( n_classes - 1) / 2个OVO问题并行计算。

None表示1,除非在joblib.parallel_backend上下文环境中。-1表示使用所有处理器。更多详情请参见词汇表

属性:
estimators_包含n_classes * (n_classes - 1) / 2个估计器的列表

用于预测的估计器。

classes_形状为[n_classes]的numpy数组

包含标签的数组。

n_classes_int

类别数量。

pairwise_indices_列表,长度=len(estimators_),或None

训练估计器时使用的样本索引。estimatorpairwise标签为False时为None

n_features_in_int

fit期间看到的特征数量。

0.24版本新增。

feature_names_in_形状为(n_features_in_,)的ndarray

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

1.0版本新增。

另请参见

一对多分类器

一对多多类别策略。

输出编码分类器

(纠错)输出码多类别策略。

示例

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.multiclass import OneVsOneClassifier
>>> from sklearn.svm import LinearSVC
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, test_size=0.33, shuffle=True, random_state=0)
>>> clf = OneVsOneClassifier(
...     LinearSVC(random_state=0)).fit(X_train, y_train)
>>> clf.predict(X_test[:10])
array([2, 1, 0, 2, 0, 2, 0, 1, 1, 1])
decision_function(X)[source]#

OneVsOneClassifier的决策函数。

样本的决策值是通过将成对分类置信度水平的归一化和添加到投票中计算出来的,以便在所有类别的投票相等导致平局时消除决策值之间的歧义。

参数:
X形状为(n_samples, n_features)的类数组

输入数据。

返回:
Y形状为(n_samples, n_classes)或(n_samples,)的类数组

在最终估计器上调用decision_function的结果。

0.19版本变更: 输出形状更改为(n_samples,),以符合scikit-learn对二元分类的约定。

fit(X, y, **fit_params)[source]#

拟合底层估计器。

参数:
X形状为(n_samples, n_features)的{类数组,稀疏矩阵}

数据。

y形状为(n_samples,)的类数组

多类别目标。

**fit_paramsdict

传递给每个子估计器的estimator.fit方法的参数。

1.4版本新增: 仅当enable_metadata_routing=True时可用。更多详情请参见元数据路由用户指南

返回:
self对象

已拟合的底层估计器。

get_metadata_routing()[source]#

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

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

1.4版本新增。

返回:
routingMetadataRouter

封装路由信息的MetadataRouter

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool,默认为True

如果为True,则返回此估计器及其包含的子对象(也是估计器)的参数。

返回:
paramsdict

参数名称与其值的映射。

property n_classes_#

类别数量。

partial_fit(X, y, classes=None, **partial_fit_params)[source]#

部分拟合底层估计器。

当内存不足以训练所有数据时,应使用此方法。数据块可以在多次迭代中传入,第一次调用应包含所有目标变量的数组。

参数:
X形状为 (n_samples, n_features) 的 {数组、稀疏矩阵}

数据。

y形状为(n_samples,)的类数组

多类别目标。

classes数组,形状为 (n_classes, )

对所有 `partial_fit` 调用有效的类别。可以通过 np.unique(y_all) 获得,其中 `y_all` 是整个数据集的目标向量。此参数仅在第一次调用 `partial_fit` 时需要,后续调用可以省略。

**partial_fit_paramsdict

传递给每个子估计器的 estimator.partial_fit 方法的参数。

1.4版本新增: 仅当enable_metadata_routing=True时可用。更多详情请参见元数据路由用户指南

返回:
self对象

部分拟合的底层估计器。

predict(X)[source]#

估计X中每个样本的最佳类别标签。

这被实现为 argmax(decision_function(X), axis=1),它将返回由估计器预测每个可能的类别对结果的类别标签(得票最多的类别)。

参数:
X形状为(n_samples, n_features)的{类数组,稀疏矩阵}

数据。

返回:
y形状为 [n_samples] 的 numpy 数组

预测的多类别目标。

score(X, y, sample_weight=None)[source]#

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

在多标签分类中,这是子集准确率,这是一个严格的指标,因为它要求每个样本的每个标签集都被正确预测。

参数:
X形状为(n_samples, n_features)的类数组

测试样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组

X 的真实标签。

sample_weight形状为 (n_samples,) 的类数组,默认为 None

样本权重。

返回:
scorefloat

self.predict(X) 相对于 y 的平均准确率。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
self估计器实例

估计器实例。

set_partial_fit_request(*, classes: bool | None | str = '$UNCHANGED$') OneVsOneClassifier[source]#

请求传递给 partial_fit 方法的元数据。

请注意,只有在 enable_metadata_routing=True 时,此方法才相关(参见 sklearn.set_config)。请参见 用户指南,了解路由机制的工作原理。

每个参数的选项为:

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

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

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

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

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

版本 1.3 中添加。

注意

此方法仅当此估计器用作元估计器的子估计器时才相关,例如,在Pipeline中使用。否则,它无效。

参数:
classesstr、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

partial_fitclasses参数的元数据路由。

返回:
self对象

更新后的对象。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') OneVsOneClassifier[source]#

请求传递给score方法的元数据。

请注意,只有在 enable_metadata_routing=True 时,此方法才相关(参见 sklearn.set_config)。请参见 用户指南,了解路由机制的工作原理。

每个参数的选项为:

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

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

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

  • str:元数据应使用此给定的别名而不是原始名称传递给元估计器。

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

版本 1.3 中添加。

注意

此方法仅当此估计器用作元估计器的子估计器时才相关,例如,在Pipeline中使用。否则,它无效。

参数:
sample_weightstr、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

scoresample_weight参数的元数据路由。

返回:
self对象

更新后的对象。