SVM的推导流程

  • 详解SVM
    • SVM的发展历程
    • Linear Classifier
    • Linear SVM
    • Soft Margin
    • Kernel函数解决Nonlinear Classifier问题
    • Kernel Trick
    • 附录

详解SVM

SVM是由Vapnik和同事于1992年提出的一种分类算法。由于其优异的分类性能以及在解决线性和非线性问题中都具有的优秀效果,一经提出,就受到广泛欢迎,甚至作为机器学习领域的经典算法之一。作者在刚开始接触SVM时也是一头雾水,特别是看了很多推导SVM的博客,感觉都有点似懂非懂,不久前有幸在b站上观看了清华大学袁博老师的数据挖掘课程,被袁博老师深入浅出的讲解深深折服。至此,作者对SVM才有了一定程度上的了解,因此,在本篇文章中,作者把对SVM的学习心得整理为了一篇博客,与大家分享。本文将按照SVM的整个发展历程对SVM进行简单推导,整个推导过程深深受到了袁博老师的影响(附:清华大学袁博老师的《数据挖掘》课程链接)。

SVM的发展历程

SVM作为机器学习领域的经典算法之一,相信很多同学都听过它的大名。其优异的分类性能使之成为工业界应用范围最广的聚类算法之一。但SVm这座宏伟的大楼不是一蹴而就的,其可以追溯到上个世纪60年代,当时就是作为最简单的线性分类器提出来的,目的也非常纯粹,就是为了解决最简单的线性分类问题,如下图所示,我们希望训练出一个超平面将蓝色点和红色点分开。

在解决了这个问题之后,人们发现实际中很多问题不是像上图那样理想,蓝色点和红色点泾渭分明,很容易被分开。实际上,在很多情况下,由于噪声的存在,

如图所示,有个别离群点混入了相对的点集团中,导致之前的Linear Classifier找不到合适的超平面进行分割,此时就产生了进阶版SVM–具有Soft Margin的SVM。

研究到这里,SVM已经彻底解决了线性分类问题。但相对于线性分类问题,非线性分类问题才是实际中最为常见的问题,我们举一个简单的例子,

很明显可以看出,无论用何种超平面,都无法正确分割上图中的红点和蓝点。因此较真的科学家们就开始尝试改进SVM来解决非线性分类问题,然而,没想到幸运的是,真的有人研究出了可以用于解决非线性分类的改进版SVM–基于kernel核函数的SVM。这位大牛便是我们一开始就提到过的Vapnik。

但后面我们要讲到,如果强行用核函数的话,很可能由于计算复杂度太高,导致问题的难度噌噌噌往上涨(就和练功一个道理,如果练功用力过度,很容易急火攻心、走火入魔,甚至香消玉殒)。所以最后一部分,我们就讲一个小小的Kernel Trick,通过这个小trick,解决SVM就如同探囊取物一般简单。

Linear Classifier

在构建Linear Classifier之前,我们需要先搞明白理想的分类器是什么样子?

如上图所示,假如我们产生了一个超平面w⋅x+b=0w\cdot{x}+b=0w⋅x+b=0,则如何能区分蓝色点和红色点呢?学过初等数学的话,就会知道当一条直线为w⋅x+b=0w\cdot{x}+b=0w⋅x+b=0时,这条直线的一侧必然是w⋅x+b>0w\cdot{x}+b>0w⋅x+b>0,另一侧必然是w⋅x+b<0w\cdot{x}+b<0w⋅x+b<0。那我们将直线换成超平面也是一样的,且基于超平面的这个特点,我们可以得到分类器的核心公式:
f(x,w,b)=sign(g(x))=sign(w⋅x+b)\begin{aligned} f(x,w,b)&=sign(g(x)) \\&=sign(w\cdot{x}+b) \end{aligned} f(x,w,b)​=sign(g(x))=sign(w⋅x+b)​
其中,sign()sign()sign()是符号函数,如图所示。

这里,我们认为设定蓝色点的label=+1label = +1label=+1,红色点的label=−1label = -1label=−1。通过这个分类器的核心公式,我们就可以将蓝色点和红色点完美地区分开来。因此下面的所有内容都是关于如何构建这个g(x)=w⋅x+bg(x)=w\cdot{x}+bg(x)=w⋅x+b,也即如何设定一对合适的参数www和bbb。

在思考www和bbb之前,我们先熟悉一个知识点,点到超平面的距离如何计算?如下图所示。

