Python机器学习SVM支持向量机算法理论

2017年7月21日12:17:54 发表评论 3,505

PS:这篇文章讲的是SVM的算法的基础理论知识,因为博主也是刚学习没多久,对SVM的数学思想了解的不是很深,所以这篇文章就简单介绍一下什么是SVM以及SVM是怎么工作的。

1、什么是支持向量机(SVM)

简单来说,SVM是一种用来对数据分类的数学模型深度学习(2012)出现之前,SVM被认为机器学习中近十几年来最成功,表现最好的算法,是图像识别方面的佼佼者。它对数据的分类有两种模式,一种是线性可分割,另一种是线性不可分割的。下面我们来几个例子。

Python机器学习SVM支持向量机算法理论

上面的图片中有两类点,一类是黑色的,另一类是白色的。现在我们要做的是画出一条线,来区分这两类点从图中可以看出,总共是画了三条线,只有粉红色的那条是最完美的。当然咱们这个是在二维的平面上,如果是多维的话那么将是一个超平面。SVM要干的事情就是找到一个超平面(hyper plane)来完美的区分连个类,但从上图我们可以看出,这个平面是不止一个的,多所以我们要找的是最完美的那个超平面。继续看下面的例子。

Python机器学习SVM支持向量机算法理论 Python机器学习SVM支持向量机算法理论

看左边的那种图,同样是两类点加上一条区分的线,不另外还有两根支撑在两点之间的平行线,这两条虚线到中间的线的距离叫做margin,并且左margin和右margin是相等的,从左边的图可以看出,此时的margin是最小的,我们要的不是这种效果,我们要的最完美的超平面是让两边的margin取最大值。看右边的图,这才是我们需要的建立的超平面,让两个margin最大。在图中我们可以看到,左右两条虚线都支撑在两类点上,我们管这几个点叫做支持向量点(support vector)。

2、线性可区分(linear separable)

其实线性可区分我们已经见识过了,上门的几幅图中我们可以卡到,总是可以找到一条线可以区分开两类点。如下图。

Python机器学习SVM支持向量机算法理论

3、数学定义和公式的实现

超平面可以定义为: W·X + b = 0

其中W为weight vector 权重向量 W = {w1,w2,w3,....,wn}, n时候特征的个数

其中X为训练实例

其中b为bias也就是我们常说的截距

现在,我们假设有二维向量X=(x1,x2)

把b想象成二外的 weight

那么超平面的方程将变成: w0 + w1x1 + w2x2 = 0

所有超平面上方的点满足: w0 + w1x1 + w2x2 > 0

所有超平面下方的点满足: w0 + w1x1 + w2x2 < 0

调整weight,使超平面定义边际的两边:

Python机器学习SVM支持向量机算法理论

综合上面的两个式子,可以得到:

Python机器学习SVM支持向量机算法理论

分界的超平面到H1和H2任意一点的距离为 1/||W|| (其中||W||为向量的范数)

具体的求解比较复杂,博主数学功夫不到家,就不献丑了。

4、线性不可区分(linear inseparable)

但是在有些情况下,我们是找不到那么一条直线可以完美的区分两类点的,就像下面的这张图片。

Python机器学习SVM支持向量机算法理论

很明显,区分这两类点的是一个圆而不是一条直线,此时我们应该怎么做呢?

两个步骤来解决:

1 .利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中。
2 .在这个高维度的空间中找一个线性的超平面来根据线性可分的情况处理。


Python机器学习SVM支持向量机算法理论

 

Python机器学习SVM支持向量机算法理论    Python机器学习SVM支持向量机算法理论

5、将低维转化为高维

在这个转换中使用到了核函数,方法也比较巧妙和复杂,具体的转换方法大家可以参考文章http://blog.csdn.net/passball/article/details/7661887/

ps:以上图片引用全部来自网络。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: