支持向量机的学习路线:从回归问题到二分类问题,最大化间隔,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
然后可以得到 ,顺利把w和b都消除掉了~并且有
L’|λ = 0
λ ≥ 0
上面的条件可以转化为求解一个最大化优化问题:
max L(λ)
s.t. λ ≥ 0
至于为什么可以这么转化,具体可以参考这里
4. SMO:针对支持向量机的快速求解方法
1998年,Microsoft Research的John C. Platt在论文中提出针对上述问题的解法:SMO算法,它很快便成为最快的二次规划优化算法,特别是在针对线性SVM和数据稀疏时性能更优。简单来说,步骤是:
循环执行下述步骤:
(1) 选取两个
和
(可以选择违反KKT条件最严重的,也可以选择距离最大的)
(2) 求解问题:
max
s.t.
直到L无法再优化。具体的推导和步骤还可以参考这里。
5. 核函数
当遇到线性不可分的问题时,我们可以简单的用一个新的一次变量代替高次变量,这样相当于把低维的特征空间映射到高维空间。
比如说
就可以用
代替,其中
,特征空间由一维的
变为了二维的
。定义一个非线性映射:
,比如说上面例子里面
,我们可以对(φ(x),y)使用支持向量机。将决策规则中的
从
改为
(这里x,y都是已知的训练数据点,t是预测用的特征数据),则
。
为避免爆炸性的计算,定义核函数
为计算两个向量在隐式映射过后的空间中的内积的函数,得到
。我们其实并不需要内积展开的显式结构,只需要有不同x下的内积的值就行了,因此使用核函数的形式事先在低维上进行计算,而将实质上的分类效果表现在了高维上。
6. 软间隔和正则化
有的时候问题不一定是完全线性可分的,这时候需要引入软间隔的概念,以允许一些出错的样本。其实就是引入罚函数,目标函数变为min
。
函数常见的有0/1损失、hinge损失、指数损失、对率损失等。特别的,使用hinge函数
,得到的对偶问题比硬间隔的对偶问题只有唯一的约束条件差别:
。
更一般的,目标函数可以表示为min
,前面的部分称为结构风险,也可以称作正则化项,后面的称为经验风险,C是罚函数,也称为正则化常数。正则化项常常使用
范数。
7. 从支持向量机到线性回归
支持向量回归(SVR)和一般的回归模型的差别就是目标函数不同:min
。另外,和第1节相反,在判断的时候直接使用
就行,不需要再加上额外的函数
了。
使用支持向量回归的好处在于,求解的结果具有稀疏性,最终的
仅仅由少数几个支持向量就可以决定。