机器学习_SVM支持向量机

1. 介绍

 SVM支持向量机属于广义的线性模型,先回忆一下线性模型:可依据平面(多维)或直线(一维/二维)来理解模型。简单地说,可用一条线将两类分开,如下图所示。

 能将两类分开的直线不止一条(左图),我们希望找到离两组数据都最远的那条线(正中间那条线),以便更好地泛化。这就是右图中所示的极大边距分类器,一般把中间的直线称为决策面,把离决策面最近的那些点(训练实例)称为支持向量,也就是右图中紫圈中的点。

 有时会遇到无法用直线分类的情况,如左图所示,但可以用圆环划分,右图展示了同样的数据,各个特征值取原始值的平方,变换到新的特征空间后,数据变成了线性可分。将数据从线性不可分转成线性可分的函数称为核函数,转换的方法称为核技巧(这里是取平方的操作,核函数一般将低维数据映射到高维)。由于需要把原始模型转换成线性模型,再进一步操作,我们叫它“广义线性模型”。
 这就是一般意义上的支持向量机SVM,它有两个重点:一个是考虑分类时的最大边距,另一个是使用核函数把线性不可分的变成线性可分的。
 原理并不难,但具体实现涉及数学较多,如果嫌麻烦,请跳过“求解线性方程”部分。

2. 求解线性方程

 用线性模型分类,就是求取能把数据正确分类的直线(或平面),使得界两边的各个点离界都最远。有很多点,我们只需要考虑离分割线最近的那些数据点(支持向量)。这是一个求点到直线距离的问题。
 初中学过,点(x0,y0)到直线Ax+By+C=0的距离公式是:

 在多维的情况下,我们一般使用wx+b描述决策面。其中w是权向量,它决定了决策面的方向,b是偏置,它决定了决策面的位置。
 求某点x0到决策面wx+b的距离,代入距离公式得到d=|wx0+b|/||w||。
 现在求什么样的w和b值能使距离d最小。可以看成在(wx+b)的条件下,求||w||的最小值。即求带条件的最小值,这用到拉格朗日乘子的方法。
 拉格朗日乘子用于寻找多元变量在一个或者多个限制条件下的极值点(柱点)。比如求函数f(x1,x2,...)在g(x1,x2,...)=0的约束条件下的极值。其主要思想是将约束条件函数与原函数联系到一起,生成等式方程:L(x,λ)=f(x)+λ*g(x),λ为拉格朗日乘子,该公式把带条件的求极值化简成了不带条件的求极值。
 在极值点处分别对x和λ求导。这里引入了λ,把求解w变成了求解λ。从而求出距离为最小值的情况下λ应该取什么值,知道了λ又能求w,在不断迭代之后,最终确定了直线的参数。而其中λ不为0的点又正好是支持向量(只有不为0的点是该直线的限定条件)。这样同时把支持向量和分割线都求出来了。

3. 松弛变量

 因为数据不是100%线性可分,因此引入了松弛变量,它是允许变量处于分隔面的错误一测的比例。
 松弛变量一般用惩罚系数C设置,C越大对误分类的惩罚越大(越不允许松弛),趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。

4. 维度变化与核函数

 为什么低维不可分的数据变成高维就可分了呢?N个点在N-1维一定是可分的,就好像决策树,只要叶子够多,一定能分开。我们之前看到的PCA降维和此处的核函数升维,都是对数据的映射,就像是换了一个视角,但数据内部的关系不变。
 核函数的用途很广泛,SVM只是其中的一种用法,SVM中常用的核函数有:线性,多项式,径向基,S型曲线等。

5. 用途

 SVM是空间几何属性的模型(靠距离远近判断相似性),一般处理数值型数据,常用作分类器。是一种有监督的学习。
 从保留数据的角度看,有的算法要保留全部数据比如KNN,有的完全不保留数据比如决策树,SVM是保存一部分数据——支持向量(边界附近的点比其它点更重要),这样即能减少数据,又有明确的意义。
 它的泛化错误率低,开销不大,易解释,综合了参数化和非参数化模型的优点。不过它对参数和核函数选择比较敏感。
 在神经网络大规模应用之前,它是一种非常流行的算法,尤其在没有领域相关的先验知识的情况下,差不多是最好的不用修改就能很好工作的分类器了。

6. 例程

 调用sklearn中的svm分类器示例

    clf = svm.SVC(C=1.0, kernel='rbf') # 指定惩罚系数C,核函数rbf
    clf.fit(X_train,y_train) # 训练
    accuracy = clf.score(X_test,y_test) # 准确度
    print("accuracy:",accuracy) 
    print(clf.support_vectors_) #支持向量列表,从中看到切分边界
    print(clf.support_) # 支持向量索引
    print(clf.n_support_) # 持持向量个数
    print("predict ",clf.predict(np.array(item))) # 预测
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容