支持向量机(SVM):算法讲解与原理推导

发布于:2025-02-23 ⋅ 阅读:(13) ⋅ 点赞:(0)

1 SVM介绍

SVM是一个二类分类器,它的全称是Support Vector Machine,即支持向量机。

SVM的目标是找到一个超平面,使用两类数据离这个超平面越远越好,从而对新的数据分类更准确,即使分类器更加健壮。比如上面的图中,两种分界线都成功划分了所有数据,但是浅颜色的线距离样本很近,距离分界线比较近的样本很容易被误判,相比之下黑色的线就好得多。
它有两个核心思想,一个是对于线性可分数据,SVM通过寻找最大化类别间距离的超平面进行分类;另一个是对于线性不可分数据,SVM就利用核函数将数据映射到高维空间,再找到线性可分的超平面。这个后面再详细说。

2 公式推导

2.1 距离求解

下面需要求解样本点与分界平面之间的距离。这里用到两个概念:投影、向量点乘。
可设分界超平面为 w X + b = 0 wX+b=0 wX+b=0 b b b是偏移量, w ⃗ \vec{w} w 就是平面法向量。

如图, x x x是任意样本点,平面是需要求解的分界面。 x ′ x' x 是平面上任意一点, w ⃗ \vec{w} w 是平面法向量。其中 x ′ x ⃗ \vec {x'x} xx x − x ′ x-x' xx。需要求解 x x x 到平面的距离 d d d,也就是 x ′ x ⃗ \vec {x'x} xx w ⃗ \vec{w} w 方向上的投影。
为了符合线性代数的习惯,向量符号就不使用箭头标识了。
根据向量点乘公式知:
w T ( x − x ′ ) = ∣ ∣ w ∣ ∣ × ∣ ∣ x − x ′ ∣ ∣ × cos ⁡ < w T , x − x ′ > w^{T}(x-x')=||w||×||x-x'||×\cos<w^T,x-x'> wT(xx)=∣∣w∣∣×∣∣xx∣∣×cos<wT,xx>
则投影为:
∣ ∣ x − x ′ ∣ ∣ cos ⁡ < w T , x − x ′ > = W T ( x − x ′ ) ∣ ∣ w ∣ ∣ = 1 ∣ ∣ w ∣ ∣ ( w T x + b ) ||x-x'||\cos<w^T,x-x'>=\frac{W^T(x-x')}{||w||}=\frac{1}{||w||}(w^Tx+b) ∣∣xx∣∣cos<wT,xx>=∣∣w∣∣WT(xx)=∣∣w∣∣1(wTx+b)
所以距离公式为:
d = 1 ∣ ∣ w ∣ ∣ ∣ w T x + b ∣ d = \frac{1}{||w||}|w^Tx+b| d=∣∣w∣∣1wTx+b
为了方便求解,约定 w w w方向朝向正例样本所在方向,正例样本标签 y y y记为1,负例样本标签 y y y记为-1,那么距离公式可记为:
d = 1 ∣ ∣ w ∣ ∣ y ( w T x + b ) d = \frac{1}{||w||}y(w^Tx+b) d=∣∣w∣∣1y(wTx+b)

2.2 目标表示

距离平面的最小间隔,公式表示为:
min ⁡ x i 1 ∣ ∣ w ∣ ∣ y i ( w T x i + b ) \min_{x_i}{\frac{1}{||w||}y_i(w^Tx_i+b)} minxi∣∣w∣∣1yi(wTxi+b)
目标是最大化所有样本点中距离平面的最小间隔,公式表示为:
max ⁡ w , b min ⁡ x i 1 ∣ ∣ w ∣ ∣ y i ( w T x i + b ) = max ⁡ w , b 1 ∣ ∣ w ∣ ∣ min ⁡ x i y i ( w T x i + b ) \max_{w,b}{\min_{x_i}{\frac{1}{||w||}y_i(w^Tx_i+b)}}=\max_{w,b}{\frac{1}{||w||}\min_{x_i}{y_i(w^Tx_i+b)}} maxw,bminxi∣∣w∣∣1yi(wTxi+b)=maxw,b∣∣w∣∣1minxiyi(wTxi+b)
随着 w w w b b b的任意变化, y i ( w T x i + b ) y_i(w^Tx_i+b) yi(wTxi+b)大小可以随之变化。在同一个最优解情况下,会有多个 w w w b b b。于是为了便于求解,约定以下公式作为约束条件:
min ⁡ x i y i ( w T x i + b ) = 1 ⇒ y i ( w T x i + b ) ≥ 1 ⇒ 1 − y i ( w T x i + b ) ≤ 0 \min_{x_i}{y_i(w^Tx_i+b)}=1 \Rightarrow y_i(w^Tx_i+b)\geq1 \Rightarrow 1-y_i(w^Tx_i+b)\leq0 minxiyi(wTxi+b)=1yi(wTxi+b)11yi(wTxi+b)0
注意这里每个样本点都构成一个约束。因此求解目标转变为在该限制下的 max ⁡ w , b 1 ∣ ∣ w ∣ ∣ \max_{w,b}{\frac{1}{||w||}} maxw,b∣∣w∣∣1。为了符合习惯,将其转换为求解最小值,则:
max ⁡ w , b 1 ∣ ∣ w ∣ ∣ \max_{w,b}{\frac{1}{||w||}} maxw,b∣∣w∣∣1= min ⁡ w , b ∣ ∣ w ∣ ∣ = min ⁡ x , b 1 2 w T w \min_{w,b}{||w||}=\min_{x,b}{\frac{1}{2}w^Tw} minw,b∣∣w∣∣=minx,b21wTw
这里增加 1 2 \frac{1}{2} 21是为了便于求导,不会影响结果。
此时优化目标使用公式表示为:
{ min ⁡ x , b 1 2 w T w s . t .    1 − y i ( w T x i + b ) ≤ 0 ,    i = 1 , 2 , . . . N \left\{ \begin{array}{l} \min_{x,b}{\frac{1}{2}w^Tw} \\ s.t. \ \ 1-y_i(w^Tx_i+b)\leq0,\ \ i=1,2,...N \end{array} \right. {minx,b21wTws.t.  1yi(wTxi+b)0,  i=1,2,...N

2.3 求解 w w w

下面就是使用数学原理拉格朗日乘数法、Karush-Kuhn-Tucker (KKT)条件、对偶问题求解上述公式。可以不过于纠结数学原理,如果另有需要,再深入研究。
上述求解目标是有不等式约束下的凸二次优化问题。于是根据拉格朗日乘数法,问题可以转换为:
{ min ⁡ w , b max ⁡ α L ( w , b , α ) s . t .   α i ≥ 0 \left\{ \begin{array}{l} \min_{w,b}{\max_{\alpha}{L(w,b,\alpha)}} \\ s.t. \ \alpha_{i}\geq0 \end{array} \right. {minw,bmaxαL(w,b,α)s.t. αi0

其中拉格朗日函数 L ( w , b , α ) = 1 2 w T w + ∑ i = 1 N α i ( 1 − y i ( w T x i + b ) ) L(w,b,\alpha)=\frac{1}{2}w^{T}w+\sum_{i=1}^{N}{\alpha_{i}(1-y_{i}(w^{T}x_{i}+b))} L(w,b,α)=21wTw+i=1Nαi(1yi(wTxi+b))
该公式需要满足KKT条件
{ 1 − y i ( w T x i + b ) ≤ 0 α i ( 1 − y i ( w T x i + b ) ) = 0 α i ≥ 0 \left\{ \begin{array}{l} 1-y_i(w^Tx_i+b)\leq0 \\ \alpha_{i}(1-y_i(w^Tx_i+b))=0 \\ \alpha_{i}\geq0 \end{array} \right. 1yi(wTxi+b)0αi(1yi(wTxi+b))=0αi0

L ( w , b , α ) L(w,b,\alpha) L(w,b,α)一定是强对偶问题,上述问题可以转换为:
{ max ⁡ α min ⁡ w , b L ( w , b , α ) s . t .   α i ≥ 0 \left\{ \begin{array}{l} \max_{\alpha}{\min_{w,b}{L(w,b,\alpha)}} \\ s.t. \ \alpha_{i}\geq0 \end{array} \right. {maxαminw,bL(w,b,α)s.t. αi0

那么当前首要任务是求解有约束下的 min ⁡ x , b L ( w , b , α ) \min_{x,b}{L(w,b,\alpha)} minx,bL(w,b,α)。求解思路是: L ( w , b , α ) L(w,b,\alpha) L(w,b,α) w w w b b b求偏导,最小值就在偏导为0的点上,那么比较这些点的 L L L值大小,最小的点就是最优解。
则求解下面式子:
{ ∂ L ∂ w = w − ∑ i = 1 N α i y i x i = 0 ∂ L ∂ b = ∑ i = 1 N α i y i = 0 α i ≥ 0 \left\{ \begin{array}{l} \frac{\partial L}{\partial w}=w-\sum_{i=1}^{N}{\alpha_{i}y_{i}x_{i}}=0 \\ \frac{\partial L}{\partial b}=\sum_{i=1}^{N}{\alpha_{i}y_{i}}=0 \\ \alpha_{i}\geq0 \end{array} \right. wL=wi=1Nαiyixi=0bL=i=1Nαiyi=0αi0

可知:
w = ∑ i = 1 N α i y i x i w=\sum_{i=1}^{N}{\alpha_{i}y_{i}x_{i}} w=i=1Nαiyixi
w w w 带回原式子,则:
L ( w , b , α ) = 1 2 w T w + ∑ i = 1 N α i ( 1 − y i ( w T x i + b ) ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j + ∑ i = 1 N α i − ∑ i = 1 N α i y i ( ∑ j = 1 N α j y j x j x i + b ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j + ∑ i = 1 N α i − ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j − b ∑ i = 1 N α i y i = ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j \begin{array}{l} L(w,b,\alpha) \\ =\frac{1}{2}w^{T}w+\sum_{i=1}^{N}{\alpha_{i}(1-y_{i}(w^{T}x_{i}+b))} \\ = \frac{1}{2}{\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}}}+\sum_{i=1}^{N}{\alpha_{i}}-\sum_{i=1}^{N}{\alpha_{i}y_{i}(\sum_{j=1}^{N}{\alpha_{j}y_{j}x_{j}}x_{i}+b)} \\ = \frac{1}{2}{\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}}}+\sum_{i=1}^{N}{\alpha_{i}}-\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}}-b\sum_{i=1}^{N}{\alpha_{i}y_{i}} \\ = \sum_{i=1}^{N}{\alpha_{i}}-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}} \end{array} L(w,b,α)=21wTw+i=1Nαi(1yi(wTxi+b))=21i=1Nj=1Nαiαjyiyjxixj+i=1Nαii=1Nαiyi(j=1Nαjyjxjxi+b)=21i=1Nj=1Nαiαjyiyjxixj+i=1Nαii=1Nj=1Nαiαjyiyjxixjbi=1Nαiyi=i=1Nαi21i=1Nj=1Nαiαjyiyjxixj

下一步又需要求解:
{ max ⁡ α [ ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j ] s . t .   ∑ i = 1 N α i y i = 0 , α i ≥ 0 \left\{ \begin{array}{l} \max_{\alpha}{[\sum_{i=1}^{N}{\alpha_{i}}-\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}}]} \\ s.t. \ \sum_{i=1}^{N}{\alpha_{i}y_{i}}=0,\alpha_{i}\geq0 \end{array} \right. {maxα[i=1Nαi21i=1Nj=1Nαiαjyiyjxixj]s.t. i=1Nαiyi=0,αi0

即:
{ min ⁡ α [ 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i x j − ∑ i = 1 N α i ] s . t .   ∑ i = 1 N α i y i = 0 , α i ≥ 0 \left\{ \begin{array}{l} \min_{\alpha}{[\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}x_{i}x_{j}}-\sum_{i=1}^{N}{\alpha_{i}}]} \\ s.t. \ \sum_{i=1}^{N}{\alpha_{i}y_{i}}=0,\alpha_{i}\geq0 \end{array} \right. {minα[21i=1Nj=1Nαiαjyiyjxixji=1Nαi]s.t. i=1Nαiyi=0,αi0

2.4 求解 b b b

支持向量是位于间隔边界上样本点,即 1 − y i ( w T x i + b ) ) = 0 1-y_i(w^Tx_i+b))=0 1yi(wTxi+b))=0
对于任意一个支持向量,求可以通过 1 − y i ( w T x i + b ) ) = 0 1-y_i(w^Tx_i+b))=0 1yi(wTxi+b))=0计算得到 b b b
如果有多个支持向量,记 S S S为支持向量集合,那么可以求解:
b = 1 ∣ S ∣ ∑ S y i − w T x i b=\frac{1}{|S|}\sum_{S}{y_i-w^Tx_i} b=S1SyiwTxi

2.5 求解支持向量(SOM算法)

下面需要基于上面的公式求解每个样本点的 α i \alpha_{i} αi。所有满足 α i ≤ 0 \alpha_{i}\leq0 αi0 的样本均为支持向量。
如果使用传统二次规划算法求解,样本量较大时效率较为低下。可以使用序列最小优化算法(Sequential Minimal Optimization, SMO)求解:

  1. 初始化
    设置所有拉格朗日乘子α的初始值,通常设为零。

  2. 选择两个变量 α i \alpha_i αi α j \alpha_j αj

    • 外层循环:
      遍历训练集中的每个样本,检查其是否违反KKT条件。如果发现某个样本不满足KKT条件,则将其作为第一个要优化的变量 α i \alpha_i αi
    • 内层循环:
      选择第二个变量 α j \alpha_j αj,目标是最大化 ∣ E 1 − E 2 ∣ |E1 - E2| E1E2∣,即两者的误差差异。这有助于确保每次迭代都能带来显著的变化。( E i = w ⊤ x i + b − y i E_i = \mathbf{w}^\top \mathbf{x}_i + b - y_i Ei=wxi+byi,是样本预测值与真实值的误差。)
  3. 优化子问题
    固定其他 α \alpha α,仅优化 α i \alpha_i αi α j \alpha_j αj。由于约束 α i y i + α j y j = − ∑ k ≠ i , j α k y k = ζ ( 常数 ) \alpha_i y_i + \alpha_j y_j = -\sum_{k\neq i,j} \alpha_k y_k = \zeta \quad (\text{常数}) αiyi+αjyj=k=i,jαkyk=ζ(常数),可用 α 1 \alpha_1 α1表示 α 2 \alpha_2 α2,将问题转换为单变量二次函数优化。然后求导找极值点可得:
    α j new = α j old + y j ( E i − E j ) η , η = K ( x i , x i ) + K ( x j , x j ) − 2 K ( x i , x j ) \alpha_j^{\text{new}} = \alpha_j^{\text{old}} + \frac{y_j (E_i - E_j)}{\eta}, \quad \eta = K(x_i, x_i) + K(x_j, x_j) - 2K(x_i, x_j) αjnew=αjold+ηyj(EiEj),η=K(xi,xi)+K(xj,xj)2K(xi,xj)
    其中 K ( x i , x j ) = x i ∗ x j K(x_i, x_j)=x_i*x_j K(xi,xj)=xixj,称为线性核。 η = ∥ x i − x j ∥ 2 \eta =\|\mathbf{x}_i - \mathbf{x}_j\|^2 η=xixj2(几何意义:两个样本的欧氏距离平方)。
    然后对 α j new \alpha_j^{\text{new}} αjnew 进行剪裁,也就是约束其在可行域内:
    α 2 new,clipped = { H if  α 2 new > H L if  α 2 new < L α 2 new otherwise \alpha_2^{\text{new,clipped}} = \begin{cases} H & \text{if } \alpha_2^{\text{new}} > H \\ L & \text{if } \alpha_2^{\text{new}} < L \\ \alpha_2^{\text{new}} & \text{otherwise} \end{cases} α2new,clipped= HLα2newif α2new>Hif α2new<Lotherwise

    其中:

    • y i ≠ y j y_i \neq y_j yi=yj,则: L = max ⁡ ( 0 , α j old − α i old ) , H = + ∞ L = \max(0, \alpha_j^{\text{old}} - \alpha_i^{\text{old}}), \quad H = +\infty L=max(0,αjoldαiold),H=+
    • y i = y j y_i = y_j yi=yj,则: L = max ⁡ ( 0 , α i old + α j old − ζ ) , H = + ∞ L = \max(0, \alpha_i^{\text{old}} + \alpha_j^{\text{old}} - \zeta), \quad H = +\infty L=max(0,αiold+αjoldζ),H=+

    然后更新 α i \alpha_i αi
    α 1 new = α 1 old + y 1 y 2 ( α 2 old − α 2 new,clipped ) \alpha_1^{\text{new}} = \alpha_1^{\text{old}} + y_1 y_2 (\alpha_2^{\text{old}} - \alpha_2^{\text{new,clipped}}) α1new=α1old+y1y2(α2oldα2new,clipped)

  4. 更新阈值 b b b 和误差缓存

    • 根据新 α i \alpha_i αi α j \alpha_j αj 计算阈值 b b b
    • 更新所有样本的误差缓存 E i E_i Ei,用于后续变量选择。
  5. 收敛判断
    重复上述步骤,直到所有 α i \alpha_i αi 满足KKT条件,或达到最大迭代次数。

3 优化

3.1 软间隔

允许部分样本不满足约束,引入松弛变量 ξ i ≥ 0 \xi_i \geq 0 ξi0,优化目标变为:
{ min ⁡ x , b 1 2 w T w + C ∑ i = 1 n ξ i s . t .    1 − y i ( w T x i + b ) ≤ ξ i ,   ξ i ≥ 0 ,   i = 1 , 2 , . . . N \left\{ \begin{array}{l} \min_{x,b}{\frac{1}{2}w^Tw}+C\sum_{i=1}^{n}{\xi_i} \\ s.t. \ \ 1-y_i(w^Tx_i+b)\leq\xi_i ,\ \xi_i \geq 0, \ i=1,2,...N \end{array} \right. {minx,b21wTw+Ci=1nξis.t.  1yi(wTxi+b)ξi, ξi0, i=1,2,...N
其中 C C C 是惩罚参数,控制分类错误与间隔的权衡。

3.2 核技巧(Kernel Trick)

当数据线性不可分时,可以通过映射 $\phi(x)$ 将数据投影到高维空间,使其线性可分。
为了避免显式计算高维内积 ϕ ( x i ) ⋅ ϕ ( x j ) \phi(x_i) \cdot \phi(x_j) ϕ(xi)ϕ(xj),可以直接使用核函数 ( K(x_i, x_j) ) 代替。
常用核函数:

  • 线性核: K ( x i , x j ) = x i ⋅ x j K(x_i, x_j) = x_i \cdot x_j K(xi,xj)=xixj
  • 多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i, x_j) = (x_i \cdot x_j + c)^d K(xi,xj)=(xixj+c)d
  • 高斯核(RBF): K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K(x_i, x_j) = \exp\left( -\frac{\|x_i - x_j\|^2}{2\sigma^2} \right) K(xi,xj)=exp(2σ2xixj2)

2.5的优化目标变为:
{ min ⁡ α [ 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i ] s . t .   ∑ i = 1 N α i y i = 0 , α i ≥ 0 \left\{ \begin{array}{l} \min_{\alpha}{[\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_{i}\alpha_{j}y_{i}y_{j}K(x_i, x_j)}-\sum_{i=1}^{N}{\alpha_{i}}]} \\ s.t. \ \sum_{i=1}^{N}{\alpha_{i}y_{i}}=0,\alpha_{i}\geq0 \end{array} \right. {minα[21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi]s.t. i=1Nαiyi=0,αi0