【举个栗子】我对支持向量机的理解
线性分类器都是在样本空间中寻找一个超平面来将不同类别的样本分开,比如感知机的决策平面\(w^Tx=0\),Logistic回归\(z=w^Tx+b=0\)。对于决策平面的选择一般是选择“正中间的”,与两边两个类的距离尽可能大,这样模型泛化能力强,从而有了“最大间隔”这个概念。
支持向量机模型的超平面方程是\(w^Tx+b=0\),当\(w^Tx_i+b>=+1\),\(y_i=+1\),当\(w^Tx_i+b<=-1\),\(y_i=-1\)。距离超平面最近的几个样本点使等号成立,被称为支持向量,两个异类支持向量到超平面的距离之和为\(\frac{2}{\omega}\)。
支持向量机基本型就是一个优化问题:
写成最小化的样子:
求解(2)式就可以得到我们想要的最大划分间隔的超平面\(f(x)=w^Tx+b\)。
支持向量机的模型是简单的,主要难在求解方式上。(2)式是凸优化问题,可以使用传统优化方法来求,但是还有更高效的方法。
(2)式是带不等式约束条件的优化问题,使用到KKT条件。凸优化问题中,KKT条件就是全局最小值的充要条件。定义拉格朗日函数为:
那么\(w^{\star}\)和\(b^{\star}\)是极小值点且有唯一\(\alpha^{\star}\)使得:
- \(\triangledown_{\omega}L(\omega^{\star},b^{\star},\alpha^{\star})=0\)
- \(\triangledown_{b}L(\omega^{\star},b^{\star},\alpha^{\star})=0\)
- \(\alpha^{\star} \ge 0\)
- \(\alpha^{\star} (1-y_i(w^{\star T}x_i+b^{\star}))=0\)
观察一下KKT条件的式子,发现模型仅和支持向量有关(满足\(1-y_i(w^{\star T}x_i+b^{\star})=0\))。这就是支持向量机的特性——解的稀疏性。
计算得
需求解出\(\alpha\)来得到极值点的值,考虑(2)式的对偶问题,因为(2)是凸优化问题,所以(2)式的对偶问题的解等于(2)式的解。
将求解出来的(4)、(5)带入拉格朗日函数(3),得到:
则对偶函数\(\Gamma(\omega,b,\alpha)=inf _{x\in D} L(\omega,b,\alpha)\) [1]
问题转化为求 \(\max \limits _{\alpha}\Gamma(\omega,b,\alpha)\):
然后使用二次规划算法求解(7)式,典型的有SMO算法,求解出的\(\alpha^{\star}\)即拉格朗日乘子,相应的就可算出\(\omega^{\star}\),\(b\)。
如果数据集是线性不可分的,即不存在一个能正确划分两类样本的超平面,就需要将样本映射到一个更高维的特征空间。
线性判别分析LDA是少有的降维技术。更多的是升维,因为提升维度后数据变得稀疏,更利于划分超平面。
假设样本\(x\)映射后的向量为\(\phi(x)\),划分超平面为\(f(x)=\omega^T\phi(x)+b\),观察到(7)式变为:
出现了高维向量内积\(\phi (x_i)^T\phi (x_j)\)。直接计算是困难的,解决方法是设计核函数:
已经有Meicer定理证明:若一个对称函数所对应的核矩阵半正定,那么它就可以作为核函数使用。
核函数的计算结果等于高维向量在特征空间的内积。“核函数选择”就成了支持向量机性能的关键,如果映射到了不准确的特征空间,那么支持向量机的效果一定是不理想的。
常见核函数有线性核、多项式核、高斯核、拉普拉斯核、Sigmoid核等,还可通过函数组合得到。
支持向量机的主要过程就是以上几步。后人对这个课题做了很多深入的探讨。
现实中很难确定合适的核函数使得训练样本在特征空间上线性可分,所以允许一些样本不满足约束,切合实际且提高泛化能力,引入“软间隔”。
优化目标转变为:最大间隔的同时,让不满足约束\(y_i(wx_i+b)\ge 1\)的样本尽可能少。
其中0-1损失函数,如果\(1-y_i(wx_i+b)>0\)即\(y_i(wx_i+b)< 1\)那么0-1损失函数值为1,否则为0。反应了不满足约束的样本的个数。但是0-1损失函数非凸,非连续,不易优化。
解决方法是采用替代损失,通常是凸的连续函数,且是0-1损失函数的上界。常见有hinge损失函数、指数损失函数、对率损失函数等。
再引入松弛变量\(\xi\)表征该样本不满足约束\(y_i(wx_i+b)\ge 1\)的程度。
使用替代损失+松弛变量后,问题变为:
可以看到C是一个权重,调和了我们希望取较小值的$ \frac{1}{2}||\omega||^2$和训练集上的误差。前者称为“结构风险”描述模型本身的性质,后者称为“经验风险”描述模型与训练数据的契合度。结构风险有助于降低为了最小化训练误差而过拟合的风险,称为“正则化项”。
总结:支持向量机的建模思路很简单,最大化类间间隔,有点像线性判别分析。但是解决思路不一样,支持向量机将数据映射到高维,寻求超平面,而线性判别分析则是降维。因为模型本身的性质,公式中自带向量内积,从而衍生出在超平面求向量内积的解决方法——核函数。为了模型更能处理实际问题,增加软间隔,引入了替代损失和松弛变量。抛去求解方法以及软间隔这些后续,最朴素的支持向量机模型就是一个不等式约束的优化问题。核方法这个思想在机器学习中非常常见,引入核函数就可以将线性学习器拓展为非线性学习器,比如线性判别分析LDA也有“核化”版的KLDA。
inf是min的严谨写法,对应的还有sup是max的严谨写法 ↩︎