Skip to content

支持向量机

支持向量机(Support Vector Machine, SVM)是一种最大间隔分类模型。它不仅要求样本被正确分类,还希望分类边界离最近样本尽可能远。

概念详解

线性分类超平面为:

wTx+b=0

对二分类标签 yi{1,+1},正确分类要求:

yi(wTxi+b)1

距离超平面最近的样本称为支持向量,它们决定最终分类边界。

数学公式及其推导

x 到超平面的距离为:

|wTx+b|||w||

两侧间隔边界为 wTx+b=1wTx+b=1,间隔宽度为:

2||w||

最大化间隔等价于最小化:

minw,b12||w||2

约束条件为:

yi(wTxi+b)1

对于非完全线性可分数据,引入松弛变量 ξi

minw,b,ξ12||w||2+Ci=1Nξiyi(wTxi+b)1ξi,ξi0

对应 hinge loss:

L=12||w||2+Ci=1Nmax(0,1yi(wTxi+b))

核函数

核函数可以隐式计算高维空间内积:

K(xi,xj)=ϕ(xi)Tϕ(xj)

常用 RBF 核为:

K(xi,xj)=exp(γ||xixj||2)

应用代码

python
import numpy as np
from sklearn.svm import SVC

X = np.array([[0, 0], [0, 1], [1, 0], [1, 1], [3, 3], [3, 4], [4, 3], [4, 4]])
y = np.array([0, 0, 0, 0, 1, 1, 1, 1])

clf = SVC(kernel="rbf", C=1.0, gamma="scale")
clf.fit(X, y)

print(clf.predict([[0.2, 0.1], [3.5, 3.2]]))
print("支持向量数量:", clf.n_support_)

小结

SVM 的重点是最大间隔和核技巧。它在中小规模数据上表现稳健,但大规模训练代价较高,参数 C 和核函数选择对结果影响很大。