机器学习算法总结1——支持向量机

自学机器学习一个月,接触到很多算法,但总觉得没有体会到各个算法的精髓,晕晕呼呼的。现在决定将每个算法总结一遍,白纸黑子写下来,随着时光慢慢体会各个算法间不同。

较早的分类模型——感知机(1957)是二类分类的线性模型,也是后来神经网络和支持向量机的基础。支持向量机(Support vector

machines)最早也是一种二类分类模型,经过演进,现在成为既能处理多元线性和非线性的问题,也能处理回归问题。在深度学习风靡之前算是最好的分类算法。但目前SVM的应用仍然很多,尤其是在小样本集上。

1.感知机模型

感知机模型是一种二分类的线性分类器,只能处理线性可分的问题,就是尝试找到一个超平面将数据集分开,在二维空间这个超平面就是一条直线,在三维空间就是一个平面。感知机模型如下:


sign函数是指示函数(当wx+b> 0,f(x)= 1; wx+b < 0,f(x)= -1)。感知机的超平面是wx+b= 0。


将上述分段函数(wx+b> 0,f(x)= 1; wx+b < 0f(x)= -1)整合成f(x)(wx+b)>0,即y(wx+ b) >0。满足该式子的样本点即分类正确的点,不满足的即分类错误的点。目标是找到这样一组参数w和b,使得将训练集中的正类点和负类点分开。


接下来定义损失函数(损失函数是衡量错误的程度的函数。当损失函数等于零时,意味着预测值=实际值)。


其中M是表示误分类的样本集合。

2.支持向量机

感知机模型中,我们的目标是将训练集分开,只要是能将样本分开的超平面都满足我们的要求,而这样的超平面有很多。支持向量机本质上和感知机类似,只是要求更加苛刻。在分类过程中,远离超平面的点肯定比超平面附近的点安全,更不容易被误分类。支持向量机的思想就是重点关注这些离超平面很近的点,一句话就是在分类正确的同时,让离超平面最近的点到超平面的间隔最大。


 γ是离超平面最近的点的到超平面的几何间隔,将几何间隔用函数间隔替代,可以将式子表示为:


γ(帽子)表示的是函数间隔,而函数间隔的取值是会随着w,b成倍数变化而变化的,并不会影响最终的结果,因此令γ(帽子)

= 1,则我们最终的问题可以表述为:


在这里引出了支持向量机的第一个亮点:最大化间隔,最大化间隔能使得分类更加精确,且该最大间隔超平面是存在且唯一的。

上面的问题中的1/2||w||2 是凸函数,同时约束不等式是仿射函数,因此这是一个凸二次规划问题,根据凸优化理论,我们可以借助拉格朗日函数将我们的约束问题转化为无约束的问题来求解,我们的优化函数可以表达为:


αi 是拉格朗日乘子, 

     αi ≥0 

i = 1, 2, 3, ....., n

根据拉格朗日的对偶性,可以将原始问题转化为对偶问题(只要对偶问题存在,对偶问题的最优化解就是原问题的最优化解,一般对偶问题都比原始问题更容易求解)极大极小问题:


先对w,b求导求极小问题,可以得到wb的值:

将求得的解代入到拉格朗日函数中,可以得到下面的优化函数(将代入后原本的求α的极大问题转换成了极小问题):