这里,我们设xxx到超平面w⋅x+b=0w\cdot{x}+b=0w⋅x+b=0的距离为MMM。则,根据点到(超平面)直线的距离公式,
M=∣∣x−x′∣∣=∣g(x)∣∣∣w∣∣M=||x-x'||=\frac{|g(x)|}{||w||} M=∣∣x−x′∣∣=∣∣w∣∣∣g(x)∣​
其中,当x=(0,0)(原点)x=(0, 0)(原点)x=(0,0)(原点)时,M=∣g(0,0)∣∣∣w∣∣M=\frac{|g(0,0)|}{||w||}M=∣∣w∣∣∣g(0,0)∣​。

知道了这个距离公式后,我们就可以接着思考构建合适超平面的问题了。我们要思考的第一个问题便是,如下图所示,可以用于正确分类红点和蓝点的超平面有很多,那么哪一个超平面是我们需要的最佳超平面呢?

在这个问题的基础上,我们就引出了Margin的概念。我们定义Margin为分类的超平面和对应类别最近的样本点之间的距离,如图所示。

我们这里认为规定M=Margin Width,很明显可以看到,不同的超平面对应的Margin Width并不相同。虽然每一种超平面都实现了对已有数据点的完美分割,但我们不知道当前超平面对未知数据点的分类效果。因此,为了保证最佳分类效果,我们选择Margin Width最大的超平面作为最优超平面,用数学公式表达为:
maxMmax~M max M
因此,我们又将问题转化为了如何表达MMM。为了表达MMM,我们这里又人为规定一下,如上图所示,Margin的两个边界分别为w⋅x+b=+1w\cdot{x}+b=+1w⋅x+b=+1和w⋅x+b=−1w\cdot{x}+b=-1w⋅x+b=−1,至于为什么这么规定?因为无论w⋅x+b=w\cdot{x}+b=w⋅x+b=多少,都与最终结果无关,大家也可以尝试一下,比如:w⋅x+b=0.5w\cdot{x}+b=0.5w⋅x+b=0.5等等。通过设置w⋅x+b=+1w\cdot{x}+b=+1w⋅x+b=+1和w⋅x+b=−1w\cdot{x}+b=-1w⋅x+b=−1这两条边界,我们也就规定了这些数据点中,大于等于+1+1+1的数据点为蓝点,小于等于−1-1−1的点为红点,超平面为w⋅x+b=0w\cdot{x}+b=0w⋅x+b=0。

到这里,我们就可以发现,超平面的确定只与两条边界有关,换句话说,只与边界上的数据点有关(如上图,我用黄线圈了起来)。至于其它数据点如何分布,本质上与超平面没什么关系。因此,边界上的点才是关键点,我们将这些点称之为支持向量。可以想象,即使我们有上千万的数据点,但真正构成支持向量的点可能只有几十个。如果能将这几十个点找到,问题的计算复杂度将大大降低。

假如w⋅x+b=+1w\cdot{x}+b=+1w⋅x+b=+1上有一点x+1x^{+1}x+1,则该点到超平面的距离为Mx+=∣g(x+)∣∣∣w∣∣M_{x^{+}}=\frac{|g(x^{+})|}{||w||}Mx+​=∣∣w∣∣∣g(x+)∣​;w⋅x+b=+1w\cdot{x}+b=+1w⋅x+b=+1上有一点x+1x^{+1}x+1时,同理。因此,M=2∣∣w∣∣M=\frac{2}{||w||}M=∣∣w∣∣2​。我们的目标便是max2∣∣w∣∣max~\frac{2}{||w||}max ∣∣w∣∣2​。

但在max2∣∣w∣∣max~\frac{2}{||w||}max ∣∣w∣∣2​的同时,我们还需要保证超平面成功分类,因此必须要保证:
w⋅xi+b≥1,ifyi=+1w⋅xi+b≤−1,ifyi=−1w\cdot{x_i}+b\geq{1},~~if~y_i=+1 \\w\cdot{x_i}+b\leq{-1},~~if~y_i=-1 w⋅xi​+b≥1,  if yi​=+1w⋅xi​+b≤−1,  if yi​=−1
将这两个式子合并一下,就可以得到:
yi∗(w⋅xi+b)−1≥0y_i*(w\cdot{x_i}+b)-1\geq{0} yi​∗(w⋅xi​+b)−1≥0

最终,我们就可以得到,一个完整的优化目标,
maxM=2∣∣w∣∣s.t.yi∗(w⋅xi+b)−1≥0\begin{aligned} max~M=\frac{2}{||w||}~~~~~~~~~~ \\ s.t. ~ y_i*(w\cdot{x_i}+b)-1\geq{0} \end{aligned} max M=∣∣w∣∣2​          s.t. yi​∗(w⋅xi​+b)−1≥0​

