支持向量机(SVM)算法推导
概述
支持向量机模型是一种经典的二分类模型(通过额外处理也可以得到多分类模型),可以理解为在特征空间中去寻找一个超平面,这个平面离所分类的特征距离最远。
推导
Hard-Margin SVM
假设有目标二分类别y(1,-1),它的特征向量为X(x1,x2,x3…xn),特征与类别之间线性相关。给每个特征赋权重值Wi,WTX大于等于0时y为1,反之为-1。超平面的最大边界我们称为margin,所以可以得到目标函数:
margin是点到平面的距离,需要使用点到壁面距离公式:
上述公式b为线性函数的截距。此时目标函数可以转化为:
上述目标函数我们仍热没办法求解,所以我们假设WTXn+b是大于某一数值A的(因为是线性函数,肯定可以找到大于A的情况),此时
m
a
r
g
i
n
(
b
,
w
)
=
A
/
∣
∣
W
∣
∣
margin(b,w)=A/||W||
margin(b,w)=A/∣∣W∣∣
那么目标函数就转化为:
max
b
,
w
A
/
∣
∣
W
∣
∣
\max_{b,w} A /||W||
b,wmaxA/∣∣W∣∣
s
t
.
y
n
(
W
T
x
n
+
b
)
>
=
A
st.y_n(W^Tx_n+b)>=A
st.yn(WTxn+b)>=A
A可以理解为一个超参数,A越大SVM模型的条件越苛刻,margin的范围越大,这里先假设A为1,这样就得到了经典的SVM目标函数:
这个地方可以理解为L1正则和误差函数的结合,为了后面优化方便,将上述目标函数转化为:
该目标函数的优化问题是二次规划问题,可以直接调用二次规划的工具包进行求解。
Soft-Margin SVM
上述推导得到目标函数的限制条件是很严格,它表示模型不可以犯任何错误,这个在实际中是很难得到的,因为在收集数据的过程中多少会夹带一些噪声数据。这时我们可以将上述目标函数转化为:
公式中的Zn表示特征向量X的高纬特征,此时,我们是允许模型犯一些错误的,但是错误要压缩在小范围内。并且错误率也变成了我们需要求解的目标参数。
对偶问题
上述的推导过程是基于类别之间是线性可分的,但是实际上现实生活中很多问题都不是线性可分,大多数要借助于非线性分类模型。SVM中可以采用比较暴力的方法直接增加特征的组合以达到非线性的效果。但是这样必然会导致模型参数训练复杂,耗费大量时间和资源。而kernel trick方法可以很好地解决这个问题,可以在原始线性分类时间复杂度下完成非线性的分类效果。
我们以Hard-Margin SVM为例,首先使用拉格朗日方法将svm原始问题的限制条件和目标函数进行耦合得到:
此时我们的目标函数变为:
接着我们将这个优化问题的min和max颠倒,得到:
这部分的转化数学比较复杂,暂时我们先这么用吧。由于上面的函数是一个凸函数,我们的最优解会出现在参数偏导为0的的地方,即:
将这两个公式带入原问题中得到SVM的对偶问题:
总结
上面是对SVM算法的简单推导,时间有限我就不展开讨论了。文章参考了台大的机器学习技法视频课程,有兴趣的小伙伴可以自行观看学习。
B站视频连接: 机器学习技法