本文转载于https://blog.csdn.net/weixin_44010678/article/details/86916842,侵权联系删除
最近完成的一个项目用到了SVM,之前也一直有听说支持向量机,知道它是机器学习中一种非常厉害的算法。利用将近一个星期的时间学习了一下支持向量机,把原理推了一遍,感觉支持向量机确实挺厉害的,尤其是核函数变换可以把一个低维不可分问题转化为高维可分的问题。
需要解决的问题
支持向量机是一种监督学习的方法,主要用来进行分类和回归分析,当我们对一些数据进行分类的时候,可能会考虑以下问题:
- 怎么选择决策边界?什么样的决策边界最好?
- 目标函数如何求解?
- 对于线性不可分的问题该用何种方法来解决。
解决问题流程
- 选取决策边界(选取出最好的决策边界)
- 列目标函数
- 优化目标函数
- 求解优化目标(利用拉格朗日乘子法)
- 软间隔问题的解决(解决离群点)
- 核函数变换
决策边界的选择
Step1
当我们拿到一些简单的线性可分的数据的时候,如下图,将两类数据分类的决策边界有n条直线(图中显示了三条),那么哪一个决策边界才是最好的呢。
直觉告诉我:中间的那一条边界是最好的,而实际也的确如此:
举个简单的栗子:
两侧的数据就好比是两边是河,我们肯定希望可以走的地方越宽越好,这样掉入河里的几率就降低了。
所以我们选择的决策边界是:选出来离河岸最远的(河岸就是边界上的点,要Large Margin),第二个肯定比第一个效果好。
好了,知道要选择什么样的边界之后,接下来就是要求解边界了。
我们希望找到离决策边界最近的点,这样就找到了决策边界。
所以,假设决策边界是一个阴影平面,求点到平面的距离转换成点到点的距离,然后再垂直方向上的投影。大概的模型如下图:
x为一个点,面的方程可以用线性方程来描述:
其中w为法向量,决定了超平面的方向,b为位移量,决定了超平面与原点的距离。(学过高数几何那一部分的应该都看的懂)
接下来就是算一下x到平面的距离。假设平面上有两点x’,x’’,那么则有:
W
T
x
′
+
b
=
0
W
T
x
′
+
b
=
0
W
T
x
′
+
b
=
0
WTx′+b=0WTx′+b=0 W^Tx'+b=0
WTx′+b=0WTx′+b=0WTx′+b=0(4+10+18)2=1024
这种计算方法要比刚才的计算方法简单很多吧
这也是一个非常重要的特性。在支持向量机中,虽然说是映射到高维空间中去求内积,但是实际中计算的时候并没有在高维度下计算。只是假设映射到了高维空间,但实际上要的是计算的结果,这个结果在低维空间中计算就可以,然后把这个值映射到高维空间。
所以核函数把高维空间的计算转换为低维空间中计算,实际并没有映射到高维空间中去。
从低维到高维需要的这个映射就是核函数,那么核函数怎么来指定呢?
常用的核函数是高斯核函数(也称径向基 (RBF) 函数,是常用的一种核函数。它可以将有限维数据映射到高维空间)。
在机器中的效果如下:
线性核函数:
高斯核函数:
</div>