MCM520 ← 资料站首页 支持向量机 SVM · 深度手册 打开交互阅读器 →

支持向量机 SVM · 深度手册

分类:聚类分类 | 难度:★★★ 高阶 | 编号:svm

一、这是什么(一句话用途)

小样本高维分类 / 回归(边界清晰)

二、核心思想

支持向量机(SVM)追求的是"最稳健"的分类边界:在两类样本之间找一条间隔(margin)最大的超平面,这样新样本即使有噪声也不容易跨越边界被判错。对于线性不可分的数据,SVM 用"核技巧"把样本隐式映射到高维空间,使原本纠缠的两类在高维里线性可分——而计算上只需核函数,无需显式高维表示。它在小样本、高维(如文本、基因)场景表现优异,但对核与参数(C、γ)较敏感,且大规模数据训练较慢。

三、数学原理与推导

硬间隔:设超平面 w⋅x+b=0w\cdot x+b=0,两类满足 yi(w⋅xi+b)≥1y_i(w\cdot x_i+b)\ge1。最大化间隔等价于最小化 ∥w∥2/2\|w\|^2/2:

12∥w∥2→min⁡s.t. yi(w⋅xi+b)≥1 \frac{1}{2}\|w\|^2\to\min\quad \text{s.t.}\ y_i(w\cdot x_i+b)\ge1

写成对偶(用核技巧):

max⁡α∑iαi−12∑i,jαiαjyiyj K(xi,xj) \max_{\alpha}\sum_i\alpha_i-\frac12\sum_{i,j}\alpha_i\alpha_j y_i y_j\,K(x_i,x_j)
s.t. ∑iαiyi=0, αi≥0 \text{s.t.}\ \sum_i\alpha_i y_i=0,\ \alpha_i\ge0

K(xi,xj)=ϕ(xi)⋅ϕ(xj)K(x_i,x_j)=\phi(x_i)\cdot\phi(x_j) 为核函数(如 RBF K=e−γ∥xi−xj∥2K=e^{-\gamma\|x_i-x_j\|^2})。仅支持向量(αi>0\alpha_i>0)决定边界。软间隔引入松弛 ξi\xi_i 与惩罚 CC:min⁡12∥w∥2+C∑ξi\min\frac12\|w\|^2+C\sum\xi_i,平衡间隔与误分。

四、建模 / 求解步骤

  1. 特征标准化
  2. 选核(RBF / 线性)与 C
  3. 训练找支持向量
  4. 分类 / 回归预测
  5. 调 γ/C

五、关键公式速查

max 间隔 ⇔ min ‖w‖²/2 s.t. y_i(w·x_i+b)≥1

六、典型示例

二分类(合格 / 不合格)小样本高维特征。

完整算例(数字演示,照着算一遍)

场景:2 维两类点,线性可分。正类 (2,2),(3,3),负类 (1,1),(0,2)。

最大间隔:超平面 x1−x2=0,支持向量为 (2,2),(1,1),间隔 2/√2≈1.41。

结论:SVM 找最大间隔超平面,仅支持向量决定边界。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","svm.csv"))
X = df[["x1","x2"]].to_numpy(dtype=float)
y = df["label"].to_numpy(dtype=float)*2-1
X=(X-X.mean(0))/X.std(0)
rng=np.random.default_rng(7); w=rng.normal(0,1,2); b=0
for _ in range(2000):
    for xi,yi in zip(X,y):
        if yi*(xi@w+b)<1:
            w+=0.01*(yi*xi-2*w); b+=0.01*yi
        else:
            w-=0.01*2*w
print("权重 w:", np.round(w,3), "b=%.3f"%b)

配套文件:py_svm.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% SVM(线性, 合页损失)示例(MATLAB/Octave)
df = readtable('..\datasets\svm.csv');
X = table2array(df(:,1:2)); y=table2array(df(:,3))*2-1;
X=(X-mean(X,1))./std(X,1); rng(7); w=randn(2,1); b=0;
for i=1:2000
  for k=1:height(X)
    if y(k)*(X(k,:)*w+b)<1, w=w+0.01*(y(k)*X(k,:)'-2*w); b=b+0.01*y(k);
    else w=w-0.01*2*w; end
  end
end
disp(w);

配套文件:m_svm.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

2 个特征与二分类标签的 50 组样本(两类近似线性可分)。用于线性 SVM 训练分类边界。

  • 字段:x1, x2, label
  • 行数:50 行
  • 下载:svm.csv

十、常见误区与避坑清单

  • 必标准化
  • 核与 C/γ 敏感
  • 多分类是一对多 / 一对一

十一、结果怎么解读

支持向量决定边界;看间隔与准确率。

十二、常与谁搭配

非线性用核技巧。

十三、论文写作技巧(怎么把它写进论文)

把 支持向量机 SVM 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

区分你要的是无监督划分(聚类)还是有监督判别(分类)。说明特征维度与样本量,以及为什么选 支持向量机 SVM(如非线性边界用核方法、高维稀疏用线性、需概率输出用贝叶斯)。

2. 结果怎么写(图表与指标)

聚类给散点图着色 + 轮廓系数 / 肘部图;分类给混淆矩阵 + 准确率 / F1 / ROC 曲线。特征重要性图能加分。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 支持向量机 SVM 进行小样本高维分类 / 回归(边界清晰)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 支持向量机 SVM to 小样本高维分类 / 回归(边界清晰). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

聚类要说明簇数怎么定(不是拍脑袋);分类要交代训练 / 测试划分与交叉验证,避免过拟合误报高精度。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

为揭示客户群体的内在结构,本文采用 支持向量机 SVM 将 1,200 条样本划分为 4 类(轮廓系数=0.61),各类在消费频次与客单价上差异显著,为精准营销提供依据。

To reveal the intrinsic structure of customers, we apply 支持向量机 SVM to partition 1,200 samples into 4 clusters (silhouette=0.61); the groups differ markedly in purchase frequency and average order value, supporting targeted marketing.

十四、相关手册(延伸阅读)

(暂无直接关联手册,可前往手册库浏览其它算法)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。