svm算法

前言

有些算法书写的很白痴,或者翻译的很白痴。我一直认为算法本身并不是不容易理解的,只不过学究们总是喜欢用象牙塔的语言来表述那些让人匪夷所思般的概念。如果按照软件互联网化的发展思路来说,这是软件设计的初始阶段,不会考虑用户体验问题。就好像写论文一定不能口语化一样,感觉这是很愚蠢的事情,能把一个看似很复杂的事情讲得很简单,这是一种能力。就好像微博里传的,阿里前CTO王坚就能让白云都能理解技术一般,牛吧。俗话说的好,这就是干货。

回到正题,今天来简单谈一下SVM算法:

 SVM算法(支持向量机)是分类算法中比较活跃的一支。SVM(Support Vector Machine)这个名字翻译成中文很奇怪:就叫支持向量机,感觉上很难理解, 好歹其它的分类算法:贝叶斯、费舍尔 都是以人名命名,也很容易理解。而SVM这个名字的中文译法完全相当光怪陆离。

提到SVM,一般都从线性分类开始说起,因为SVM本身就从属于线性分类。

一、线性分类

 

1.1 什么是线性分类

线性分类的理解,可以简单地通过画一张图来表示:

技术分享

 

选取点M属于哪个类别的方式有许多种:

  1. 计算点M与每个分类的均值点的距离,然后从中选取距离较短者

  2. 使用向量和点积

  3. 核方法

第一种方式很容易理解,不提。 先来简单看看第二种方法,向量点积运算。

1.2 点积

上图中,红色的点称为“中心点”,

两个向量a = [a1, a2,…, an],b = [b1, b2,…, bn],它们的点积定义为:

a·b=a1b1+a2b2+……+anbn

 

点积的物理意义在于:如果点积越大,说明向量之间的夹角越小。如果点积为负,那么两向量夹角大于90度,如果点积为正,那么两向量夹角小于90度。

回到上图,我们知道,点M到两个类别中心点(A-B的中心点C), MC ,AB两个向量之间的夹角小于90度,因而点M更趋近于类别A(相匹配)。

 

技术分享

 

1.3 核方法

技术分享

 

如果上图中,眼尖的人可能注意到了,两个圈子,两个类别,但是它们的中心点刚好在同一个,那么上面的方法显然不行了。

 肿么办?

 

思路:坐标变换。(比如:线性=>平方,二维=>三维)这时候,“核方法”出场了。简单来说,就是使用一个新的函数来代替点积函数,常用的一种方法有:径向基函数(Radial Basis Function,简称:RBF)。

径向基函数  vs 点积

 其数学公式简单的提一下,一笔带过,简单地理解就是,已经两个特征向量(样本集),可以得到这两个特征向量的某种类似点积般的关系:

技术分享

 要注意的地方是,

  1. 它是非线性函数

  2. 如同点积般的关系

  3. K值介于0和1之间

 

线性  vs 非线性

上面讲到的线性分类器是线性关系的,但径向基函数是非线性的.

 

均值  vs 均值 

 

原先的线性分类的均值思路:是先求两分类的均值点,再求出中两分类的中心点,然后求向量点积。

核方法采用的均值思路:计算出某个坐标点与分类中其余每个坐标点之间的径向基函数,然后求其均值。

 

其它核函数

技术分享

目标:是寻找一条尽可能远离所有分类的线。刚好各种分类不落在这条线上。这条线被称为最大间隔超平面(max-margin hyperplane)。注意名字,故名思义一下,最大间隔。。。怎么找该分割线呢?

 

先寻找一对贴近各自分类点的平行线(注意,上图虽然是直线,但真实情况并不都是直线),并且尽可能地远离分界线。对于新数据坐标点,判断该点落在线的哪一边,即属于该分类。(可以使用核方法来判断)。位于该分界线附近的坐标点,我们称为支持向量(support vectors)。其实这个名字翻译的真的很恶心,如果我自己翻译,我会译为辅助向量。因为这些个向量的作用只是为了用来辅助寻找最大间隔超平面的。

 

三、SVM的常见应用

  1. 面部表情分类

  2. 军事数据侦测入侵者

  3. 蛋白质序列预测蛋白质结构

  4. 笔迹识别

  5. 地震危害检查

本文转载自:http://mp.weixin.qq.com/s?__biz=MzA3NDA1MzQwOQ==&mid=200019792&idx=1&sn=faedeaac801b210eb8b418df546ef9de&3rd=MzA3MDU4NTYzMw==&scene=6#rd

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。