Linear SVM

上节讲到,SVM分类器的核心问题归根结底就是解决下面的这个二次优化问题。
maxM=2∣∣w∣∣s.t.yi∗(w⋅xi+b)−1≥0\begin{aligned} max~M=\frac{2}{||w||}~~~~~~~~~~ \\ s.t. ~ y_i*(w\cdot{x_i}+b)-1\geq{0} \end{aligned} max M=∣∣w∣∣2​          s.t. yi​∗(w⋅xi​+b)−1≥0​
但这个不是一般求解优化问题的标准形式,因此,我们将这个式子稍稍变一下,变为标准形式:
minM=12wTws.t.yi∗(w⋅xi+b)−1≥0\begin{aligned} min~M=\frac{1}{2}w^Tw~~~~~~~~~~ \\ s.t. ~ y_i*(w\cdot{x_i}+b)-1\geq{0} \end{aligned} min M=21​wTw          s.t. yi​∗(w⋅xi​+b)−1≥0​
注意,这里将∣∣w∣∣||w||∣∣w∣∣变为wTww^TwwTw是为了计算方便,不会影响后面的结果。

因此,本节中,作者就带领大家一起尝试求解这个优化问题。既然这个是含限制条件的优化问题,那我们就自然而然要想到Lagrange乘子法(忘了的同学可以自行百度,重新学习一下)。当然,要注意一下,我们在高等数学中学过的lagrange乘子法是用于等式约束的,而这里是不等式约束,会有一点小小的不同,我们后面会讲到。这里我们继续,采用lagrange乘子法的结果是
Lp=12∣∣w∣∣2−∑i=1lαiyi(wxi+b)+∑i=1lαi(1)L_p=\frac{1}{2}||w||^2-\sum_{i=1}^{l}\alpha_iy_i(wx_i+b)+\sum_{i=1}^{l}\alpha_i\tag{1} Lp​=21​∣∣w∣∣2−i=1∑l​αi​yi​(wxi​+b)+i=1∑l​αi​(1)