因此只需要求得我们的α的值就可以求得我们的w,b的值(求α的常用算法是SMO算法,可以参考https://www.cnblogs.com/pinard/p/6111471.html)假设最终求得的α的值为α*,则w,b可以表述成:


引入KTT条件(KTT条件是上面拉格朗日函数求最优解的必要条件):


从KTT条件中可以看出,当yi(w*xi +b*) - 1 > 0 时,αi*= 0;当αi*> 0 时,yi(w*xi +b*) - 1 = 0;

结合上面的w,b表达式可以引出支持向量机的第二个亮点:w,b参数只与满足yi(w*xi +b*) - 1 = 0的样本有关,而这些样本点就是离最大间隔超平面最近的点,我们将这些点称之为支持向量。因此很多时候支持向量在小样本集分类时也能表现的很好,也正是因为这个原因。(另外需注意:α向量的个数是和训练集数量相等的,对与大的训练集,会导致所需要的参数数量增多,因此SVM在处理大的训练集时会比其他常见的机器学习算法要慢)

3.软间隔最大化

通常情况下的训练集中都会存在一些异常点,而这些异常点会导致训练集线性不可分,但除去这些异常点之后,剩下的样本就是线性可分的,而上面讲到的硬间隔最大化是无法处理线性不可分的问题,线性不可分意味着有些样本点的函数间隔是不能满足大于等于1的约束条件。因此我们对每个样本(xi,yi)引入一个松弛变量 ξi,则我们的约束条件变为:


  目标函数中加入对松弛变量的惩罚项,惩罚参数C> 0,目标优化函数变为:


  因为整个求解的原始问题可以描述为:


  采用和之前同样的求解方法,利用拉格朗日将约束问题转化为无约束的问题,将原始问题转化为求极大极小问题的对偶问题,可以得到我们的最终结果:


  和第二部分中的结果唯一不同的是αi 的取值范围多了一个上限C值,对于软间隔最大化时,其支持向量描述要复杂一些,因为其支持向量可以在间隔边界上(如下图中的虚线),也可以在间隔边界和超平面之间,或者在分离超平面误分的一侧。


4、合页损失函数

  合页损失函数又称为hinge损失函数,其表达式如下:


  因此我们上面的优化问题可以描述为:


  对上述损失函数中的第一项可以理解为当样本分类正确且间隔大于1,即yi(wxi +b) ≥ 1时,损失为0;而当 yi(wxi +b) < 1 时,损失为

1- yi(wxi +b),注意在这里即使样本分类正确,但是间隔小于1的也会计入损失,这就是支持向量机的苛刻性

  下图是hinge损失函数和其他一些损失函数的比较:


5、线性不可分

  上面讲到的软间隔最大化只能解决由于异常点而导致的线性不可分问题,而对于本身的数据集就是非线性的问题就无能为力,根据相关理论对于在低维空间线性不可分的问题,一般将其映射到高维空间后都是线性可分的,我们可以将这一理论运用到支持向量机中,可以引入一个函数 ϕ(x),将样本集从当前维度映射到更高的维度,回过头来看我们之前的优化函数:


  我们只需要将优化函数中的內积xi  · xj 转化成ϕ(xi) · ϕ(xj)即可解决我们的非线性问题,但与此同时也引入了新的问题我们的数据维度增大后,內积的计算量也增大了,当映射后的维度很高,甚至是达到无穷维之后,求解模型时的计算量也会显著增大,那么如何来处理这个问题呢?这就需要引入我们的核函数了。

  我们知道即使在映射到高维后,內积ϕ(xi) · ϕ(xj)的值也依然是一个常数,那么是否存在这样一个函数K( xi · xj )= ϕ(xi) · ϕ(xj),有理论证明当这样的函数是存在的(Mercer定理已证明),我们将其称为核函数。

  在此引出了支持向量机的第三个亮点:在不需要将样本映射到高维空间,而利用核函数解决非线性分类问题

  通过借助核函数就解决了我们的问题,当然不是什么函数都能作为核函数的,已经被证明的核函数并不多,而常用的核函数也就那么几个,接下来我们介绍下常见的几种核函数:

  1)线性核函数

  线性核函数很好理解,只能用来处理线性问题,其表达式如下:


  因此我们可以将线性SVM和非线性SVM放在一起,只需要通过设定核函数和处理它们

  2)多项式核函数


  其中的a,c,d的值都是需要我们去通过调参设置的。

  3)径向基核函数

  径向基核函数也称为高斯核函数


  参数较少,只需要自己去设置参数σ

  4)Sigmoid核函数

  K(x,y) = tanh (ax · z+ r)

  需要设置调试的参数a,r,其中 tanh函数双曲正切函数,也被常用来作神经网络中的激活函数。

  根据泰勒展开式,我们知道高阶可导的函数都可以用多项式函数表示,在这里径向基核函数和Sigmoid核函数都是高阶可导的,因此都可以用多项式来表述。换句话说,径向基核函数和Sigmoid核函数都是可以表述高阶多项式的,因此在选择核函数时,径向基核函数和Sigmoid核函数通常要比多项式核函数表现的要好,因为可以自动的去匹配阶数,而不需要我们去指定多项式核函数的阶数,此外多项式核函数需要调试的参数也比较多,因此通常选择径向基核函数。

6、总结

  总的来说,在集成算法和神经网络风靡之前,SVM基本上是最好的分类算法,但即使在今天,它依然占有较高的地位。

  SVM的主要优点有:

  1)引入最大间隔,分类精确度高

  2)在样本量较小时,也能准确的分类,并且具有不错的泛化能力

  3)引入核函数,能轻松的解决非线性问题

  4)能解决高维特征的分类、回归问题,即使特征维度大于样本的数据,也能有很好的表现

  SVM的主要缺点有:

  1)在样本量非常大时,核函数中內积的计算,求解拉格朗日乘子α值的计算都是和样本个数有关的,会导致在求解模型时的计算量过大

  2)核函数的选择通常没有明确的指导,有时候难以选择一个合适的核函数,而且像多项式核函数,需要调试的参数也非常多

  3)SVM对缺失数据敏感(好像很多算法都对缺失值敏感,对于缺失值,要么在特征工程时处理好,要么使用树模型)。

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

推荐阅读更多精彩内容

  • 【概述】 SVM训练分类器的方法是寻找到超平面,使正负样本在超平面的两侧(分类正确性即“分得开”),且样本到超平面...
    sealaes阅读 10,984评论 0 7
  • 本章涉及到的知识点清单:1、决策面方程2、函数间隔和几何间隔3、不等式约束条件4、SVM最优化模型的数学描述(凸二...
    PrivateEye_zzy阅读 13,178评论 3 10
  • 本文主要是学习支持向量机的算法原理,并且用Python来实现相关算法。内容包括:SVM概述、线性可分支持向量机、线...
    keepStriving阅读 16,707评论 6 57
  • 参考Jerrylead和july-支持向量机通俗导论 一、由逻辑回归,引申出SVM(线性可分的SVM) 1.1 逻...
    小碧小琳阅读 1,430评论 0 2
  • 在学校的两年,终于把周围的店都给吃腻了。 新发现的一家店,只吃过两次,上次点的牛奶冰粉。 我想说关东煮和麻辣烫有啥...
    萤火虫zcf阅读 453评论 1 1