【scikit-learn】sklearn.svm.SVC 类:支持向量机分类器

sklearn.svm.SVC(支持向量机分类器)

SVC(Support Vector Classification)是 sklearn.svm 提供的 支持向量机(SVM)分类模型,适用于 二分类和多分类任务,尤其擅长 小规模数据、非线性分类问题


1. SVC 作用

  • 用于分类任务(如 垃圾邮件检测、文本分类、图像识别)。
  • 支持线性和非线性分类(核方法)
  • 适用于小数据集,高维数据(如文本分类)

2. SVC 代码示例

(1) 训练 SVM 分类器

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 训练 SVM 分类器
model = SVC(kernel="rbf", C=1.0, gamma="scale", probability=True)
model.fit(X_train, y_train)

# 计算准确率
accuracy = model.score(X_test, y_test)
print("SVM 分类器准确率:", accuracy)

解释

  • kernel="rbf":默认使用 径向基函数(RBF)核,适用于非线性数据。
  • C=1.0:正则化参数,值越小,允许误分类点越多(避免过拟合)。
  • gamma="scale":核函数参数,值越大,影响越局部。
  • probability=True:是否计算类别概率(计算代价较高)。

3. SVC 主要参数

SVC(kernel="rbf", C=1.0, gamma="scale", degree=3, probability=False, random_state=None)
参数说明
kernel核函数类型"linear""poly""rbf""sigmoid"
C正则化参数(默认 1.0,值大则更关注正确分类,容易过拟合)
gamma核函数参数(默认 "scale",值越大影响越局部)
degree多项式核的阶数(仅在 kernel="poly" 时有效)
probability是否计算类别概率(默认 False,计算代价较高)

4. SVM 线性分类 (kernel="linear")

model_linear = SVC(kernel="linear", C=1.0)
model_linear.fit(X_train, y_train)

accuracy_linear = model_linear.score(X_test, y_test)
print("线性 SVM 分类器准确率:", accuracy_linear)

解释

  • kernel="linear":适用于线性可分数据(如文本分类)。
  • LinearSVC 慢,但支持 probability=True

5. 获取支持向量

support_vectors = model.support_vectors_
print("支持向量个数:", len(support_vectors))

解释

  • 支持向量是 SVM 关键点,决定分类超平面

6. 计算分类性能

from sklearn.metrics import classification_report

y_pred = model.predict(X_test)
print("分类报告:\n", classification_report(y_test, y_pred))

解释

  • 计算精确率、召回率和 F1 分数,评估模型表现。

7. SVC vs. LinearSVC

模型适用情况主要区别
SVC(kernel="linear")线性分类支持 probability=True,计算慢
LinearSVC线性分类计算更快,但不支持 probability=True

示例

from sklearn.svm import LinearSVC

linear_svc = LinearSVC(C=1.0, max_iter=1000)
linear_svc.fit(X_train, y_train)

print("SVC (线性) 分类准确率:", model_linear.score(X_test, y_test))
print("LinearSVC 分类准确率:", linear_svc.score(X_test, y_test))

解释

  • LinearSVC 适用于大规模数据,计算速度更快

8. C 对模型的影响

C_values = [0.1, 1, 10]
for C in C_values:
    model = SVC(kernel="rbf", C=C)
    model.fit(X_train, y_train)
    print(f"C={C}, 测试集准确率={model.score(X_test, y_test)}")

解释

  • C 小(如 0.1)时,允许误分类,泛化能力强
  • C 大(如 10)时,过拟合风险较高

9. gamma 对模型的影响

gamma_values = ["scale", "auto", 0.1, 1]
for gamma in gamma_values:
    model = SVC(kernel="rbf", gamma=gamma)
    model.fit(X_train, y_train)
    print(f"gamma={gamma}, 测试集准确率={model.score(X_test, y_test)}")

解释

  • gamma 大(如 1)时,影响范围小,模型复杂度高,容易过拟合
  • gamma 小(如 0.1)时,影响范围大,模型简单,可能欠拟合

10. 适用场景

  • 分类任务(如 垃圾邮件检测、文本分类、图像分类)。
  • 适用于小数据集,高维数据(如文本分类)
  • LogisticRegressionRandomForestClassifier 不足时,SVM 可能更优

11. 结论

  • SVC 适用于分类任务,支持核方法进行线性和非线性分类,适用于小规模数据,比 RandomForestClassifier 更适合高维小数据,可以 调整 Cgamma 控制模型复杂度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值