SVC#

class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)[source]#

C-支持向量分类。

该实现基于libsvm。拟合时间至少与样本数量呈二次方关系,对于数万个样本以上的数据集可能不切实际。对于大型数据集,请考虑改用LinearSVCSGDClassifier,可能在经过Nystroem变换器或其他核近似之后。

多类别支持根据一对一(one-vs-one)方案处理。

有关所提供核函数的精确数学公式以及gammacoef0degree如何相互影响的详细信息,请参阅叙述性文档中的相应部分:核函数

要了解如何调整SVC的超参数,请参阅以下示例:嵌套式与非嵌套式交叉验证

更多内容请参见用户指南

参数:
C浮点型, 默认值=1.0

正则化参数。正则化的强度与C成反比。必须严格为正。惩罚项是l2范数的平方惩罚。有关缩放正则化参数C的影响的直观可视化,请参见SVC的正则化参数缩放

kernel{'linear', 'poly', 'rbf', 'sigmoid', 'precomputed'} 或 可调用对象, 默认值='rbf'

指定算法中使用的核类型。如果未给出,将使用'rbf'。如果给定一个可调用对象,则它用于从数据矩阵预计算核矩阵;该矩阵应为形状为(n_samples, n_samples)的数组。有关不同核类型的直观可视化,请参见使用不同SVM核绘制分类边界

degree整型, 默认值=3

多项式核函数('poly')的阶数。必须是非负的。被所有其他核忽略。

gamma{'scale', 'auto'} 或 浮点型, 默认值='scale'

'rbf'、'poly'和'sigmoid'的核系数。

  • 如果传递gamma='scale'(默认值),则使用1 / (n_features * X.var()) 作为gamma的值,

  • 如果为'auto',则使用1 / n_features

  • 如果为浮点型,则必须是非负的。

0.22 版本中修改: gamma的默认值从'auto'更改为'scale'。

coef0浮点型, 默认值=0.0

核函数中的独立项。它仅在'poly'和'sigmoid'中具有重要意义。

shrinking布尔型, 默认值=True

是否使用收缩启发式。请参见用户指南

probability布尔型, 默认值=False

是否启用概率估计。这必须在调用fit之前启用,因为它内部使用5折交叉验证,会减慢该方法的速度,并且predict_proba可能与predict不一致。更多信息请参见用户指南

tol浮点型, 默认值=1e-3

停止准则的容差。

cache_size浮点型, 默认值=200

指定核缓存的大小(以MB为单位)。

class_weight字典 或 'balanced', 默认值=None

对于SVC,将类别i的参数C设置为class_weight[i]*C。如果未给出,则所有类别都被假定为权重1。“balanced”模式使用y的值,自动调整权重,使其与输入数据中类别频率成反比,即n_samples / (n_classes * np.bincount(y))

verbose布尔型, 默认值=False

启用详细输出。请注意,此设置利用了libsvm中的每个进程运行时设置,如果启用,在多线程环境中可能无法正常工作。

max_iter整型, 默认值=-1

求解器内部迭代的硬性限制,-1表示无限制。

decision_function_shape{'ovo', 'ovr'}, 默认值='ovr'

是返回形状为(n_samples, n_classes)的一对多('ovr')决策函数(如所有其他分类器),还是返回libsvm原始的形状为(n_samples, n_classes * (n_classes - 1) / 2)的一对一('ovo')决策函数。然而,请注意,在内部,一对一('ovo')始终用作训练模型的多类别策略;ovr矩阵仅从ovo矩阵构建。对于二元分类,该参数将被忽略。

0.19 版本中修改: decision_function_shape 默认值为'ovr'。

0.17 版本新增: 建议使用decision_function_shape='ovr'

0.17 版本中修改: 已弃用decision_function_shape='ovo' 和 None

break_ties布尔型, 默认值=False

如果为True,decision_function_shape='ovr',且类别数 > 2,predict将根据decision_function的置信度值来打破平局;否则返回平局类别中的第一个类别。请注意,与简单的预测相比,打破平局的计算成本相对较高。有关其与decision_function_shape='ovr'一起使用的示例,请参见SVM平局处理示例

0.22 版本新增。

random_state整型, RandomState 实例 或 None, 默认值=None

控制用于概率估计的数据洗牌的伪随机数生成。当probability为False时忽略。传递一个整数可在多次函数调用中获得可重现的输出。参见术语表

属性:
class_weight_形状为 (n_classes,) 的 ndarray

每个类别的参数C的乘数。根据class_weight参数计算。

classes_形状为 (n_classes,) 的 ndarray

类别标签。

coef_形状为 (n_classes * (n_classes - 1) / 2, n_features) 的 ndarray

kernel="linear"时,分配给特征的权重。

dual_coef_形状为 (n_classes -1, n_SV) 的 ndarray

决策函数中支持向量的对偶系数(参见数学公式),乘以它们的目标值。对于多类别,所有一对一分类器的系数。多类别情况下系数的布局有些复杂。有关详细信息,请参见用户指南的多类别部分

fit_status_整型

如果正确拟合为0,否则为1(将引发警告)

intercept_形状为 (n_classes * (n_classes - 1) / 2,) 的 ndarray

决策函数中的常数。

n_features_in_整型

拟合期间看到的特征数量。

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当X的所有特征名称均为字符串时定义。

1.0 版本新增。

