支持向量分类器 (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。拟合时间至少与样本数量呈二次方增长,对于超过数万个样本的数据集可能不切实际。对于大型数据集,请考虑改用
LinearSVC
或SGDClassifier
,可能需要先进行Nystroem
转换或其他核近似。多类别支持是根据一对一方案处理的。
有关提供的核函数的精确数学公式以及
gamma
、coef0
和degree
如何相互影响的详细信息,请参阅叙述性文档中的相应部分:核函数。要了解如何调整SVC的超参数,请参阅以下示例:嵌套交叉验证与非嵌套交叉验证
在用户指南中了解更多信息。
- 参数:
- Cfloat, default=1.0
正则化参数。正则化的强度与C成反比。必须严格为正。惩罚项是平方l2惩罚。有关缩放正则化参数C的影响的直观可视化,请参阅缩放SVC的正则化参数。
- kernel{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’} or callable, default=’rbf’
指定算法中使用的核类型。如果没有给出,则将使用“rbf”。如果给定一个可调用对象,则它用于根据数据矩阵预计算核矩阵;该矩阵应该是形状为
(n_samples, n_samples)
的数组。有关不同核类型的直观可视化,请参阅使用不同的SVM核绘制分类边界。- degreeint, default=3
多项式核函数('poly')的阶数。必须是非负数。所有其他内核都忽略它。
- gamma{‘scale’, ‘auto’} or float, default=’scale’
“rbf”、“poly”和“sigmoid”的核系数。
如果传递
gamma='scale'
(默认值),则它使用1 / (n_features * X.var())作为gamma的值,如果为“auto”,则使用1 / n_features
如果为浮点数,则必须是非负数。
在0.22版本中更改:
gamma
的默认值已从“auto”更改为“scale”。- coef0float, default=0.0
核函数中的独立项。它只在“poly”和“sigmoid”中很重要。
- shrinkingbool, default=True
是否使用收缩启发式。参见用户指南。
- probabilitybool, default=False
是否启用概率估计。必须在调用
fit
之前启用此选项,因为它在内部使用5倍交叉验证,这会减慢该方法的速度,并且predict_proba
可能与predict
不一致。在用户指南中了解更多信息。- tolfloat, default=1e-3
停止准则的容差。
- cache_sizefloat, default=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 的原始一对一 ('ovo') 决策函数,其形状为 (n_samples, n_classes * (n_classes - 1) / 2)。但是,请注意,在内部,一对一 ('ovo') 始终用作训练模型的多类别策略;ovr 矩阵仅由 ovo 矩阵构建。对于二元分类,忽略此参数。
0.19 版本中的变更: decision_function_shape 默认值为 'ovr'。
0.17 版本中新增: decision_function_shape='ovr' 建议使用。
0.17 版本中的变更: 已弃用 decision_function_shape='ovo' and None。
- break_ties布尔值,默认=False
如果为真,
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_整数
在 fit 期间看到的特征数量。
0.24 版本中新增。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在 fit 期间看到的特征名称。仅当
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,),dtype=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 与其他分类器的比较,请参见: 分类概率图。
- property coef_#
当
kernel="linear"
时分配给特征的权重。- 返回值:
- 形状为 (n_features, n_classes) 的 ndarray
- decision_function(X)[source]#
评估 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)[source]#
根据给定的训练数据拟合 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()[source]#
获取此对象的元数据路由。
请查看 用户指南,了解路由机制的工作原理。
- 返回值:
- routingMetadataRequest
一个
MetadataRequest
封装了路由信息。
- get_params(deep=True)[source]#
获取此估计器的参数。
- 参数:
- deep布尔值,默认为 True
如果为 True,则将返回此估计器和包含的作为估计器的子对象的参数。
- 返回值:
- params字典
参数名称与其值的映射。
- property n_support_#
每个类别的支持向量数量。
- predict(X)[source]#
对 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)[source]#
计算 X 中样本可能结果的对数概率。
模型需要在训练时计算概率信息:使用设置为 True 的属性
probability
进行拟合。- 参数:
- 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)[source]#
计算 X 中样本可能结果的概率。
模型需要在训练时计算概率信息:使用设置为 True 的属性
probability
进行拟合。- 参数:
- X形状为 (n_samples, n_features) 的类数组
对于 kernel=”precomputed”,X 的预期形状为 (n_samples_test, n_samples_train)。
- 返回值:
- T形状为 (n_samples, n_classes) 的ndarray
返回模型中每个类别的样本概率。列对应于已排序的类,其出现在属性 classes_ 中。
注释
概率模型是使用交叉验证创建的,因此结果可能与使用 predict 获得的结果略有不同。此外,它将在非常小的数据集上产生毫无意义的结果。
- property probA_#
当
probability=True
时在 Platt 缩放中学习的参数。- 返回值:
- 形状为 (n_classes * (n_classes - 1) / 2) 的ndarray
- property probB_#
当
probability=True
时在 Platt 缩放中学习的参数。- 返回值:
- 形状为 (n_classes * (n_classes - 1) / 2) 的ndarray
- score(X, y, sample_weight=None)[source]#
返回给定测试数据和标签的平均准确率。
在多标签分类中,这是子集准确率,这是一个严格的指标,因为它要求对每个样本,每个标签集都必须被正确预测。
- 参数:
- X形状为 (n_samples, n_features) 的类数组
测试样本。
- yarray-like of shape (n_samples,) or (n_samples, n_outputs)
X
的真实标签。- sample_weight形状为 (n_samples,) 的类数组,默认为 None
样本权重。
- 返回值:
- scorefloat
self.predict(X)
相对于y
的平均准确率。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SVC [source]#
请求传递给
fit
方法的元数据。请注意,只有当
enable_metadata_routing=True
时,此方法才相关(参见sklearn.set_config
)。请参阅 用户指南,了解路由机制的工作原理。每个参数的选项为
True
:请求元数据,如果提供则传递给fit
。如果未提供元数据,则忽略请求。False
:不请求元数据,元估计器不会将其传递给fit
。None
:不请求元数据,如果用户提供元数据,元估计器将引发错误。str
:元数据应使用此给定的别名而不是原始名称传递给元估计器。
默认值(
sklearn.utils.metadata_routing.UNCHANGED
)保留现有的请求。这允许您更改某些参数的请求,而无需更改其他参数。版本 1.3 中新增。
注意
仅当将此估计器用作元估计器的子估计器时(例如,在
Pipeline
中使用)时,此方法才相关。否则,它无效。- 参数:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_weight
参数的元数据路由。
- 返回值:
- self对象
已更新的对象。
- set_params(**params)[source]#
设置此估计器的参数。
此方法适用于简单的估计器以及嵌套对象(例如
Pipeline
)。后者具有<component>__<parameter>
形式的参数,因此可以更新嵌套对象的每个组件。- 参数:
- **paramsdict
估计器参数。
- 返回值:
- selfestimator instance
估计器实例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') SVC [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, or None, default=sklearn.utils.metadata_routing.UNCHANGED
score
中sample_weight
参数的元数据路由。
- 返回值:
- self对象
已更新的对象。