支持向量机核心内容

支持向量机的学习路线:从回归问题到二分类问题,最大化间隔,max 1/||w||,min ||w||2/2,拉格朗日对偶问题,KKT条件,SMO算法,软间隔。

1. 从线性回归到支持向量机

线性回归很简单:

给定一系列(x,y),求线性函数f(x) = w*x + b,使得min Σ(f(x) - y)^2

如果y不是连续值,而是离散的分类结果,该怎么处理?特别的,在二分类问题中该怎么处理?简单,将连续的y转化为离散的-1和1就行了。
转换方法有很多,比如最简单的:

g = -1 if y <0
g = 1 if y≥ 0

为了方便以后求导,这里用logistic函数进行转换,这里记作g(y)。logistic函数的形状可以参考这里。模型变为:

给定一系列(x,y),求线性函数f(x) = w*x + b,使得min Σ(g(f(x)) - y)^2

但是Σ(g(f(x)) - y)^2 没有简单的方法去求解,所以我们换个方法,使用另外一个损失函数,将优化问题改为“最大化间隔”,详情可以参考这里,求解模型变为:

给定一系列(x,y),求线性函数f(x) = w*x + b,使得
max d
s.t. d ≤ y*f(x)/||w||
y*f(x)称为函数间隔,y*f(x)/||w||称为几何间隔。

||w||是w的L2范数,也就是常说的欧式空间几何长度,详细解释可以参考这里。修改后的模型称为支持向量机。

2. 模型转换

首先将问题中的中间变量d消除,令d = c/||w||,则问题变为

给定一系列(x,y),求线性函数f(x) = w*x + b,使得
max c/||w||
s.t. y*f(x) ≥ c

f(x) = w*x+b与||w||可以进行等比例缩放,因此问题可以变为:

max 1/||w||
s.t. y*f(x) ≥ 1

将||w||的平方根消除,对目标函数做点小变换,问题转为:

min w^2/2
s.t. y*f(x) ≥ 1

这个时候已经可以用非线性规划的工具去求解了。

3. 拉格朗日对偶问题

接下来就是非常tricky的部分了。首先将问题转化为拉格朗日对偶问题,然后用SMO算法可以快速求解。为嘛转换为拉格朗日对偶问题?除了方便求解外,还有一个原因:有的时候我们没有办法用线性函数来进行分类(即f(x)是非线性函数),我们得使用核函数来进行处理,这种处理方法是基于拉格朗日对偶问题转换后的形式进行操作的。
首先,原问题的拉格朗日函数为L = w2/2 + Σλ*(1-y*f) ,通过KKT我们将问题转化为:

L’ = 0
y*f ≥ 1
λ*(y*f - 1) = 0
λ ≥ 0

其中:

L’|w = 0 => w = Σλyx
L’|b = 0 => Σλy = 0

然后可以得到 L = Σ i λ i ( Σ i , j λ i λ j x i x j ) ) / 2 ,顺利把w和b都消除掉了~并且有

L’|λ = 0
λ ≥ 0

上面的条件可以转化为求解一个最大化优化问题:

max L(λ)
s.t. λ ≥ 0

至于为什么可以这么转化,具体可以参考这里

4. SMO:针对支持向量机的快速求解方法

1998年,Microsoft Research的John C. Platt在论文中提出针对上述问题的解法:SMO算法,它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。简单来说,步骤是:
循环执行下述步骤:
(1) 选取两个 λ i λ j (可以选择违反KKT条件最严重的,也可以选择距离最大的)
(2) 求解问题:
max L ( λ i , λ j )
s.t. Σ λ y = 0
直到L无法再优化。具体的推导和步骤还可以参考这里

5. 核函数

当遇到线性不可分的问题时,我们可以简单的用一个新的一次变量代替高次变量,这样相当于把低维的特征空间映射到高维空间。
比如说 y = x + x 2 就可以用 y = x 1 + x 2 代替,其中 x 1 = x x 2 = x 2 ,特征空间由一维的 [ x ] 变为了二维的 [ x 1 , x 2 ] 。定义一个非线性映射: φ ( x ) ,比如说上面例子里面 φ ( x ) = [ x , x 2 ] ,我们可以对(φ(x),y)使用支持向量机。将决策规则中的 f ( t ) w φ ( t ) + b 改为 f ( t ) = w y φ ( x ) , φ ( t ) + b (这里x,y都是已知的训练数据点,t是预测用的特征数据),则 L ( λ ) = Σ i λ i ( Σ i , j λ i λ j y i y j x i , x j ) ) / 2
为避免爆炸性的计算,定义核函数 K ( x , z ) = φ ( x ) , φ ( z ) 为计算两个向量在隐式映射过后的空间中的内积的函数,得到 L ( λ ) = Σ i λ i ( Σ i , j λ i λ j y i y j K ( x i , x j ) ) / 2 。我们其实并不需要内积展开的显式结构,只需要有不同x下的内积的值就行了,因此使用核函数的形式事先在低维上进行计算,而将实质上的分类效果表现在了高维上。

6. 软间隔和正则化

有的时候问题不一定是完全线性可分的,这时候需要引入软间隔的概念,以允许一些出错的样本。其实就是引入罚函数,目标函数变为min | | w | | 2 / 2 + C Σ i l ( y i f ( x i ) ) l 函数常见的有0/1损失、hinge损失、指数损失、对率损失等。特别的,使用hinge函数 l ( z ) = m a x ( 0 , 1 z ) ,得到的对偶问题比硬间隔的对偶问题只有唯一的约束条件差别: 0 λ C
更一般的,目标函数可以表示为min Ω ( f ) + C Σ i l ( y i , f ( x i ) ) ,前面的部分称为结构风险,也可以称作正则化项,后面的称为经验风险,C是罚函数,也称为正则化常数。正则化项常常使用 L p 范数。

7. 从支持向量机到线性回归

支持向量回归(SVR)和一般的回归模型的差别就是目标函数不同:min | | w | | 2 / 2 + C Σ i l ( f ( x i ) y i ) 。另外,和第1节相反,在判断的时候直接使用 f ( x ) 就行,不需要再加上额外的函数 g 了。
使用支持向量回归的好处在于,求解的结果具有稀疏性,最终的 f 仅仅由少数几个支持向量就可以决定。

猜你喜欢

转载自blog.csdn.net/kittyzc/article/details/81872025