1️⃣ 什么是支持向量机?
支持向量机(Support Vector Machine,SVM)是一种经典的监督学习算法,广泛应用于二分类任务,也可扩展至多分类和回归(SVR)。
核心目标:
找到一个最优的超平面,最大化两类样本间隔,从而提升分类的鲁棒性。
2️⃣ 基本思想
-
给定一组样本数据
,其中
-
寻找一个超平面:
-
使得两类数据点尽量远离超平面,且间隔最大。
3️⃣ 硬间隔最大化(Hard Margin)
3.1 分类约束条件
对于线性可分数据,要求:
3.2 间隔定义
两类支持向量到超平面的距离为:
3.3 优化目标
最大化间隔等价于最小化 :
4️⃣ 软间隔与松弛变量
真实数据往往不可完全线性可分 ,我们引入松弛变量 :
优化目标变为:
其中:
-
:惩罚参数,平衡间隔大小与误分类点数量
-
大:减少误分类,更可能过拟合
-
小:允许一定误分类,提升泛化
5️⃣ 对偶问题与拉格朗日乘子法
通过拉格朗日乘子法可将原问题转化为对偶问题:
约束条件:
支持向量(Support Vectors) :
最终只有对应 的样本会成为支持向量参与模型决策。
6️⃣ 核技巧(Kernel Trick)
SVM可以通过核函数处理非线性可分数据。用核函数代替内积:
常见核函数:
-
线性核:
-
多项式核:
-
高斯核(RBF核):
7️⃣ SVM的损失函数(Hinge Loss)
SVM的损失函数采用铰链损失(Hinge Loss):
批量形式:
8️⃣ Python实现示例
python
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
# 构造数据
X, y = make_blobs(n_samples=50, centers=2, random_state=6)
y = np.where(y == 0, -1, 1)
# 训练SVM模型
clf = SVC(kernel='linear', C=1.0)
clf.fit(X, y)
# 绘制决策边界
plt.scatter(X[:,0], X[:,1], c=y, cmap='bwr', s=50)
ax = plt.gca()
xlim = ax.get_xlim()
xx = np.linspace(xlim[0], xlim[1])
yy = -(clf.coef_[0][0] * xx + clf.intercept_[0]) / clf.coef_[0][1]
plt.plot(xx, yy, 'k-')
plt.title('Linear SVM Decision Boundary')
plt.show()
9️⃣ 优缺点总结
✅ 优点
-
能处理高维特征空间
-
支持核函数,适用于非线性问题
-
模型由支持向量决定,鲁棒性强
❌ 缺点
-
参数选择(C、核参数)较难
-
对大规模数据集计算量大
-
对噪声敏感,尤其是C较大时
🔟 应用场景与扩展
-
文本分类、垃圾邮件过滤
-
图像分类、人脸识别
-
手写数字识别(MNIST)
-
支持向量回归(SVR)
📚 总结
-
SVM通过最大化间隔提升模型泛化能力
-
软间隔 + 核方法使SVM适应非线性与噪声数据
-
可根据数据规模与特征选择合适的核函数