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. 适用场景
- 分类任务(如 垃圾邮件检测、文本分类、图像分类)。
- 适用于小数据集,高维数据(如文本分类)。
- 当
LogisticRegression
或RandomForestClassifier
不足时,SVM 可能更优。
11. 结论
SVC
适用于分类任务,支持核方法进行线性和非线性分类,适用于小规模数据,比RandomForestClassifier
更适合高维小数据,可以 调整C
和gamma
控制模型复杂度。