跳转到主要内容

机器学习之支持向量机算法(二)

demi 提交于

<font color="#c200ff"><strong>五、SVM求解实例</strong></font>

之前其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值。数据:3个点,其中正例 X<sub>1</sub>(3,3) ,X<sub>2</sub>(4,3) ,负例 X<sub>3</sub>(1,1) 如下图所示

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

我们需要求解下式的极小值

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

注意约束条件(在这里不要忘记了 y<sub>i</sub> 代表的是数据的类别,+1代表正例,-1代表负例)

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

代入数据,通过化简可以得到如下约束条件的表达式。

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

将数据代入上式得到

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

由于 α<sub>1</sub> + α<sub>2</sub> - α<sub>3</sub> = 0 -&gt; α<sub>1</sub> + α<sub>2</sub> = α<sub>3</sub>;化简可得:

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

分别对 α<sub>1</sub> 和 α<sub>2</sub> 求偏导,偏导等于0可得: α<sub>1</sub> = 1.5,α<sub>2</sub> = -1(并不满足约束条件αi &gt; = 0,i = 1, 2, 3 )所以这时求出来的 α 的值是无效的,那这个时候α的解应在边界上,也就是说要么 α<sub>1</sub> = 0,要么 α<sub>2</sub> = 0,再代入上式然后求偏导看下

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

(这儿经过我的计算发现 α<sub>2</sub>似乎等于正的2/13,应该是教程有些小问题,猜测可能是上式由 α<sub>1</sub> + α<sub>2</sub> = α<sub>3</sub> 化简这儿出了点小问题,但是对于答案似乎影响不大) ,所以经过计算最小值在(0.25,0,0.25)处取得 。

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

上面的平面方程其实就是代表直线方程,也就是决策边界的方程。

<font color="#c200ff"><strong>六、支持向量机?</strong></font>

为什么会取支持向量机这样一个名字呢?

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

我们可以发现决策边界只与α不等零的有关系,因为w=αiyi的累加和,所以α为0的点不起作用。

可以得出所有边界上的点α值必然不等于0,也称作支持向量,所有非边界上的点α值必等于0,也称作非支持向量。支持向量机中的机指的就是决策边界,而决策边界就是由支持向量所支撑的,支持向量就是边界点α值不为0的点,决定边界。如下图所示当取60个样本点和120个样本点时,只要添加的不是边界上的样本点,那么决策边界就是不变的。

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

<font color="#c200ff"><strong>七、软间隔 </strong></font>

软间隔:有时候数据中有一些噪音点,如果考虑它们的话那咱们的决策边界线就不太好界定了,之前的方法要求把两类点完全分得开,这个要求有点过于严格了,我们来放松一点!

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

为了解决该问题,引入松弛因子ξ

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

那我们就有了新的目标函数:

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

当C趋近于很大时,要使得整体很小的话,那么意味着松弛因子ξ就会很小,那就意味着分类严格不能有错误。当C趋近于很小时,要使得整体很小的话,那就意味着松弛因子ξ可以稍微大一些,那就意味着可以有更大的错误容忍。C是我们实际在编程中需要指定的一个参数!下面是多了一个松弛因子ξ下的拉格朗日乘子法,基本上和上面差不多的。

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

<font color="#c200ff"><strong>八、核变换</strong></font>

将低维不可分问题(一般就是非线性支持向量机问题)映射为空间中的高维可分问题,这就是核变换。上面我们提到了这个函数Φ(X) ,那这个函数的意思就是代表一种核变换的方法。如下图在二维平面下分类很困难,但是如果将数据映射到3为空间,那这样就很好划分了。

<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

还是先从一个小例子来阐述问题。假设我们有俩个数据,x = ( x<sub>1</sub>, x<sub>2</sub>, x<sub>3</sub> ),y = ( y<sub>1</sub>, y<sub>2</sub>, y<sub>2</sub> ),此时在3D空间已经不能对其进行线性划分了,那么我们通过一个函数 Φ(X) 将数据映射到更高维的空间,比如9维的话,那么 f(x) = (x<sub>1</sub>x<sub>1</sub>, x<sub>1</sub>x<sub>2</sub>, x<sub>1</sub>x<sub>3</sub>, x<sub>2</sub>x<sub>1</sub>, x<sub>2</sub>x<sub>2</sub>, x<sub>2</sub>x<sub>3</sub>, x<sub>3</sub>x<sub>1</sub>, x<sub>3</sub>x<sub>2</sub>, x<sub>3</sub>x<sub>3</sub> ),由于需要计算内积,所以在新的数据在9维空间,需要计算 &lt;f(x),f(y)&gt; 的内积,需要花费时间 O(n<sup>2</sup>) 。

在具体点,令 x = ( 1, 2, 3 ),y = ( 4, 5, 6 ),那么 f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9 ),f(y) = (16,20,24,20,25,36,24,30,36),此时 &lt;f(x),f(y)&gt; =16+40+72+40+100+180+72+180+324=1024。似乎还能计算,但是如果将维数扩大到一个非常大数时候,计算起来可就不是一丁点问题了。

但是发现,K(x,y) = ( &lt;x,y&gt; )<sup>2</sup>,K( x , y ) = ( 4 + 40 + 18 )2 = 32<sup>2</sup> = 1024。俩者相等,K( x , y ) = ( &lt;x,y&gt; )<sup>2</sup>=&lt;f(x),f(y)&gt; ,但是 K( x , y ) 计算起来却比 &lt;f(x) , f(y)&gt; 简单的多,也就是说只要用 K( x , y ) 来计算,效果和 &lt;f(x) , f(y)&gt; 一样的,但是计算效率却大幅度提高了,如:K( x , y ) 的计算时间是 O(n),而 &lt;f(x) , f(y)&gt; 的计算时间是 O(n<sup>2</sup>)。所以使用核函数的好处就是,可以在一个低维空间去完成高纬度(或者无限维度)样本内积的计算(意思就是实际上并没有把数据映射到高维空间去,只是一个假设),比如 K( x , y ) = (4+10+18)<sup>2</sup>的3D空间对比 &lt;f(x) , f(y)&gt; = 16 + 40 + 72 + 40 + 100 + 180 + 72 + 180 + 324 的9D空间。

下面了解一下高斯核函数对非线性数据(对于线性数据的话有线性核函数)的分类问题,如图所示:

<img src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>
<img width="600" src="http://imgtec.eetrend.com/files/2019-11/%E5%8D%9A%E5%AE%A2/100046251-85…; alt=""><br>

<font color="#c200ff"><strong>九、总结</strong></font>

这次学习了支持向量机算法,其实对于所有的机器学习算法来讲,首先要了解它的物理含义,也就是它要解决的问题是什么,然后根据这个问题进行一步步的学习,最后得出最终的结论。就支持向量机而言,我们首先学习了点到平面的距离的计算,然后根据距离引出了如何算出这个距离最大的这样的一个表达式,然后就有了拉格朗日乘子法以及KKT性质,然后通过一个例子具体的算出来了决策边界的方程。在这其中,还引出了为什么会有支持向量机(α等于0与不等0的区别)这么个叫法,然后还有软间隔和松弛因子ξ的问题,最后还了解了使用核函数 Φ( X ) 变换来解决低维不可分的问题。

本文转自:博客园 - <a href="https://www.cnblogs.com/xiaoyh/p/11483923.html"&gt;|旧市拾荒|</a>,转载此文目的在于传递更多信息,版权归原作者所有。