SVM算法 由浅入深的尝试(一)

FOREWORDS

SVM,全称Support Vector Machine,也就是支持向量机。
SVM可以说是目前最受欢迎的机器学习模型,对于线性分类/非线性分类都有非常强大的适应能力。

本文是进阶文,为了不浪费大家的时间,读之前请问自己以下几个问题:
"What is data classification? "
"Why do we use it?" --- stupid question, aha?
"What is perceptron?" --- not details needed, just conception.(very important!)

IF 以上的问题,你还无法给自己一个答案:
        All right,请继续努力,对于机器学习/数据挖掘来说,所有人都需要一个过程,时间会给你答案。对于我的菜鸟经历来说,感知机是机器学习分类算法的最初实现,而SVM是让分类变得更加可信。如果接下来时间允许,我会另写一篇有关感知机的博文。
ELSE :
        Good,听听我对SVM的理解和我所做的尝试。

生活中我们需要一些勇气去追寻自己的理想。

Some Fundamental Ideas

  • 间隔最大化(核心)
  • 核函数的引用 (将线性分类的应用拓展到非线性问题,最牛A的地方)

%下面我会用python对线性可分情况进行解释以上概念,同时引入一些新的概念。

import numpy as np
import seaborn as sns
import matplotlib.pylab as plt
from sklearn import datasets
iris = datasets.load_iris()
plt.plot(iris['data'][iris['target']==0,2],iris['data'][iris['target']==0,3],'o')
plt.plot(iris['data'][iris['target']==1,2],iris['data'][iris['target']==1,3],'o')
plt.xlabel(iris['feature_names'][2])
plt.ylabel(iris['feature_names'][3])
plt.legend([iris['target_names'][0],iris['target_names'][1]])

我们得到的图像如下:


Hyperplane.png

note: 箭头是我后期标注的,绿色箭头是分隔超平面比较极端的情况,黄色和红色分别代表分隔超平面可移动的方向。
分隔超平面的函数表示:[图片上传失败...(image-9ba451-1529905115287)]
间隔包括,函数间隔和几何间隔。
函数间隔,functional margin, 描述样本点到超平面的远近,[图片上传失败...(image-b8277c-1529905115287)])
几何间隔,geometric margin,表示样本点到超平面的空间距离, [图片上传失败...(image-feaf29-1529905115287)]}{||W||})

我们定义 几何间隔
[图片上传失败...(image-3660f4-1529905115287)]
执行SVM的目标:间隔最大化
note:超平面的数量是无限的,每一个超平面我们都选合理的几何间隔,然后在所有的几何间隔中,我们选取最大的几何间隔,从而确定满足间隔最大化,也就是说它存在唯一解。这是一个最优化问题。

最大间隔分离超平面,[图片上传失败...(image-2d362c-1529905115287)]
[图片上传失败...(image-864403-1529905115287)]-1\geq0,,i=1,2,...,N)

我们的目标就是要求解上述的max值。
从几何间隔和函数间隔的定义可以看出,分割面的向量w对gamma的值影响是最直接的。
比如:我将w和b扩大N倍,变为Nw和Nb,那么函数间隔同样变为N倍,也因此说明左右上述最优化问题最直接的变量就是分母的|W|。既然分子对最优化的影响远小于分母,那么,我们姑且令分子为1。
也因此,上述的max问题变为:
[图片上传失败...(image-cf75fc-1529905115287)]
[图片上传失败...(image-98a3c2-1529905115287)]-1\geq0,,i=1,2,...,N)

我们发现可以用等价原理将上述的形式转化
[图片上传失败...(image-591a28-1529905115287)]

于是我们得到了新的约束最优化问题。
[图片上传失败...(image-22179c-1529905115287)]
[图片上传失败...(image-fdabf-1529905115287)]-1\geq0,,i=1,2,...,N)
这是一个凸二次规划的问题。

在解决这个问题之前,还需要引入一个核心keyword--------支持向量
这也就是为什么取该算法叫做支持向量机的原因。
所谓的支持向量,就是训练数据集的样本点与分隔超平面距离最近的样本点,我们叫做支持向量。
%我用python做一个图展示下

import seaborn as sns
sns.set_style('darkgrid')
x=iris['data'][:,(2,3)]
y=(iris['target']==0).astype(np.float64)
clf=svm.SVC(kernel='linear')
clf.fit(x,y)
w=clf.coef_[0]
xx=np.linspace(1.5,3.5)
b=clf.intercept_[0]
yy=(-b-w[0]*xx)/w[1]
yy1=(-w[0]*xx-(-w[0]*clf.support_vectors_[0,0]-w[1]*clf.support_vectors_[0,1]))/w[1]
yy2=(-w[0]*xx-(-w[0]*clf.support_vectors_[1,0]-w[1]*clf.support_vectors_[1,1]))/w[1]
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],marker='o',c='',edgecolors='g')
plt.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],edgecolors='g',s=105)
plt.plot(iris['data'][iris['target']==0,2],iris['data'][iris['target']==0,3],'o')
plt.plot(iris['data'][iris['target']==1,2],iris['data'][iris['target']==1,3],'o')
plt.xlabel(iris['feature_names'][2])
plt.ylabel(iris['feature_names'][3])
plt.legend([iris['target_names'][0],iris['target_names'][1]])
plt.plot(iris['data'][iris['target']==2,2],iris['data'][iris['target']==2,3],'o')
plt.plot(xx,yy)
plt.plot(xx,yy1,'-.')
plt.plot(xx,yy2,'-.')
plot.png

现在回顾之前说到的,我们的函数间隔取的是所有样本点最小的,我们的几何间隔取的是最小间隔集合里最大的,也就是说最终得到的值对应的支持向量将直接决定分离超平面,其他的样本点并不起作用,就是说去掉其他样本点,我们依然会得到一样的超平面,支持向量决定最大间隔超平面,这种重要性决定了为什么我们对该算法起名SVM。

AFTERWORDS

接下来的内容就是要求解条件约束最优化问题,我们用到了对偶算法,所以下一篇会重点描述对偶算法,以及如何确定支持向量和W。以及后面会涉及到软间隔问题,核函数的使用,以及SMO算法。

路还长,不要被眼前的困境迷失了双眼。just keep doing~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • 转载自https://mp.weixin.qq.com/s/3NtfHjgfhxbf6sVKleoRpA 1. 模...
    _龙雀阅读 3,859评论 0 8
  • 注:题中所指的『机器学习』不包括『深度学习』。本篇文章以理论推导为主,不涉及代码实现。 前些日子定下了未来三年左右...
    我偏笑_NSNirvana阅读 39,950评论 12 145
  • 思考与行动: 目前精通工作所用的技能,通过刻意练习,还在10年前考取了行业最高认证,这个技能就是网络工程师,这个技...
    ronnieliu阅读 797评论 0 47
  • Having watched some pieces of Ted this week, I got a lot....
    梁梦婷阅读 204评论 0 0
  • 第37章:看相 袁绍真的是个疯子吗? 冀州邺城是袁绍的大本营,几万兵马很快按部就班的回到了营地。 邺城大将军府前,...
    华芳国阅读 253评论 0 0