概率论只不过是把常识用数学公式表达了出来。
——拉普拉斯
0. 前言
这是一篇SVM的入门笔记,来自我对PlusKid、JerryLead、July等大神文章的拜读心得,说是心得还不如说是读文笔记,希望在自己理解的层面上给予SVM这个伟大的机器学习算法概要介绍,让更多的热爱机器学习的伙伴们进入到SVM的世界。PS:文章会以问答的形式为主要结构。
1.概念
1.1.什么是SVM?
支持向量机即 Support Vector Machine,简称 SVM 。(第一次接触SVM是在阿里大数据竞赛的时候,大家都在讨论用什么样的方法去挣阿里那100W的奖金(鄙人因为能力有限进入决赛阶段,但是因为模型优化问题,名落松山),SVM、LR、协同过滤等等)SVM是Vapnik和Cortes于1995年首先提出的,它旨在解决小样本、非线性、高纬(因为现实应用中的数据多为这般特性)等特性的数据特征的模式识别问题,特别在分类问题中,一直被大家认为是一种现有的可用的效果最好的分类算法之一。(甚至很多人觉得之一可以去掉,但是神经网络"大大"不愿意-。-)
1.2.为什么会有SVM?
前面已经说过了SVM在解决小样本、非线性、高纬数据上的优势,那么我们就从线性分类器开始逐步探讨为什么会有SVM的出现?
1.2.1.线性分类器
给定一些数据点,它们分别属于两个不同的类,现在要找到一个线性分类器把这些数据分成两类。如果用x表示数据点,用y表示类别(y可以取1或者-1,分别代表两个不同的类,有些地方会选 0 和 1 ,当然其实分类问题选什么都无所谓,只要是两个不同的数字即可,不过这里选择 +1 和 -1 是为了方便 SVM 的推导,后面就会明了了),一个线性分类器的学习目标便是要在n维的数据空间中找到一个超平面(hyper plane),这个超平面的方程可以表示为( wT中的T代表转置):
(为什么会有这个形式化表示的超平面方程,请猛戳这里)
一个超平面,在二维空间中的例子就是一条直线。我们希望的是,通过这个超平面可以把两类数据分隔开来,比如,在超平面一边的数据点所对应的 y 全是 -1 ,而在另一边全是 1 。具体来说,我们令 f(x)=wTx+b ,显然,如果 f(x)=0 ,那么 x 是位于超平面上的点。我们不妨要求对于所有满足 f(x)<0 的点,其对应的 y 等于 -1 ,而 f(x)>0 则对应 y=1 的数据点。当然,有些时候(或者说大部分时候)数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在,不过关于如何处理这样的问题我们后面会讲(SVM核函数的出现),这里先从最简单的情形开始推导,就假设数据都是线性可分的,亦即这样的超平面是存在的。
如下图所示,两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面。在进行分类的时候,我们将数据点 x 代入 f(x) 中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果大于 0 则赋予类别 1 。如果 f(