支持向量机

给定训练样本集\(D={(x_1,y_1),(x_2,y_2),\ldots,(x_m,y_m)},y_i \in \{-1,+1\}\),分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开
样本空间中,划分超平面可以表示为\(w^Tx+b=0\),其中\(w^T\)为法向量,b为位移项,样本空间中任意点x到超平面(w,b)的距离可以表示为\(r=\frac{|w^Tx+b|}{||w||}\),即为法向量上的投影长度处以法向量的模长

若能正确分类,那么对于正例,将x带入划分超平面方程,应有\(w^Tx_i+b>0\),此时\(y_i=+1\),于是不妨令
\(\begin{cases} \boldsymbol{w}^\mathrm{T} \boldsymbol{x}_i + b \geq +1, & y_i = +1; \\ \boldsymbol{w}^\mathrm{T} \boldsymbol{x}_i + b \leq -1, & y_i = -1. \end{cases}\)
等号在距离超平面最近的那些点上取到,这些点称为支持向量,两个异类支持向量到超平面的距离之和为\(\gamma=\frac{2}{||w||}\),这被称为间隔

间隔越大意味着分类边界距离两类样本尽可能远,换言之,对于噪声和异常点更鲁棒,因此间隔越大表示分类器效果越好


如果直接最小化分类错误,那么可能存在无数个解(例如超平面稍微平移仍然能分类正确),但通过最大化间隔,可以将问题转化为一个凸优化问题,其解唯一且全局最优
要找到具有“最大间隔”的划分超平面,即是要求解优化问题:

\[\begin{equation} \begin{aligned} & \max_{\boldsymbol{w}, b} \frac{2}{||\boldsymbol{w}||} \\ & \text{s.t. } y_i(\boldsymbol{w}^\mathrm{T} \boldsymbol{x}_i + b) \geq 1, \quad i = 1, 2, \ldots, m. \end{aligned} \tag{} \end{equation} \]

优化问题的约束实际上就是要求分类正确


这个优化问题等价于

\[\begin{equation} \begin{aligned} & \min_{\boldsymbol{w}, b} \frac{1}{2}||\boldsymbol{w}||^2 \\ & \text{s.t. } y_i(\boldsymbol{w}^\mathrm{T} \boldsymbol{x}_i + b) \geq 1, \quad i = 1, 2, \ldots, m. \end{aligned} \tag{} \end{equation} \]


之所以是大于等于1,一方面是可以固定函数间隔的尺度,从而将问题转化为一个凸优化问题;若约束为\(\geq 0\),那么等价的优化目标\({||\boldsymbol{w}||}\)可能会趋于无穷大从而失去意义
同时支持向量是距离超平面最近的样本点,它们决定了分隔的边界,约束\(y_i(\boldsymbol{w}^T\boldsymbol{x}_i+b)=1\)明确界定了这些关键点,若约束修改为=0,那么支持向量的定义会变得模糊,无法有效分离数据,同时间隔的宽度无法明确计算


对这个优化问题使用拉格朗日乘子法以得到对偶问题
具体来说,对上式的每条约束添加拉格朗日乘子 \(\alpha_i \geq 0\),则该问题的拉格朗日函数可写为
\( L(\boldsymbol{w}, b, \boldsymbol{\alpha}) = \frac{1}{2} \|\boldsymbol{w}\|^2 + \sum_{i=1}^{m} \alpha_i \left( 1 - y_i (\boldsymbol{w}^\mathrm{T} \boldsymbol{x}_i + b) \right)\),其中 \(\boldsymbol{\alpha} = (\alpha_1; \alpha_2; \ldots; \alpha_m)\)

\(L(\boldsymbol{w}, b, \boldsymbol{\alpha})\)\(\boldsymbol{w}\)\(b\) 的偏导为零可得
\(\boldsymbol{w} = \sum_{i=1}^{m} \alpha_i y_i \boldsymbol{x}_i,\)
\(0 = \sum_{i=1}^{m} \alpha_i y_i.\)

将求解的结果带入,就能将 \(L(\boldsymbol{w}, b, \boldsymbol{\alpha})\) 中的 \(\boldsymbol{w}\)\(b\)消去,再考虑约束,有:

\[\max_{\boldsymbol{\alpha}} \sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j \boldsymbol{x}_i^\mathrm{T} \boldsymbol{x}_j \]

\[s.t. \sum_{i=1}^{m} \alpha_i y_i = 0, \alpha_i \geq 0, \quad i = 1, 2, \ldots, m. \]

解出\(\boldsymbol{\alpha}\)后,再求出\(\boldsymbol{w}\)\(b\)即可得到模型\(f(\boldsymbol{x}) = \boldsymbol{w}^\mathrm{T} \boldsymbol{x} + b = \sum_{i=1}^{m} \alpha_i y_i \boldsymbol{x}_i^\mathrm{T} \boldsymbol{x} + b\)

因为原式中有不等式约束,因此要满足KKT条件,即满足\(\begin{cases} \alpha_i \geq 0; \\ y_i f(\boldsymbol{x}_i) - 1 \geq 0; \\ \alpha_i (y_i f(\boldsymbol{x}_i) - 1) = 0. \end{cases}\)

由第三项约束可知,对于任意训练样本\((\boldsymbol{x}_i,y_i)\),总有\(\alpha_i=0\)\(y_if(\boldsymbol{x}_i)=1\),若\(\alpha_i=0\),那么该样本并不会对模型产生影响,因此支持向量机有一个重要性质:训练完成后,大部份的训练样本都不需要保留,最终模型仅与支持向量有关


