支持向量机(SVM)从入门到实战:原理详解与Python代码实现

1次阅读
没有评论

共计 1019 个字符,预计需要花费 3 分钟才能阅读完成。

image.webp

实际应用场景

支持向量机(SVM, Support Vector Machine)在现实中有广泛应用,比如:

支持向量机 (SVM) 从入门到实战:原理详解与 Python 代码实现

  • 手写数字识别:美国邮政系统用 SVM 分类邮政编码,准确率超过 98%
  • 医学诊断:通过患者特征(如肿瘤尺寸、细胞形态)判断良性 / 恶性肿瘤

核心原理

1. 最大间隔超平面

SVM 的核心是找到一个最优超平面 $w^Tx + b = 0$,使两类样本间隔最大化。数学推导如下:

  1. 间隔距离公式:$\gamma = \frac{2}{||w||}$
  2. 转化为优化问题:
    $$\min_{w,b} \frac{1}{2}||w||^2$$
    $$s.t.\ y_i(w^Tx_i + b) \geq 1,\ \forall i$$

2. 软间隔与硬间隔

  • 硬间隔:严格要求所有样本正确分类(易过拟合)
  • 软间隔:允许少量误分类,引入松弛变量 $\xi$:
    $$\min \frac{1}{2}||w||^2 + C\sum \xi_i$$

3. 核函数对比

核类型 公式 适用场景
线性核 $K(x,z)=x^Tz$ 特征数 > 样本数
多项式核 $(\gamma x^Tz + r)^d$ 中等复杂度数据
RBF 核(默认) $\exp(-\gamma

Python 实战

# 数据预处理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 模型训练
from sklearn.svm import SVC
model = SVC(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)

# 评估
from sklearn.metrics import classification_report
print(classification_report(y_test, model.predict(X_test)))

调优建议

  1. 参数选择
  2. 小数据集:优先用 RBF 核,$C$ 取 1 -10
  3. 大数据集:考虑线性核,用 LinearSVC 加速

  4. 特征工程

  5. 必须做标准化(SVM 对尺度敏感)
  6. 删除高度相关特征

  7. 常见错误

  8. 报错 ConvergenceWarning:增大max_iter 或减小tol
  9. 内存不足:改用SGDClassifier(loss='hinge')

思考题

  1. 当特征维度远大于样本量时,为什么线性核效果更好?
  2. 如何通过交叉验证同时优化 $(C, \gamma)$ 参数?
  3. SVM 如何处理多分类问题?(提示:ovo/ovr 策略)
正文完
 0
评论(没有评论)