支持向量机求解a使用了SMO算法
SMO(Sequential Minimal Optimization)序列最小优化算法
SMO本质上就是坐标上升法(Coordinate Ascent)
坐标上升法:是每次选取一个参数作为优化参数,并且固定其它参数。
以z = x^2 + y^2+xy为例,
1.开始时先随机给y一个取值,
2.根据y值对x进行优化,
3.然后再根据优化后的x,对y进行优化。
重复上面2,3步骤,可视化结果为下图,可以看到每次只对一个方向进行优化。
SMO与坐标上升法不同的只是SMO采用的方法是每次选择两个优化变量ai与aj,固定其它变量。
求解出更新后的ai与aj之后,再选取另一对优化变量
重复上述操作直至收敛
因为约束条件 = 0的存在,如果我们每次只选择一个优化变量,固定其他变量,优化变量可直接由此约束条件算出,无法实现优化。
这是SMO每次选择两个优化变量的原因。
w的求解:将a带入上篇中使用KTT获取的 w = i=1maiyixi
b的求解:利用支持向量(即求出的ai中)满足yi*f(x)的条件求解b,一般情况下使用所有支持向量算出的b的平均值
即b = 1|S|s∈S(1ys-i∈SaiyixiTxs)
核函数:
之前的讨论我们都默认原样本线性可分,但是在实际情况下原样本可能是线性不可分的,SVM采取的做法是将原样本映射到较高维度的空间,再进行划分.
令$(X)表示将原样本x映射后的特征向量.
则划分其的超平面为f(x) = wT$(x) +b,剩下的步骤与之前讲的一模一样.
但是在求解过程中,涉及到了$(x)T*x,由于原样本被映射到了较高的维度,那么其映射后的特征向量的内积计算量是十分耗时的.
核函数的出现就是为了解决这个问题,
假设核函数为k
则k(xi,xj
) = <$(xi
),$(xj
)> = $xit$(xj)
有了这样的核函数我们在计算时就可以将原样本带入核函数避免了计算映射特征内积.
到此有两个问题.
1.如何才能保证样本映射到高维度空间后线性可分呢.
2.如何选择核函数.
对于第一个问题,直觉告诉我们只要原样本属性有限,必然存在一个高维度特征空间使样本线性可分,
但是我们该如何选择,实际上我们并不需要特别选择一个映射规则,这是我觉得最有意思的地方.
先假设映射后的特征向量为$(x),跟着上篇的步骤解出a后
w = i=1maiyi$(x)i
b =b = 1|S|s∈S(1ys-i∈Saiyi$(x)iT$(x)s)
可以看到b中的x相关的内积运算可以使用核函数
将w与b带入f(x),奇迹诞生
f(x) = wT$x+b = i=1maiyikx,xi+b
这是”支持向量展示”,也就是说之后每次预测都需要带入训练时的信息
以上,化简后w与b中都没有$(x)的相关运算,这也就是说在向高维度映射时我们只需要选择适当的核函数就行了.
核函数的选取对于SVM来说是至关重要的,它决定了映射后的样本在特征空间中是否线性可分.
我们在面对样本时并不知道什么样的核函数是合适的,只能凭经验及尝试选择适合的核函数.
常用核函数包括线性核,多项式核,高斯核,拉普拉斯核,Sigmoid核..(公式太难打)
软间隔,正则化与核方法在下篇记录
个人网站: WaveDeng-Make Some Waves