支持向量机(SVM)是一种用于分类(和回归)的监督学习算法,其主要目标是找到一个最佳决策超平面,将数据点分为不同的类别,并且使得分类边界与最近的数据点之间的间隔(margin)最大化,从而提高模型对新数据的泛化能力。
在学习支持向量机之前,我们需要弄清楚一些数学概念和公式。
一、什么是超平面
超平面是指在 n 维空间中,维度为 n-1 的仿射子空间。换句话说,超平面是一个"平坦"的空间,它比所在空间的维度低1。具体来说:
- 二维空间:超平面是1维的直线。
- 三维空间:超平面是2维的平面。
- n维空间:超平面是 n−1 维的空间。
通常,超平面可以用一个线性方程来表示,例如在 nn 维空间中,一个超平面可以写为:
w^T x + b = 0,
其中 w 是一个 n 维向量(称为法向量),b 是一个偏置项,而 x 是 n 维输入向量。这个方程表示所有满足此关系的点构成的集合,也就是超平面。
超平面在机器学习中非常重要,例如支持向量机(SVM)就是利用超平面将数据分为不同类别。
二、什么是法向量
法向量是一个向量,它与给定平面或超平面中的所有向量都垂直。换句话说,如果我们有一个平面或超平面,那么平面内任意一个向量与该平面的法向量的内积都为零。法向量不仅描述了平面或超平面的方向,还在计算点到平面的距离、确定超平面方程以及各种几何变换中起关键作用。
举例说明:
-
在二维平面中,一个直线可以表示为 ax + by + c = 0。其中,向量 (a, b) 就是这条直线的法向量,因为它与直线上任意两个点构成的向量都垂直。
-
在三维空间中,一个平面的方程可以写成 ax + by + cz + d = 0,此时 (a, b, c) 就是该平面的法向量。
总结来说,法向量为我们提供了描述平面方向的工具,是理解和操作几何对象的重要概念。
三、什么是向量的模
向量的"模"(或称为"范数")指的是向量的大小或长度。最常用的度量是欧几里得范数,其计算公式为:

-
几何意义 :
可以把向量看作从原点指向空间中某个点的箭头,向量的模就是这根箭头的长度。
-
示例 :
对于二维向量 v = (3, 4),其模为
这表示这个向量的长度为5。
四、点到超平面的距离
1. 公式

2. 几何定义
样本 x(n) 到超平面 w^Tx+b=0 的距离,是该点到超平面的最短距离(垂直距离)。
3. 推导过程
步骤 1:任取超平面上一点 x′,满足 w^Tx′+b=0。

五、超平面到超平面的距离
考虑两个平行超平面,其方程分别为

这两个超平面平行,因为它们具有相同的法向量 w。
为了求两个超平面之间的距离,我们可以任选一个在第一个超平面上的点,然后计算它到第二个超平面的距离。
六、现在我们切入本文的主题:支持向量机
支持向量机(Support Vector Machine,SVM)是一个经典的二分类算法, 其找到的分割超平面具有更好的鲁棒性,因此广泛使用在很多任务上,并表现出 了很强优势。
支持向量机(SVM)是一种监督学习算法,主要用于解决分类问题,尤其是二分类问题。其核心思想是通过寻找一个最优的决策边界(在二维空间中就是一条直线,在更高维空间中则是一个超平面),使得正类和负类数据点之间的间隔(margin)最大化。
(一)基本概念
给定一个二分类器数据集 ,
如果两类样本是线性可分的,即存在一个超平面 w^T x + b = 0,