为了求解对偶问题,鉴于直接求解二次规划问题带来的较高计算开销,需要引入一些其他的算法,例如SMO

对偶问题是要求在线性约束下,最大化一个二次函数(自变量为alpha)
SMO的想法就是将大规模的二次规划问题拆分成若干个小规模的二次规划问题,基本思路是先固定\(\alpha_i\)之外的所有参数,然后求\(\alpha_i\)上的极值。由于存在约束\(\sum_{i=1}^{m} \alpha_i y_i = 0\),若固定\(\alpha_i\)之外的其他变量,则\(\alpha_i\)可由其他变量导出。于是,SMO 每次选择两个变量\(\alpha_i\)\(\alpha_j\),并固定其他参数。这样,在参数初始化后,SMO 不断执行如下两个步骤直至收敛:

  • 选取一对需更新的变量\(alpha_i\)\(alpha_j\);
  • 固定\(\alpha_i\)\(\alpha_j\)以外的参数,求解对偶式获得更新后的\(\alpha_i\)\(\alpha_j\)

注意到只需选取的\(\alpha_i\)\(\alpha_j\)中有一个不满足 KKT 条件,目标函数将会在迭代后减小

  • SVM的对偶问题是一个凸二次规划问题,这意味着任何局部最优解也是全局最优解。因此,通过每次优化两个变量,SMO算法可以逐步逼近全局最优解。
  • KKT(Karush-Kuhn-Tucker)条件是优化问题中的一组必要条件,用于判断一个点是否为最优解。
  • 违反KKT条件的乘子意味着当前解不是最优解,因此,通过优化这些乘子,可以使得目标函数值更接近最优值。
  • 于是在选择的时候,先选择一个违背KKT条件的因子,再选择第二个能够使目标函数变化量最大的因子

直观来看,KKT 条件违背的程度越大,则变量更新后可能导致的目标函数值减幅越大。
于是,SMO 先选取违背 KKT 条件程度最大的变量。第二个变量应选择一个使目标函数值减小最优的变量,但由于比较各变量所对应的目标函数值减幅的复杂度过高,因此 SMO 采用了一个启发式:使选取的两变量所对应样本之间的间隔最大。一种直观的解释是,这样的两个变量有很大的差别,与对两个相似的变量进行更新相比,对它们进行更新会带给目标函数值更大的变化。

SMO 算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说,仅考虑\(\alpha_i\)\(\alpha_j\)时,对偶问题中的约束可重写为
\(\alpha_i y_i + \alpha_j y_j = c, \quad \alpha_i \geq 0, \quad \alpha_j \geq 0\)
其中\(c = -\sum_{k \neq i,j} \alpha_k y_k\)是使\(\sum_{i=1}^{m} \alpha_i y_i = 0\)成立的常数。用\(\alpha_i y_i + \alpha_j y_j = c\)
此时消去式中的变量\(\alpha_j\),则得到一个关于\(\alpha_i\)的单变量二次规划问题,这样的问题有闭式解,可高效计算

核函数

通过引入核函数,使得支持向量机能解决更广泛的问题
核支持向量机的想法是,将样本从原始空间映射到一个更高维到特征空间,使得样本在这个特征空间内线性可分,如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分

\(\phi(\boldsymbol{x})\)表示将\(\boldsymbol{x}\)映射后的特征向量,由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算\(\phi(x_i)^\top \phi(x_j)\)通常是困难的。为了避开这个障碍,可以设想这样一个函数:

\[\kappa(x_i, x_j) = \langle \phi(x_i), \phi(x_j) \rangle = \phi(x_i)^\top \phi(x_j) \]

\(x_i\)\(x_j\)在特征空间的内积等于它们在原始样本空间中通过函数\(\kappa(\cdot, \cdot)\)计算的结果。有了这样的函数,我们就不必直接去计算高维甚至无穷维特征空间中的内积,于是可重写为

\[\begin{align*} \max_\alpha & \sum_{i=1}^{m} \alpha_i - \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_i \alpha_j y_i y_j \kappa(x_i, x_j) \\ \text{s.t.} & \sum_{i=1}^{m} \alpha_i y_i = 0, \\ & \alpha_i \geq 0, \quad i = 1, 2, \ldots, m. \end{align*} \]

求解后即可得到

\[\begin{align*} f(x) &= w^\top \phi(x) + b \\ &= \sum_{i=1}^{m} \alpha_i y_i \phi(x_i)^\top \phi(x) + b \\ &= \sum_{i=1}^{m} \alpha_i y_i \kappa(x, x_i) + b. \end{align*} \]

这被称为核技巧,上式表明模型最优解可通过训练样本的核函数展开
image

软间隔

之前的方法都是假定训练样本在样本空间或特征空间中是线性可分的,但这个假设显然不会一直成立

缓解该问题的方法就是允许支持向量机在一些样本上出错,也就是软间隔
自然,在最大化间隔的同时,不满足约束的样本应尽可能少,于是优化目标可写为
image
这就是常用的软间隔支持向量机

image

半监督SVM

在不考虑标记样本时,支持向量机试图找到最大间隔划分超平面,而在考虑标记样本时,支持向量机试图将两类有标记样本分开,且穿过数据低密度区域的划分超平面

比较经典的是TSVM,这是一个针对二分类问题的学习方法;TSVM试图考虑对未标记样本进行各种可能的标记指派,即尝试将每个未标记样本分别作为正例或反例,然后在这个标记完毕的样本上寻求间隔最大的划分超平面,一旦划分超平面确定,未标记样本的最终标记指派就是其预测结果
image
image
image

posted @ 2025-04-10 14:28  rdcamelot  阅读(69)  评论(0)    收藏  举报