sklearn.svm.LinearSVC
(线性支持向量机分类器)
LinearSVC
是 sklearn.svm
提供的 线性支持向量机(Linear SVM)分类模型,它适用于 高维数据(如文本分类),比 SVC(kernel="linear")
计算速度更快,但不支持 核方法。
1. LinearSVC
vs. SVC(kernel="linear")
模型 | 适用情况 | 主要区别 |
---|---|---|
LinearSVC | 线性分类,大规模数据 | 计算速度快,不支持 probability=True |
SVC(kernel="linear") | 线性分类,小规模数据 | 支持 probability=True ,计算较慢 |
2. LinearSVC
代码示例
(1) 训练 LinearSVC
分类器
from sklearn.svm import LinearSVC
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 = LinearSVC(C=1.0, max_iter=1000, dual=False)
model.fit(X_train, y_train)
# 计算准确率
accuracy = model.score(X_test, y_test)
print("LinearSVC 分类器准确率:", accuracy)
解释
C=1.0
:正则化参数,值越小,模型越平滑,防止过拟合。max_iter=1000
:最大迭代次数,防止收敛失败。dual=False
:当n_samples > n_features
时,推荐设置为False
以提高效率。
3. LinearSVC
主要参数
LinearSVC(C=1.0, penalty="l2", loss="squared_hinge", dual=True, max_iter=1000, random_state=None)
参数 | 说明 |
---|---|
C | 正则化参数(默认 1.0 ,值大则分类更严格) |
penalty | 正则化类型(默认 "l2" ,也支持 "l1" ) |
loss | 损失函数(默认 "squared_hinge" ,也支持 "hinge" ) |
dual | 是否使用对偶优化(默认 True ,若 n_samples > n_features ,建议 False ) |
max_iter | 最大迭代次数(默认 1000 ,用于防止训练失败) |
4. C
对分类效果的影响
C_values = [0.1, 1, 10]
for C in C_values:
model = LinearSVC(C=C, max_iter=1000, dual=False)
model.fit(X_train, y_train)
print(f"C={C}, 测试集准确率={model.score(X_test, y_test)}")
解释
C
小(如0.1
)时,正则化较强,泛化能力强,可能欠拟合。C
大(如10
)时,分类边界更严格,可能过拟合。
5. 获取分类权重
print("特征权重:", model.coef_)
print("偏置:", model.intercept_)
解释
coef_
:分类超平面的权重(每个特征的影响)。intercept_
:超平面的偏置。
6. 计算分类性能
from sklearn.metrics import classification_report
y_pred = model.predict(X_test)
print("分类报告:\n", classification_report(y_test, y_pred))
解释
- 计算精确率、召回率和 F1 分数,评估模型表现。
7. LinearSVC
vs. LogisticRegression
模型 | 适用情况 | 主要区别 |
---|---|---|
LinearSVC | 线性分类 | 使用 SVM 方法优化,默认 L2 正则 |
LogisticRegression | 线性分类 | 使用逻辑回归优化,支持概率预测 |
示例
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(C=1.0, max_iter=1000)
log_reg.fit(X_train, y_train)
print("LinearSVC 分类准确率:", model.score(X_test, y_test))
print("LogisticRegression 分类准确率:", log_reg.score(X_test, y_test))
解释
LogisticRegression
适用于需要predict_proba()
计算概率的任务。
8. 适用场景
- 分类任务(如 垃圾邮件检测、文本分类)。
- 适用于大规模高维数据(如文本分类)。
- 当
SVC(kernel="linear")
计算过慢时,LinearSVC
是更好的选择。
9. 结论
LinearSVC
适用于线性分类任务,计算速度比SVC(kernel="linear")
更快,适合高维数据(如文本分类),可以 调整C
控制模型复杂度。