1 SVM介绍

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

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

2 公式推导

2.1 距离求解

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

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

2.2 目标表示

距离平面的最小间隔,公式表示为:
min⁡xi1∣∣w∣∣yi(wTxi+b)\min_{x_i}{\frac{1}{||w||}y_i(w^Tx_i+b)}minxi∣∣w∣∣1yi(wTxi+b)
目标是最大化所有样本点中距离平面的最小间隔,公式表示为:
max⁡w,bmin⁡xi1∣∣w∣∣yi(wTxi+b)=max⁡w,b1∣∣w∣∣min⁡xiyi(wTxi+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)
随着wwwbbb的任意变化,yi(wTxi+b)y_i(w^Tx_i+b)yi(wTxi+b)大小可以随之变化。在同一个最优解情况下,会有多个wwwbbb。于是为了便于求解,约定以下公式作为约束条件:
min⁡xiyi(wTxi+b)=1⇒yi(wTxi+b)≥1⇒1−yi(wTxi+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)\leq0minxiyi(wTxi+b)=1yi(wTxi+b)11yi(wTxi+b)0
注意这里每个样本点都构成一个约束。因此求解目标转变为在该限制下的max⁡w,b1∣∣w∣∣\max_{w,b}{\frac{1}{||w||}}maxw,b∣∣w∣∣1。为了符合习惯,将其转换为求解最小值,则:
max⁡w,b1∣∣w∣∣\max_{w,b}{\frac{1}{||w||}}maxw,b∣∣w∣∣1=min⁡w,b∣∣w∣∣=min⁡x,b12wTw\min_{w,b}{||w||}=\min_{x,b}{\frac{1}{2}w^Tw}minw,b∣∣w∣∣=minx,b21wTw
这里增加12\frac{1}{2}21是为了便于求导,不会影响结果。
此时优化目标使用公式表示为:
{min⁡x,b12wTws.t.  1−yi(wTxi+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 求解 www

下面就是使用数学原理拉格朗日乘数法、Karush-Kuhn-Tucker (KKT)条件、对偶问题求解上述公式。可以不过于纠结数学原理,如果另有需要,再深入研究。
上述求解目标是有不等式约束下的凸二次优化问题。于是根据拉格朗日乘数法,问题可以转换为:
{min⁡w,bmax⁡α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,α)=12wTw+∑i=1Nαi(1−yi(wTxi+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−yi(wTxi+b)≤0αi(1−yi(wTxi+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,bL(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,bL(w,b,α)\min_{x,b}{L(w,b,\alpha)}minx,bL(w,b,α)。求解思路是:L(w,b,α)L(w,b,\alpha)L(w,b,α)wwwbbb求偏导,最小值就在偏导为0的点上,那么比较这些点的LLL值大小,最小的点就是最优解。
则求解下面式子:
{∂L∂w=w−∑i=1Nαiyixi=0∂L∂b=∑i=1Nαiyi=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=1Nαiyixiw=\sum_{i=1}^{N}{\alpha_{i}y_{i}x_{i}}w=i=1Nαiyixi
www 带回原式子,则:
L(w,b,α)=12wTw+∑i=1Nαi(1−yi(wTxi+b))=12∑i=1N∑j=1Nαiαjyiyjxixj+∑i=1Nαi−∑i=1Nαiyi(∑j=1Nαjyjxjxi+b)=12∑i=1N∑j=1Nαiαjyiyjxixj+∑i=1Nαi−∑i=1N∑j=1Nαiαjyiyjxixj−b∑i=1Nαiyi=∑i=1Nαi−12∑i=1N∑j=1Nαiαjyiyjxixj \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=1Nαi−12∑i=1N∑j=1Nαiαjyiyjxixj]s.t. ∑i=1Nαiyi=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⁡α[12∑i=1N∑j=1Nαiαjyiyjxixj−∑i=1Nαi]s.t. ∑i=1Nαiyi=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 求解 bbb

支持向量是位于间隔边界上样本点,即1−yi(wTxi+b))=01-y_i(w^Tx_i+b))=01yi(wTxi+b))=0
对于任意一个支持向量,求可以通过1−yi(wTxi+b))=01-y_i(w^Tx_i+b))=01yi(wTxi+b))=0计算得到bbb
如果有多个支持向量,记SSS为支持向量集合,那么可以求解:
b=1∣S∣∑Syi−wTxib=\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,目标是最大化∣E1−E2∣|E1 - E2|E1E2∣,即两者的误差差异。这有助于确保每次迭代都能带来显著的变化。(Ei=w⊤xi+b−yiE_i = \mathbf{w}^\top \mathbf{x}_i + b - y_iEi=wxi+byi,是样本预测值与真实值的误差。)
  3. 优化子问题
    固定其他α\alphaα,仅优化 αi\alpha_iαiαj\alpha_jαj。由于约束 αiyi+αjyj=−∑k≠i,jαkyk=ζ(常数)\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,将问题转换为单变量二次函数优化。然后求导找极值点可得:
    αjnew=αjold+yj(Ei−Ej)η,η=K(xi,xi)+K(xj,xj)−2K(xi,xj)\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(xi,xj)=xi∗xjK(x_i, x_j)=x_i*x_jK(xi,xj)=xixj,称为线性核。η=∥xi−xj∥2\eta =\|\mathbf{x}_i - \mathbf{x}_j\|^2η=xixj2(几何意义:两个样本的欧氏距离平方)。
    然后对 αjnew\alpha_j^{\text{new}}αjnew 进行剪裁,也就是约束其在可行域内:
    α2new,clipped={Hif α2new>HLif α2new<Lα2newotherwise \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

    其中:

    • yi≠yjy_i \neq y_jyi=yj,则:L=max⁡(0,αjold−αiold),H=+∞L = \max(0, \alpha_j^{\text{old}} - \alpha_i^{\text{old}}), \quad H = +\inftyL=max(0,αjoldαiold),H=+
    • yi=yjy_i = y_jyi=yj,则:L=max⁡(0,αiold+αjold−ζ),H=+∞L = \max(0, \alpha_i^{\text{old}} + \alpha_j^{\text{old}} - \zeta), \quad H = +\inftyL=max(0,αiold+αjoldζ),H=+

    然后更新 αi\alpha_iαi
    α1new=α1old+y1y2(α2old−α2new,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. 更新阈值 bbb 和误差缓存

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

3 优化

3.1 软间隔

允许部分样本不满足约束,引入松弛变量 ξi≥0\xi_i \geq 0ξi0,优化目标变为:
{min⁡x,b12wTw+C∑i=1nξis.t.  1−yi(wTxi+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
其中 CCC 是惩罚参数,控制分类错误与间隔的权衡。

3.2 核技巧(Kernel Trick)

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

  • 线性核:K(xi,xj)=xi⋅xjK(x_i, x_j) = x_i \cdot x_jK(xi,xj)=xixj
  • 多项式核:K(xi,xj)=(xi⋅xj+c)dK(x_i, x_j) = (x_i \cdot x_j + c)^dK(xi,xj)=(xixj+c)d
  • 高斯核(RBF):K(xi,xj)=exp⁡(−∥xi−xj∥22σ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⁡α[12∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi]s.t. ∑i=1Nαiyi=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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