n_iter_形状为 (n_classes * (n_classes - 1) // 2,) 的 ndarray

优化例程为拟合模型运行的迭代次数。此属性的形状取决于优化的模型数量,而模型数量又取决于类别数量。

1.1 版本新增。

support_形状为 (n_SV) 的 ndarray

支持向量的索引。

support_vectors_形状为 (n_SV, n_features) 的 ndarray

支持向量。如果核是预计算的,则为空数组。

n_support_形状为 (n_classes,),数据类型为 int32 的 ndarray

每个类别的支持向量数量。

probA_形状为 (n_classes * (n_classes - 1) / 2) 的 ndarray

probability=True时,在Platt缩放中学习到的参数。

probB_形状为 (n_classes * (n_classes - 1) / 2) 的 ndarray

probability=True时,在Platt缩放中学习到的参数。

shape_fit_形状为 (n_dimensions_of_X,) 的整型元组

训练向量X的数组维度。

另请参见

SVR

使用 libsvm 实现的用于回归的支持向量机。

LinearSVC

使用 liblinear 实现的用于分类的可伸缩线性支持向量机。有关更多比较元素,请查看 LinearSVC 的“另请参阅”部分。

参考文献

示例

>>> import numpy as np
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> from sklearn.svm import SVC
>>> clf = make_pipeline(StandardScaler(), SVC(gamma='auto'))
>>> clf.fit(X, y)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('svc', SVC(gamma='auto'))])
>>> print(clf.predict([[-0.8, -1]]))
[1]

有关 SVC 与其他分类器的比较,请参见:绘制分类概率

decision_function(X)[源码]#

评估 X 中样本的决策函数。

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

输入样本。

返回:
X形状为 (n_samples, n_classes * (n_classes-1) / 2) 的 ndarray

返回模型中每个类的样本的决策函数。如果 decision_function_shape='ovr',则形状为 (n_samples, n_classes)。

注释

如果 decision_function_shape='ovo',则函数值与样本 X 到分离超平面的距离成比例。如果需要精确距离,请将函数值除以权重向量 (coef_) 的范数。有关更多详细信息,另请参阅此问题。如果 decision_function_shape='ovr',则决策函数是 ovo 决策函数的单调变换。

fit(X, y, sample_weight=None)[源码]#

根据给定的训练数据拟合 SVM 模型。

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

训练向量,其中 n_samples 是样本数量,n_features 是特征数量。对于 kernel=”precomputed”,X 的预期形状为 (n_samples, n_samples)。

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

目标值(分类中的类别标签,回归中的实数)。

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

每个样本的权重。按样本重新缩放 C。较高的权重会强制分类器更关注这些点。

返回:
self对象

已拟合的估计器。

注释

如果 X 和 y 不是 C 序且连续的 np.float64 数组,并且 X 不是 scipy.sparse.csr_matrix,则 X 和/或 y 可能会被复制。

如果 X 是密集数组,则其他方法将不支持稀疏矩阵作为输入。

get_metadata_routing()[源码]#

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

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

返回:
routingMetadataRequest

一个包含路由信息的MetadataRequest

get_params(deep=True)[源码]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回:
params字典

参数名称映射到其值。

predict(X)[源码]#

对 X 中的样本执行分类。

对于单类模型,返回 +1 或 -1。

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

对于 kernel=”precomputed”,X 的预期形状为 (n_samples_test, n_samples_train)。

返回:
y_pred形状为 (n_samples,) 的 ndarray

X 中样本的类别标签。

predict_log_proba(X)[源码]#

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

模型需要在训练时计算概率信息:使用属性 probability 设置为 True 进行拟合。

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

对于 kernel=”precomputed”,X 的预期形状为 (n_samples_test, n_samples_train)。

返回:
T形状为 (n_samples, n_classes) 的 ndarray

返回模型中每个类的样本的对数概率。列按排序顺序对应于属性 classes_ 中出现的类。

注释

概率模型是使用交叉验证创建的,因此结果可能与通过 predict 获得的结果略有不同。此外,它在非常小的数据集上会产生无意义的结果。

predict_proba(X)[源码]#

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

模型需要在训练时计算概率信息:使用属性 probability 设置为 True 进行拟合。

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

对于 kernel=”precomputed”,X 的预期形状为 (n_samples_test, n_samples_train)。

返回:
T形状为 (n_samples, n_classes) 的 ndarray

返回模型中每个类的样本概率。列按排序顺序对应于属性 classes_ 中出现的类。

注释

概率模型是使用交叉验证创建的,因此结果可能与通过 predict 获得的结果略有不同。此外,它在非常小的数据集上会产生无意义的结果。

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

返回给定数据和标签的准确率

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

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

测试样本。

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

X 的真实标签。

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

样本权重。

返回:
score浮点数

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

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SVC[源码]#

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

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

每个参数的选项为

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

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

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

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

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

在版本 1.3 中添加。

注意

如果此估计器用作元估计器的子估计器,例如在 Pipeline 中使用,则此方法才相关。否则,它没有效果。

参数:
sample_weight字符串、True、False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED

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

返回:
self对象

更新后的对象。

set_params(**params)[源码]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SVC[源码]#

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

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

每个参数的选项为

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

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

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

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

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

在版本 1.3 中添加。

注意

如果此估计器用作元估计器的子估计器,例如在 Pipeline 中使用,则此方法才相关。否则,它没有效果。

参数:
sample_weight字符串、True、False 或 None,默认为 sklearn.utils.metadata_routing.UNCHANGED

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

返回:
self对象

更新后的对象。