今天想跟大家聊聊SVM

阅读大概需要5分钟

跟随小博主,每天进步一丢丢

Motivation

之前我在自己的简书上写过SVM,可是当时写的只是皮毛(主要是现在忘了O.O),那么现在想再次拾起的原因是什么呢?

8.2-8.4号在听SMP会议的时候,发现SVM其实还是很常用的(在其他的计算机相关领域)。

在论文中数据的baseline中,基本很多都是SVM做基线。

我觉得未来算法的趋势应该是深度学习方法+传统的机器学习方法。这样说的原因在于我了解到了我之前参加的CAIL2018比赛的第一名有一个任务用的就是这两者的结合(一种方法是将深度学习的特征向量作为传统机器学习的输入)。

目前经典的机器学习算法我觉得有两个:SVM和决策树系列。所以目前先从SVM开始整理下,巩固下记忆。

简单了解什么是SVM

SVM,Support Vector Machine支持向量机(也被叫做支撑向量机)。曾经因为SVM的出现,淹没了之前的一次深度学习革命。但是现在深度学习找到突破口又一次卷土重来,淹没了SVM,但是在一些和计算机交叉的领域,SVM还是有自己的一席之地,因为,并不是任何任务都能用深度学习来做的,比如一些小数据。SVM既能做分类,也能做回归,目前先从分类说起。

SVM提出的缘由

比如有一组数据

我们可以在这两组数据中间任意画一条线作为分割,比如下面的两条线

但是这样会导致线的不确定性,也会导致分类的还不确定性。这样的分类存在局限性,比如有一个测试点在这里

在上述分类情况中,你说它应该属于哪一类呀?当然应该属于蓝色的类别,但是实际上它应该属于红色的类别。像上述的分类情况,没有泛化能力。那么怎么设置分类边界呢?大家应该都能猜出来,就是离这两类边界处的点尽可能的远。如下

使得边界点距离分类线最大,这个方法就是SVM。

SVM理论

SVM就是寻找一个最优的决策边界,距离两个类别的最近的样本最远,其中最近的样本点称为支持(支撑)向量:

转化成数学问题,就是使得中间的直线距离两边的直线的间隔(margin)最大(这两边的直线的斜率是一样的),也就是SVM算法就是最大化margin。

确定决策线(分类线)的表达式

线的表达式为Ax1 + Bx2 + C = 0,其中ABC为参数,为了写成矩阵的形式,这里将ABC写为:

w1x1 + w2x2 + b = 0

矩阵形式为

[w1, w2].T * [x1, x2] + b = 0

简写为

W.T * X + b = 0

接下来要用到距离公式,这里先摆出来:

而改完之后的距离公式为:

其中

现在我们知道中间的决策线公式为

现在设置红色点label y=1,蓝色点label y=-1(这样设置y值是为了后续的计算方便,当然取别的值也可以),边界直线到决策线长度为d,那么就有公式:

因为d>0,现在做个变换(分母同除以d):

这里可以看设置W.T / ||W||d 为W.T_d,b / ||W||d 为b_d:

此时可以得出这三条线的公式分别为

而我们看中间的线,右边是0,左右两边同时除以一个常数||W||*d,是不影响这个直线的,所以改为

这个时候,我们可以看出

参数都为W.T_d和b_d,所以我们可以统一替换为W.T和b,就相当于重新命名而已(该W.T和b非之前的W.T和b):

最后再对条件公式做一个变形:

大家应该能看懂,仅仅为了方便计算。

现在我们的优化目标就是最大化距离:

而数据都是在两边线线上和线外,所以 |W.T*X + b| 的结果永远大于等于1,所以优化的目标只有||W||:

也就是

而为了容易求导和计算,改为;

该公式即为目标函数。

最终问题转化为数学公式:

(该公式为数学中常见的有条件的数学优化问题。)

PS. 今天就到这里吧,希望对大家有帮助。写这个用的时间有点多,老板催着标语料呢O.O痛苦。原本是将代码也放上来的,啊啊。

接下来会接着讲代码,核函数,多分类和回归的理论与实践。敬请期待!!

IELTS a bit

pragmaticadj. 实际的;实用主义的;国事的

spasmn. 痉挛;抽搐;一阵发作

interdependentadj. 相互依赖的;互助的

contemptn. 轻视,蔑视;耻辱

distract from转移;使从...分心

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180805G0YP9700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券