支持向量机 (SVM)
📌 核心定义 (What)
Section titled “📌 核心定义 (What)”一句话定义:SVM 是一种最大间隔分类器,它寻找一个超平面将数据分开,并使得离超平面最近的点(支持向量)到超平面的距离最大化。
为什么重要?
- 在深度学习之前,SVM 是最强大的分类算法之一
- 引入了核技巧 (Kernel Trick),影响了整个机器学习领域
- 理论优美,可解释性强
- 小数据集上仍有竞争力
🏠 生活类比 (Analogy)
Section titled “🏠 生活类比 (Analogy)”🚧 “画分界线”
Section titled “🚧 “画分界线””想象你要在操场上用绳子把红队和蓝队分开:
| 方案 | 问题 |
|---|---|
| 随便画 | 能分开,但绳子贴着某些人,稍微动就分错了 |
| 最大间隔 | 让绳子离两边最近的人都尽量远,这样更稳定 |
支持向量 = 离绳子最近的那几个人(他们决定了绳子的位置)
🎯 “投影到更高维度”
Section titled “🎯 “投影到更高维度””如果红蓝两队混在一起(线性不可分),怎么办?
核技巧:把人”抛到空中”(升维),在空中用一个平面分开,再投影回地面。
🎬 视频详解 (Video)
Section titled “🎬 视频详解 (Video)”🎨 交互演示 (Interactive)
Section titled “🎨 交互演示 (Interactive)”观察决策边界如何分离两类数据,理解支持向量的作用。
📊 SVM 决策边界可视化
数据集:
正类 (+1)
负类 (-1)
支持向量
决策边界
💡 支持向量是离决策边界最近的点,它们决定了边界的位置
📊 数学原理 (Math)
Section titled “📊 数学原理 (Math)”线性可分情况
Section titled “线性可分情况”给定训练数据 ,其中 ,目标是找到超平面 。
最大间隔优化目标
- : 间隔宽度(两侧支持向量之间的距离)
- 约束条件:所有点都被正确分类且在间隔之外
- 等价于最小化
软间隔 (Soft Margin)
Section titled “软间隔 (Soft Margin)”现实数据通常有噪声,允许一些错误分类:
软间隔 SVM
- : 松弛变量,允许点进入间隔或被错分
- : 惩罚系数,越大对错误越不容忍
- : 硬间隔 SVM
- : 忽略错误,间隔最大
核技巧 (Kernel Trick)
Section titled “核技巧 (Kernel Trick)”核心思想:不显式计算高维映射 ,而是用核函数直接计算内积。
核函数定义
常用核函数:
- 线性核:
- 多项式核:
- RBF (高斯核):
- Sigmoid 核:
RBF 核相当于将数据映射到无限维空间,但计算复杂度仍然有限!
💻 代码示例 (scikit-learn)
Section titled “💻 代码示例 (scikit-learn)”from sklearn import svmfrom sklearn.datasets import make_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_score
# 生成数据X, y = make_classification(n_samples=1000, n_features=20, random_state=42)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 线性 SVMlinear_svm = svm.SVC(kernel='linear', C=1.0)linear_svm.fit(X_train, y_train)print(f"线性 SVM 准确率: {accuracy_score(y_test, linear_svm.predict(X_test)):.3f}")
# RBF 核 SVMrbf_svm = svm.SVC(kernel='rbf', C=1.0, gamma='scale')rbf_svm.fit(X_train, y_train)print(f"RBF SVM 准确率: {accuracy_score(y_test, rbf_svm.predict(X_test)):.3f}")
# 查看支持向量数量print(f"支持向量数量: {len(rbf_svm.support_vectors_)}")📈 SVM vs 其他算法
Section titled “📈 SVM vs 其他算法”| 特性 | SVM | 逻辑回归 | 神经网络 | 决策树 |
|---|---|---|---|---|
| 小数据集 | ✅✅ 最佳 | ✅ 好 | ❌ 易过拟合 | ✅ 好 |
| 高维数据 | ✅✅ 擅长 | ✅ 好 | ✅ 好 | ⚠️ 一般 |
| 非线性 | ✅ 核技巧 | ❌ 需特征工程 | ✅✅ 天然支持 | ✅ 天然支持 |
| 可解释性 | ✅ 支持向量 | ✅ 权重 | ❌ 黑箱 | ✅✅ 规则 |
| 大数据集 | ❌ 慢 | ✅ 快 | ✅ 快(GPU) | ✅ 快 |
🔑 关键参数
Section titled “🔑 关键参数”| 参数 | 作用 | 调参建议 |
|---|---|---|
C | 惩罚系数 | 过拟合时减小,欠拟合时增大 |
kernel | 核函数类型 | 先试 RBF,不行再试其他 |
gamma | RBF 核宽度 | 大=复杂边界,小=平滑边界 |