阅读大概需要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转移;使从...分心
领取专属 10元无门槛券
私享最新 技术干货