我们定义间隔(Margin)𝛾 为整个数据集 𝐷 中所有样本到分割超平面的最短距离。
如果间隔 𝛾 越大,其分割超平面对两个数据集的划分越稳定,不容易受噪声等因素影响。
支持向量机的目标是寻找一个超平面使得 𝛾 最大。
(二)这里先弄清楚上面提到的一个关键点:两类样本线性可分时,则每个样本满足 y(w^Tx+b)>0
1. 超平面的定义
在二分类问题中,超平面是决策边界,形式为:
w^Tx+b=0
其中:
-
w 是超平面的法向量(决定方向)。
-
b 是偏置项(决定超平面与原点的距离)。
2. 线性可分性
若两类样本线性可分,则存在一个超平面,使得:
-
正类样本(y=+1)满足 w^Tx+b>0。
-
负类样本(y=−1)满足 w^Tx+b<0。
3. 统一表达
将两类样本的条件合并为:
y(w^Tx+b)>0
-
当 y=+1 时,w^Tx+b>0,乘积为正。
-
当 y=−1 时,w^Tx+b<0,乘积仍为正。
因此,所有样本均满足 y(w^Tx+b)>0。
(三)核心思想与基本概念
-
决策超平面
在 n 维空间中,一个超平面可以表示为
w^T x + b = 0,
其中 w 是超平面的法向量,b 是偏置。支持向量机寻找这样一个超平面,将正负类数据分隔开。
-
最大化间隔
SVM 不仅要求决策超平面能够分隔两类数据,还要求该超平面与数据中最近的点之间的距离(称为"间隔")尽可能大。直观上,间隔越大,模型对噪声和数据变化的容忍度就越高,泛化能力也就越强。结合前面的点到超平面的距离公式,对于线性可分的情况,间隔可以证明是:
,因此最大化间隔等价于最小化
。
对于一个线性可分的数据集,其分割超平面有很多个,但是间隔最大的超平面是唯一的,下面放一张图辅助理解:
-
支持向量
那些位于决策边界附近的训练样本被称为"支持向量"。这些点决定了决策超平面的最终位置和方向。换句话说,只要知道支持向量的信息,就可以确定最优的超平面。
-
非线性扩展
当数据在原始空间中线性不可分时,SVM 可以使用"核技巧"(Kernel Trick)将数据映射到一个高维空间,在高维空间中数据可能变得线性可分,再在高维空间中找到最佳决策超平面。常见的核函数包括径向基函数(RBF)、多项式核等。
(四)间隔的推导过程如下:
- 点到超平面的距离公式
对于任意点 x_0 到超平面的距离公式是:

- 计算支持向量到决策边界的距离

- 两个边界超平面之间的间隔
两个边界超平面之间的距离就是这两个距离的和,即:


(五)优化目标
因此,SVM 的目标是求解如下的优化问题:

约束条件为:

这里注意思考:为什么优化目标是 ?


**** 关于支持向量机参数的学习,鉴于篇幅,下一篇博文再做介绍。
(六)相关概念
1.线性可分 vs 非线性可分
-
线性可分:存在一个超平面完美分隔两类数据(如二维平面上的直线)。
-
非线性可分:需通过 核技巧(Kernel Trick)将数据映射到高维空间,使其线性可分。
2. 核函数(Kernel Function)
-
作用:隐式计算高维空间的内积,避免显式映射。
-
常见核函数:
3. 软间隔(Soft Margin)

(七)SVM的优缺点
优点 | 缺点 |
---|---|
高维数据有效(核技巧) | 计算复杂度高(大规模数据不适用) |
泛化能力强(间隔最大化) | 需要谨慎调参(如CC、γγ) |
支持线性和非线性分类 | 多分类需额外策略(OvR/OvO) |
(八)代码示例
python
from sklearn import svm
from sklearn.datasets import make_classification
import matplotlib.pyplot as plt
# 生成线性可分数据
X, y = make_classification(n_features=2, n_redundant=0, n_informative=2, random_state=42)
# 训练SVM
model = svm.SVC(kernel='linear', C=1.0)
model.fit(X, y)
# 可视化决策边界
plt.scatter(X[:,0], X[:,1], c=y, cmap='bwr')
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 生成网格点
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)
# 绘制超平面和间隔
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], linestyles=['--', '-', '--'])
ax.scatter(model.support_vectors_[:,0], model.support_vectors_[:,1], s=100, facecolors='none', edgecolors='k')
plt.show()