既然是用lagrange乘子法,那就必然要对每一个变量进行求导,
f(x)={∂Lp∂w=0⇒w=∑i=1lαiyixi∂Lp∂b=0⇒∑i=1lαiyi=0(2)f(x)=\left\{ \begin{aligned} &\frac{\partial{L_p}}{\partial{w}}=0\Rightarrow{w}=\sum_{i=1}^{l}\alpha_iy_ix_i \\ &\frac{\partial{L_p}}{\partial{b}}=0\Rightarrow \sum_{i=1}^{l}\alpha_iy_i=0 \end{aligned} \tag{2} \right. f(x)=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​​∂w∂Lp​​=0⇒w=i=1∑l​αi​yi​xi​∂b∂Lp​​=0⇒i=1∑l​αi​yi​=0​(2)
然后,再将(2)式代回(1)式中,就可以得到下面这个式子,
LD=∑i=1lαi−12∑i,jlαiαjyiyjxixj=∑i=1lαi−12αTHαs.t.∑i=1lαiyi=0,αi≥0(3)\begin{aligned} L_D&=\sum_{i=1}^{l}\alpha_i-\frac{1}{2}\sum_{i,j}^{l}\alpha_i\alpha_jy_iy_jx_ix_j \\&=\sum_{i=1}^{l}\alpha_i-\frac{1}{2}\alpha^TH\alpha \\s.t.~&\sum_{i=1}^{l}\alpha_iy_i=0,~\alpha_i\geq0\tag{3} \end{aligned} LD​s.t. ​=i=1∑l​αi​−21​i,j∑l​αi​αj​yi​yj​xi​xj​=i=1∑l​αi​−21​αTHαi=1∑l​αi​yi​=0, αi​≥0​(3)
其中, Hij=yiyjxixjH_{ij}=y_iy_jx_ix_jHij​=yi​yj​xi​xj​,注意这里αi≥0\alpha_i\geq0αi​≥0就是由于lagrange乘子法的不等式约束产生的。

这里(3)与(1)是对偶问题。再一般情况下,对偶问题是不等价的,但在SVM的情况下,这个对偶问题满足了KKT条件,就等价了(至于什么是KKT条件,感兴趣的同学可以自行百度)。因而,我们就可以转而研究LDL_DLD​了。

LDL_DLD​是一个只和α\alphaα有关的二次优化问题,优化方法有很多,最流行的是SMO算法,有兴趣的同学可以自己看看。在求解LDL_DLD​后,就会得到很多α\alphaα的值。这里要注意,很多α\alphaα都等于0,只有一小部分α>0\alpha>0α>0,我们就把非0的α\alphaα对应的点称为support vector。

Soft Margin

在上一节中,我们已经成功求解了SVM问题,但由于在实际中存在大量噪声,如图所示。

因此,不存在超平面能将二者完全分离。此时,我们就要将SVM的表达式稍稍做一些修改,加入Soft Margin,如下图所示。

所谓Soft Margin,是指放宽约束条件。原来的约束条件是yi∗(w⋅xi+b)−1≥0y_i*(w\cdot{x_i}+b)-1\geq{0}yi​∗(w⋅xi​+b)−1≥0,我们将其放宽为yi∗(w⋅xi+b)−1+ξi≥0y_i*(w\cdot{x_i}+b)-1+\xi_i\geq{0}yi​∗(w⋅xi​+b)−1+ξi​≥0,其中ξi≥0\xi_i\geq{0}ξi​≥0。之前的约束条件的意思是保证所有数据点都在2个Margin(wx+b=+1wx+b=+1wx+b=+1和wx+b=−1wx+b=-1wx+b=−1)之外,而今,由于噪声的影响,我们将约束条件拓宽为允许有少量数据点位于2个Margin内,甚至极少数点可以越过wx+b=0wx+b=0wx+b=0这个超平面。同时将优化目标Φ(w)=12wTw\Phi(w)=\frac{1}{2}w^TwΦ(w)=21​wTw修改为Φ(w)=12wTw+C⋅∑i=0lξi\Phi(w)=\frac{1}{2}w^Tw+C\cdot{\sum_{i=0}^{l}\xi_i}Φ(w)=21​wTw+C⋅∑i=0l​ξi​,其中,C⋅∑i=1lξiC\cdot{\sum_{i=1}^{l}\xi_i}C⋅∑i=1l​ξi​作为惩罚项,通过设置较大的CCC值,使得ξi\xi_iξi​不要过大。至此,优化函数就修改为了
minΦ(w)=12wTw+C⋅∑i=0lξis.t.yi∗(w⋅xi+b)−1+ξi≥0\begin{aligned} &min~\Phi(w)=\frac{1}{2}w^Tw+C\cdot{\sum_{i=0}^{l}\xi_i} \\ &s.t. ~ y_i*(w\cdot{x_i}+b)-1+\xi_i\geq{0} \end{aligned} ​min Φ(w)=21​wTw+C⋅i=0∑l​ξi​s.t. yi​∗(w⋅xi​+b)−1+ξi​≥0​
和上一节类似,我们还是采用Lagrange乘子法,可以得到
LP=12∣∣w∣∣2+C∑i=1lξi−∑i=1lαi[yi(wxi+b)−1+ξi]−∑i=1lμiξi(4)L_P=\frac{1}{2}||w||^2+C\sum_{i=1}^{l}\xi_i-\sum_{i=1}^{l}\alpha_i[y_i(wx_i+b)-1+\xi_i]-\sum_{i=1}^{l}\mu_i\xi_i\tag{4} LP​=21​∣∣w∣∣2+Ci=1∑l​ξi​−i=1∑l​αi​[yi​(wxi​+b)−1+ξi​]−i=1∑l​μi​ξi​(4)

经过求导,就可以得到
f(x)={∂Lp∂w=0⇒w=∑i=1lαiyixi∂Lp∂b=0⇒∑i=1lαiyi=0∂Lp∂ξi=0⇒C=αi+μi(5)f(x)=\left\{ \begin{aligned} &\frac{\partial{L_p}}{\partial{w}}=0\Rightarrow{w}=\sum_{i=1}^{l}\alpha_iy_ix_i \\ &\frac{\partial{L_p}}{\partial{b}}=0\Rightarrow \sum_{i=1}^{l}\alpha_iy_i=0 \\ &\frac{\partial{L_p}}{\partial{\xi_i}}=0\Rightarrow C=\alpha_i+\mu_i \end{aligned} \tag{5} \right. f(x)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​​∂w∂Lp​​=0⇒w=i=1∑l​αi​yi​xi​∂b∂Lp​​=0⇒i=1∑l​αi​yi​=0∂ξi​∂Lp​​=0⇒C=αi​+μi​​(5)
将(5)代入(4)式,就可以得到
LD=∑i=1lαi−12αTHαs.t.0≤αi≤C,∑i=1lαiyi=0(6)\begin{aligned} &L_D=\sum_{i=1}^{l}\alpha_i-\frac{1}{2}\alpha^TH\alpha \\ &s.t.~0\leq\alpha_i\leq C, ~\sum_{i=1}^{l}\alpha_iy_i=0 \end{aligned} \tag{6} ​LD​=i=1∑l​αi​−21​αTHαs.t. 0≤αi​≤C, i=1∑l​αi​yi​=0​(6)
可以发现,(6)与(3)式非常相似,只多了一个参数C,这个参数在写程序时需要我们手动设置。要求解LDL_DLD​问题,还是用我们提过的SMO算法就可以。

Kernel函数解决Nonlinear Classifier问题

之前我们求解得到的SVM完美解决了线性分类问题,但生活中大量存在线性不可分问题或非线性问题,如下图所示。

左右两张图就是非线性分类的典型例子。我们先讲讲左图,左图是一维数据点分布。很明显,我们无法用一个超平面将这对数据点分为两类。那我们又非常希望解决这个问题,该怎么办呢?科学家们想到了一个非常巧妙的方法–升维,即我们自定义一个函数,将1维投影到2维,投影结果如下图所示:

如果我们能制定一个合适的投影规则,将1维投影到2维后是不是很容易区分。上面那幅右图也是同理,蓝点和红点的分界面是一个x12+x22=r2x_1^2+x_2^2=r^2x12​+x22​=r2的圆,不是我们想要的超平面的样子,我们就指定一个规则,将其做个简单的映射x→Φ(x)x\rightarrow\Phi(x)x→Φ(x),这里Φ(x)=x2\Phi(x)=x^2Φ(x)=x2(当然,这里没有升维),就可以得到下图:

很明显,经过一个简单的映射,就可以将非线性问题转化为线性问题,从而实现分类。这里,我们介绍几种固定的映射方法,例如:
Φ(x)=[1,2x1,2x2,...,2xm,x12,x22,...,xm2,2x1x2,2x1x3,...,2x1xm,2x2x3,...,2x2xm,...,2xm−1xm]T\Phi(x)=[1,\sqrt2x_1, \sqrt2x_2, ..., \sqrt2x_m,x_1^2,x_2^2, ..., x_m^2,\sqrt2x_1x_2,\sqrt2x_1x_3,...,\sqrt2x_1x_m,\sqrt2x_2x_3,...,\sqrt2x_2x_m,...,\sqrt2x_{m-1}x_m]^T Φ(x)=[1,2​x1​,2​x2​,...,2​xm​,x12​,x22​,...,xm2​,2​x1​x2​,2​x1​x3​,...,2​x1​xm​,2​x2​x3​,...,2​x2​xm​,...,2​xm−1​xm​]T
这个映射关系被称为Quadratic Basis Functions,由常数项、一次项、纯二次项和二次交叉项组成。就好比,原问题只有[x1,x2,...,xm]T[x_1,x_2,...,x_m]^T[x1​,x2​,...,xm​]T,mmm项,即mmm维空间,但经过这个映射关系,变成了Cm+22=(m+2)(m+1)2C_{m+2}^{2}=\frac{(m+2)(m+1)}{2}Cm+22​=2(m+2)(m+1)​维空间,约等于m22\frac{m^2}{2}2m2​维空间。其实上面那个Φ(x)=x2\Phi(x)=x^2Φ(x)=x2的映射就可以视为Quadratic Basis Functiona的特例,只不过由于上图那个问题的特殊性,我们将常数项、一次项、二次交叉项全部省略为0了。

而且,这个Quadratic Basis Functions有一个很好的性质:

Φ(a)=[1,2a1,2a2,...,2am,a12,a22,...,am2,2a1a2,2a1a3,...,2a1am,2a2a3,...,2a2am,...,2am−1am]T\Phi(a)=[1,\sqrt2a_1, \sqrt2a_2, ..., \sqrt2a_m,a_1^2,a_2^2, ..., a_m^2,\sqrt2a_1a_2,\sqrt2a_1a_3,...,\sqrt2a_1a_m,\sqrt2a_2a_3,...,\sqrt2a_2a_m,...,\sqrt2a_{m-1}a_m]^T Φ(a)=[1,2​a1​,2​a2​,...,2​am​,a12​,a22​,...,am2​,2​a1​a2​,2​a1​a3​,...,2​a1​am​,2​a2​a3​,...,2​a2​am​,...,2​am−1​am​]T

Φ(b)=[1,2b1,2b2,...,2bm,b12,b22,...,bm2,2b1b2,2b1b3,...,2b1bm,2b2b3,...,2b2bm,...,2bm−1bm]T\Phi(b)=[1,\sqrt2b_1, \sqrt2b_2, ..., \sqrt2b_m,b_1^2,b_2^2, ..., b_m^2,\sqrt2b_1b_2,\sqrt2b_1b_3,...,\sqrt2b_1b_m,\sqrt2b_2b_3,...,\sqrt2b_2b_m,...,\sqrt2b_{m-1}b_m]^T Φ(b)=[1,2​b1​,2​b2​,...,2​bm​,b12​,b22​,...,bm2​,2​b1​b2​,2​b1​b3​,...,2​b1​bm​,2​b2​b3​,...,2​b2​bm​,...,2​bm−1​bm​]T
时,
Φ(a)⋅Φ(b)=1+∑i=1m2aibi+∑i=1mai2bi2+∑i=1m−1∑j=i+1m2aiajbibj\Phi(a)\cdot\Phi(b)=1+\sum_{i=1}^{m}2a_ib_i+\sum_{i=1}^{m}a_i^2b_i^2+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}2a_ia_jb_ib_j Φ(a)⋅Φ(b)=1+i=1∑m​2ai​bi​+i=1∑m​ai2​bi2​+i=1∑m−1​j=i+1∑m​2ai​aj​bi​bj​
注意,这里Φ(a)⋅Φ(b)\Phi(a)\cdot\Phi(b)Φ(a)⋅Φ(b)是对应项相乘求和,比如:1⋅1=1、2a1⋅2b1+2a2⋅2b2+...2am⋅2bm=∑i=1m2aibi1\cdot1=1、\sqrt2a_1\cdot\sqrt2b_1+\sqrt2a_2\cdot\sqrt2b_2+...\sqrt2a_m\cdot\sqrt2b_m=\sum_{i=1}^{m}2a_ib_i1⋅1=1、2​a1​⋅2​b1​+2​a2​⋅2​b2​+...2​am​⋅2​bm​=∑i=1m​2ai​bi​等等。

与此对应,可以很惊喜地发现,
(a⋅b+1)2=(a⋅b)2+2a⋅b+1=(∑i=1maibi)2+2∑i=1maibi+1=...=1+∑i=1m2aibi+∑i=1mai2bi2+∑i=1m−1∑j=i+1m2aiajbibj\begin{aligned} (a\cdot{b}+1)^2&=(a\cdot{b})^2+2a\cdot{b}+1 \\&=(\sum_{i=1}^ma_ib_i)^2+2\sum_{i=1}^{m}a_ib_i+1 \\&=... \\&=1+\sum_{i=1}^{m}2a_ib_i+\sum_{i=1}^{m}a_i^2b_i^2+\sum_{i=1}^{m-1}\sum_{j=i+1}^{m}2a_ia_jb_ib_j \end{aligned} (a⋅b+1)2​=(a⋅b)2+2a⋅b+1=(i=1∑m​ai​bi​)2+2i=1∑m​ai​bi​+1=...=1+i=1∑m​2ai​bi​+i=1∑m​ai2​bi2​+i=1∑m−1​j=i+1∑m​2ai​aj​bi​bj​​
可以得到, (a⋅b+1)2=Φ(a)+Φ(b)(a\cdot{b}+1)^2=\Phi(a)+\Phi(b)(a⋅b+1)2=Φ(a)+Φ(b),Amazing吧!大家可能不知道这意味着什么?因为我们之后利用SVM将低维投射到高维时,经常需要计算Φ(a)⋅Φ(b)\Phi(a)\cdot\Phi(b)Φ(a)⋅Φ(b),但是在m22\frac{m^2}{2}2m2​维空间的计算复杂度是O(m2)O(m^2)O(m2)(因为要分别对m22\frac{m^2}{2}2m2​项做乘法运算,数量级是m2m^2m2,就把12\frac{1}{2}21​省略了),计算复杂度非常高。但现在,我们就可以直接在mmm维空间中做a⋅ba\cdot{b}a⋅b,再加1和平方,计算复杂度就只有O(m)O(m)O(m),被大大减小。

换句话说,我们就是在没增加计算复杂度的情况下实现了非线性分类。

Kernel Trick

上一节主要讲了如何解决非线性分类问题,提出了向高维投影的思想,并发现借助数学变换,可以用较低的计算复杂度实现高维向量的计算。那这个向高维映射和我们的SVM有什么关系呢?再回到我们推导的SVM的结果,分类器的表达式为g(x)=wx+bg(x)=wx+bg(x)=wx+b,其中,w=∑i=1lαiyixiw=\sum_{i=1}^{l}\alpha_iy_ix_iw=∑i=1l​αi​yi​xi​,b=1Ns∑s∈S(ys−∑m∈Sαmymxmxs)b=\frac{1}{N_s}\sum_{s\in{S}}(y_s-\sum_{m\in{S}}\alpha_my_mx_mx_s)b=Ns​1​∑s∈S​(ys​−∑m∈S​αm​ym​xm​xs​)(bbb的计算就是利用了b=y−wxb=y-wxb=y−wx,只不过是把SSS个点都计算了一遍,求了个均值)。但是这里计算出来的wx+b=0wx+b=0wx+b=0只适用于线性分类器,要做到解决非线性问题的话,就要用到上节讲过的升维了。

具体做法就是xixj⇒Φ(xi)Φ(xj)x_ix_j\Rightarrow\Phi(x_i)\Phi(x_j)xi​xj​⇒Φ(xi​)Φ(xj​),即w=∑i=1lαiyiΦ(xi)w=\sum_{i=1}^{l}\alpha_iy_i\Phi(x_i)w=∑i=1l​αi​yi​Φ(xi​),b=1Ns∑s∈S(ys−∑m∈SαmymΦ(xm)Φ(xs)b=\frac{1}{N_s}\sum_{s\in{S}}(y_s-\sum_{m\in{S}}\alpha_my_m\Phi(x_m)\Phi(x_s)b=Ns​1​∑s∈S​(ys​−∑m∈S​αm​ym​Φ(xm​)Φ(xs​),对应的分类器就为
g(x)=wx+b=∑i=1lαiyiΦ(xi)Φ(x)+1Ns∑s∈S(ys−∑m∈SαmymΦ(xm)Φ(xs)\begin{aligned} g(x)&=wx+b \\&=\sum_{i=1}^{l}\alpha_iy_i\Phi(x_i)\Phi(x)+\frac{1}{N_s}\sum_{s\in{S}}(y_s-\sum_{m\in{S}}\alpha_my_m\Phi(x_m)\Phi(x_s) \end{aligned} g(x)​=wx+b=i=1∑l​αi​yi​Φ(xi​)Φ(x)+Ns​1​s∈S∑​(ys​−m∈S∑​αm​ym​Φ(xm​)Φ(xs​)​
只不过还是我们之前说过的问题,直接计算Φ(x)\Phi(x)Φ(x)的复杂度太高,而Φ(xi)Φ(xj)\Phi(x_i)\Phi(x_j)Φ(xi​)Φ(xj​)可用xixjx_ix_jxi​xj​进行计算。因此,我们以后都是直接计算K(xi,xj)=Φ(xi)Φ(xj)K(x_i,x_j)=\Phi(x_i)\Phi(x_j)K(xi​,xj​)=Φ(xi​)Φ(xj​),不再单独计算Φ(x)\Phi(x)Φ(x)(这里,K()K()K()就是核函数的意思)。

因此,我们最终得到的非线性分类器就是
g(x)=∑i=1lαiyiK(xi,x)+1Ns∑s∈S(ys−∑m∈SαmymK(xm,xs))g(x)=\sum_{i=1}^{l}\alpha_iy_iK(x_i,x)+\frac{1}{N_s}\sum_{s\in{S}}(y_s-\sum_{m\in{S}}\alpha_my_mK(x_m,x_s)) g(x)=i=1∑l​αi​yi​K(xi​,x)+Ns​1​s∈S∑​(ys​−m∈S∑​αm​ym​K(xm​,xs​))
这便是我们想要的结果。

附录

1、几种常见的核函数:
Polynomial: K(xi,xj)=(xi⋅xj+1)dK(x_i,x_j)=(x_i\cdot{x_j}+1)^dK(xi​,xj​)=(xi​⋅xj​+1)d也就是我们之前提过的个Quadratic Basis Functions,可以将m维映射到m22\frac{m^2}{2}2m2​维空间。
Gaussian: K(xi,xj)=exp(−∣∣xi−xj∣∣22σ2)K(x_i,x_j)=exp(-\frac{||x_i-x_j||^2}{2\sigma^2})K(xi​,xj​)=exp(−2σ2∣∣xi​−xj​∣∣2​),映射到无穷维空间(最常用的核函数)。
Hyperbolic Tangent: K(xi,xj)=tanh(kxixj+c)K(x_i,x_j)=tanh(kx_ix_j+c)K(xi​,xj​)=tanh(kxi​xj​+c),映射到多少维(我不清楚,感兴趣的话,自己查一下)。
2、问题:是不是所有线性不可分问题映射到高维空间中都可以解决?
答:是的。因为有一个指标,叫“VC dimension”。其是用来描述模型的能力指数。如果说存在h个点,这h个点无论怎么被打标签,模型M都可以将其成功分开,则模型M的VBC dimension = h。

什么意思呢?n维空间的超平面的h值=n+1,比如:2维空间的超平面的h=3,即在2维空间中,如果有3个点,无论这3个点怎么摆放,都可以被一个超平面分开,如下图所示。

因此,无论有多少个点,就好比有50万个数据点,我们将其升到至少50万-1维空间,就一定可以存在一个超平面将这50万的数据点完美二分类,当然这里说的是最保守的估计(即所有数据点毫无规律,非常难分)。

这里就是简单讲一下VC dimension的概念,如果想了解的更多,可以自行百度。

初学者对于SVM的一点点学习心得相关推荐

  1. 一点点linux系统的学习心得

    我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...

  2. Surf算法学习心得(一)——算法原理

    Surf算法学习心得(一)--算法原理 写在前面的话: Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上 ...

  3. 计算机系统概述学后感,计算机操作系统学习心得体会总结(2)

    计算机操作系统学习心得体会篇四 课程设计是每一个大学生在大学生涯中都不可或缺的,它使我们在实践中了巩固了所学的知识.在实践中锻炼自己的动手能力;实习又是对每一位大学生所学专业知识的一种拓展手段,它让我 ...

  4. 我的数据分析秋招经历和学习心得【万字长文】

    刚刚签掉三方,秋招算是告一段落了. 很早就想写一篇文章了,给明年秋招的同学,以及准备进入数据分析领域的朋友,以期能给你们带来一些小小的帮助. 写这篇文章的主要原因一个就是想做个劝退,另一个是系统地给非 ...

  5. 计算机科学与技术学习心得(转载)

    计算机科学与技术学习心得 计算机科学与技术反思录 计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近 三年了,自己也做了一些思考,我一直认为计算机科学与技术这门专业,在本科阶段是 ...

  6. 吴恩达-神经网络和深度学习课程-学习心得(一)

    前言: 陆陆续续学完了吴恩达老师在网易云课堂上开设的深度学习工程师微专业的部分内容(01.神经网络与深度学习,04.卷积神经网络,02.改善深层神经网络),在进一步应用实践之前,对之前的学习的内容做个 ...

  7. 好文章 强烈推荐计算机专业的看,“计算机科学与技术学习心得”

    计算机科学与技术学习心得 撰文 曾毅 声明: 1.本文集众前辈及恩师之经验于一文,由我执笔总结前辈所感而已.并非尽我所言,特别说明基于南京大学网友sir在南京大学小百合站点发表的文章<理论计算机 ...

  8. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  9. 初中学习计算机基础,初中生计算机基础学习心得

    导语:为了提高自身的计算机管理业务素质,促进信息技术教学工作的顺利开展,我于2017年3月份在中小学继续教育网上选学了<计算机应用基础>的课程学习.以下是小编为您收集整理提供到的范文,欢迎 ...

  10. 数据科学学习心得_学习数据科学时如何保持动力

    数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...

最新文章

  1. PS切图篇(一)---界面设置
  2. 六年级小学python第四讲_python第四讲
  3. C++实现树的建立,查找,遍历输出
  4. 面试 Google, 我失败了!
  5. PHP 错误与异常 笔记与总结(14 )记录和发送异常信息
  6. [PHP]常量的一些特性
  7. python实现Redis订阅发布
  8. [Android] 环境优化配置Android Studio发展NDK
  9. IAR环境配置教程(CC2530版)
  10. python不用模块随机列表_python不用库实现随机 如何用python实现随机抽取
  11. win7打开xp共享的计算机,xp/win7局域网共享软件
  12. oracle_java.exe,系统找不到C:\ProgramData\Oracle\Java\javapath\java.exe问题及解决方案
  13. MSP430F149实现超声波测距并通过串口和PC机通信进行显示
  14. EBP 和 ESP 详解
  15. java全角转半角,半角转全角的方法
  16. unity-shader-光照相关
  17. 凌动智行就相关问题发布股东信
  18. 201901建站运维笔记 22A
  19. Class类(基本介绍、常用方法)
  20. 网易非人学园手游6月22日双端上线,这款漫画恶搞风5V5对战手游你喜欢吗?

热门文章

  1. python量化投资19种方法_【Python量化投资】新手资源大合集
  2. word如何批量免费转PDF
  3. 【Unity实战100例】Unity读取加载Gif动图的两种方式
  4. 如何撰写软件详细设计内容?
  5. catia投图只投外轮廓线_catia作图小技巧
  6. Appium原理分析
  7. 时间序列分类实践介绍(使用Python代码)
  8. windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
  9. 人脸数据库汇总 (来自网络)
  10. SpringBoot自动装配原理,这一篇就够了!