支持向量机 SVM

写在前面:看了又忘,忘了又看的支持向量机。。总结一下大概有两个原因,一个是还没有真正掌握SVM的细节原理,二是没有将其用于实践。。但是还是想要在这里记录一下,以供下一次想看的时候可以直接切入SVM的核心问题。

SVM的基本概念和间隔的定义

1. SVM的基本概念

SVM是一种处理二分类任务的分类模型。

基本思想是基于训练集D,找到一个划分超平面将不同类别的样本分开。

SVM模型的基本定义是使距离超平面距离最近的不同类别样本点之间的距离最大。间隔最大使他有别于感知机。

SVM的学习策略是间隔最大化,可以形式化为求解凸二次规划问题。

2. SVM的分类

线性可分支持向量机:数据集线性可分,最大化“硬间隔”,学习得到一个SVM模型;

线性支持向量机:数据集大致线性可分(不能完全通过线性SVM分隔所有样本),最大化“软间隔”,学习得到一个SVM模型;

非线性支持向量机:数据集线性不可分,使用 kernel trick 和 软间隔最大化,学习得到一个SVM模型;

3. 函数间隔与几何间隔

函数间隔

超平面w^{T}x+b=0确定之后,\left |w^{T}x+b \right |可以表示样本x到超平面的距离,可以通过 y 和 w^{T}x+b 的符号是否一致来判断是否分类正确。因此引出了函数间隔为

定义1:超平面(w,b)关于数据集T的函数间隔定义为,T中所有样本点(xi,yi)到超平面(w,b)函数间隔的最小值。即

函数间隔存在的问题:函数间隔不适合用来最大化间隔值,因为同等倍数地增加w,b的值,例如w,b成倍增加变为2w,2b,超平面并未发生改变,但此时函数间隔变为原来的两倍。因此,函数间隔可以在超平面不变时取得任意大的值,这对于最大化间隔值而言没有任何意义。

几何间隔

正是由于函数间隔有这样的缺陷,我们必须找到一个真正能反应样本点到超平面距离的一个度量方式。几何间隔由此产生。

为了方便记忆,几何距离可以认为是从平面几何图形中推导出来的距离,如下图:

w为垂直于超平面的法向量,因此单位法向量=\frac{w}{\left \| w \right \|}. x0在超平面上,因此满足w^{T}x_{0}+b=0。现在知道x,那么x_{0}=x-\gamma \frac{w}{\left \| w \right \|},代入超平面公式得到,w^{T}(x-\gamma \frac{w}{\left \| w \right \|})+b=0。最后得到\gamma =\frac{w^{T}x+b}{\left \| w \right \|},几何间隔为\tilde{\gamma } =y\gamma =y*\frac{w^{T}x+b}{\left \| w \right \|}=\frac{\hat{\gamma }}{\left \| w \right \|}

定义2:超平面(w,b)关于数据集T的几何间隔定义为,T中所有样本点(xi,yi)到超平面(w,b)几何间隔的最小值。即

\tilde{\gamma }=min \tilde{\gamma }_{i}

几何间隔的好处:几何间隔在函数间隔基础上除以{\left \| w \right \|使得在w,b成倍缩放的时候,\tilde{\gamma }不会因此而改变,几何间隔\tilde{\gamma }只会随着超平面的变动而变动。因此它是能真正反映样本到超平面距离的间隔。

最大间隔分类器(模型的定义)

目标函数:max \tilde{\gamma }

约束条件:

因为函数间隔的定义是所有样本点到超平面的函数间隔的最小值。

由于函数间隔 \hat{\gamma } 可以随着w,b的缩放而变化,但是不影响超平面的位置,因此,为了后面方便优化,可以令 \hat{\gamma }=1,优化目标就变成了.使约束条件取等号的样本点就是支持向量,它们是距离超平面最近的点。如下图所示:

优化目标的其他形式

将max问题转为min问题:SVM的基本模型

优化目标是二次的,约束条件是线性的,因此这是一个凸二次规划问题。解决办法:采用拉格朗日乘子算法得到其“对偶问题”,通过求解对偶问题的解得到原始问题的最优解。具体而言,拉格朗日乘子法是将每条约束条件乘以一个拉格朗日乘子\alpha _{i}\geq 0,并将约束条件融合到目标函数中。该优化问题的拉格朗日函数为:

(L中到底是+还是-,后面到底是 减一 还是一减,为方便记忆可以记住是\frac{1}{2}\left \| w \right \|^{2}减去一个正数(因为\alpha _{i}\geq 0))

最让人头大的最小-最大以及最大-最小问题来了!!!

令 

\Theta (w)有两种情况:① 所有约束条件都满足的时候,即y_{i}(w^{T}x_{i}+b)\geq 1对所有样本都成立,此时\Theta (w)=\frac{1}{2}\left \| w \right \|^{2}

② 当有一个约束条件不满足时,即某个y_{i}(w^{T}x_{i}+b)<1,此时令\alpha _{i}=\infty,那么\Theta (w)=\infty

为了保证求得原问题的最小值,所有约束条件必须满足并且\alpha _{i}\geq 0;此时最小化\Theta (w)等价于最小化\frac{1}{2}\left \| w \right \|^{2}。如果约束条件不能全部得到满足,那么\Theta (w)=\infty,就不是我们最初要优化的目标了。具体写出来就是

     ——最小-最大

p*是该问题的最优值,且和原始问题等价,但这个问题不好直接求解,因为要直接求解w,b参数,α又不是等式约束,所以转换为该问题的对偶问题

                ——最大-最小

d*是新问题的最优值,且d* <= p*.在满足某些条件的情况下,这两者相等,这个时候就可以通过求解对偶问题最优值d* 来间接地求解原始问题最优值p*。这里可以参考博文:简易解说拉格朗日对偶

综上所述:将原问题转化为对偶问题的原因有两个,一是d* 是p* 的近似解,二是转化为对偶问题之后更容易求解。此时可以先求L对w,b的极小,再求对α的极大。

KKT条件

KKT条件的意义:对于一般任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。意思是:当一组解为最优解时,这组解一定满足KKT条件;但满足KKT条件的解不一定是最优解;当问题是凸优化问题并且找到一组解满足KKT条件,那么这组解一定是最优解!我们的SVM问题是一个典型的凸二次规划问题,因此只要找到一组满足KKT条件的解就等价于找到了最优解。

根据上面的结果,我们得到原始问题和对偶问题分别是:

原始问题:min\limits_{w,b}\,\, max\limits_{\alpha\geq 0}\, \, L(w,b,\alpha )=p*

对偶问题:max\limits_{\alpha\geq 0}\,\, min\limits_{w,b}\, \, L(w,b,\alpha )=d*

且原始问题和对偶问题最优值的关系为:d* ≤ p* (具体证明见 简易解说拉格朗日对偶

当两个问题的最优值相等时,求解得到的w,b,α就是原问题的最优解对应的参数。在一定条件下,d* == p* 成立,这个条件即 KKT条件。KKT条件的一般形式:

现有优化目标:

c(x)是不等式约束;h(x)是等式约束;

针对该问题的拉格朗日函数L为:

原始问题和对偶问题分别为:

      

原始问题和对偶问题最优值相等必须满足KKT条件:

\frac{\partial L}{\partial x}|_{x=x*}=0         ①

\alpha _{i}\geq 0                   ②

\alpha _{i}c_{i}(x^{*})=0         ③

c_{i}(x^{*})\leq 0             ④

\beta _{j}\neq 0                   ⑤

h_{j}(x^{*})= 0            ⑥

第一个条件是拉格朗日函数取极值时的必要条件;②、⑤是拉格朗日乘子在不等式和等式约束下的条件;③ 是互补松弛条件;④、⑥ 是原始问题的约束条件。

现在对应到我们上面的SVM实际例子中,

L对 w,b都可导-------条件1满足; \alpha _{i}\geq 0------条件2满足;将中间的负号放到求和符号里面去,得到\sum \alpha _{i}(1-(y_{i}(w^{T}x_{i}+b))),根据约束条件可知,(1-(y_{i}(w^{T}x_{i}+b)))=c_{i}\leq 0-------条件3,4可以满足;所以上面的原始问题通过满足KKT条件,转为对偶问题,现在求解对偶问题的最优值对应的参数,即为原始问题对应的最优值参数。

对偶问题的求解

主要分为三步:

① 固定 \alpha,使 L 关于w,b最小化(此时w,b为变量);

② 求关于 \alpha  的 L 的极大值(此时\alpha为变量);

③ 使用SMO算法求得拉格朗日乘子\alpha,从而求得w,b

① 求L 对w,b的偏导=0:

 将w 代入 L:

具体推导公式需要用到:\left \| w \right \|^{2}=w^{T}w,(a+b+c+....)(a+b+c+....)=aa+ab+ac+....+ba+bb+bc+....,w^{T}=\sum \alpha _{i}y_{i}x_{i}^{T}

 

② 求对α的极大,此时优化目标和约束条件为:

③ 采用SMO算法求解拉格朗日算子α,最终得到w=\sum \alpha _{i}y_{i}x_{i}, 

SMO算法参考https://blog.csdn.net/v_july_v/article/details/7624837#commentsedit

 

线性不可分SVM以及核函数

支持向量(support vector)

得到超平面(hyper plane)f(x)=w^{T}x+b 之后,当有新的数据点x需要分类时,只需要将x代入f(x),判断它的符号即可。具体计算公式如下:

关键点:內积<xi,x>。但是我们并不需要计算所有训练样本xi与测试样本x的內积,因为, 对于非支持向量,\alpha_i = 0。解释一下原因:直观上讲,这些非支持向量离超平面较远,对于超平面的确定没有任何影响。由于分类完全由超平面决定,所以无关点并不需要参与计算。从margin和优化目标角度来讲,

max

 

非支持向量点的函数间隔 >1,即y_{i}(w^{T}x_{i}+b)> 1,而 \alpha_i\geq 0,为了使 L 最大,\alpha_i=0

而对于支持向量来说,函数间隔=1,y_{i}(w^{T}x_{i}+b)= 1,不论\alpha_i取何值,L已经达到最大; 因此,若 \alpha_i> 0,则y_{i}(w^{T}x_{i}+b)= 1,所对应的样本点位于最大间隔边界上,是一个支持向量。

核函数(kernel)

接下来要引入核函数的概念,核函数的引入得益于上面对偶问题的求解,因此采用对偶问题求解SVM优化问题有两个好处:

①对偶问题更容易求解;② 可以引入核函数,将线性可分SVM推广到非线性可分SVM

当数据线性不可分时,上面求解的超平面不存在。怎么办呢?基本思路:要用线性分类器去学习非线性关系,需要选择一个非线性特征集,将数据写成新的形式,相当于使用一种映射,将数据映射到新的特征空间,再用线性分类器去学习。

 

因此,SVM的基本模型转变为:

f(x)=w^{T}\phi (x)+b

\phi (x):输入空间x -> 特征空间F的映射,然后再在F空间中使用线性分类器进行分类。

决策时,类比线性可分SVM,计算规则为:

此处的內积是样本x映射到特征空间之后的內积,由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算这个內积很困难。【如果有一种方式可以在特征空间中直接计算内积〈φ(xi · φ(x)〉就像在原始输入点的函数中一样,就有可能将两个步骤融合到一起建立一个非线性的学习器,就可以避开直接计算高维空间內积的障碍,这样直接计算的方法称为核函数方法:】

核是一个函数k,对于x,z, k(x,z)=\left \langle \phi(x),\phi(z) \right \rangle=\phi(x)^T\phi(z)

核函数简单例子-便于理解

二维平面用坐标X1,X2表示,该平面上有一组非线性可分的点如下图:

SVM针对非线性可分的情况是找到一个映射\phi (x),将二维数据映射到更高维空间。一条二次曲线可以写作:

如果定义一个二维到五维的映射:

\phi (X_1,X_2)=(X_1,X_1^2,X_2,X_2^2,X_1X_2)=(Z_1,Z_2,Z_3,Z_4,Z_5)

则二次曲线方程可以重写为:

这恰好是一个超平面方程,在这个五维空间中,数据将变得线性可分。

根据上面对偶问题,映射过后的优化目标变成了:

假设有数据 x_1=(\eta _1,\eta _2),x_2=(\xi _1,\xi _2),则\phi (x_1)=(\eta _1,\eta_1^2,\eta_2,\eta_2^2,\eta_1\eta_2) ,\phi (x_2)=(\xi _1,\xi _1^2,\xi _2,\xi _2^2,\xi _1\xi _2)\left \langle \phi (x_1),\phi(x_2) \right \rangle=\eta _1\xi _1+\eta _1^2\xi _1^2+\eta _2\xi _2+\eta _2^2\xi _2^2+\eta _1\xi _1\eta _2\xi _2    -----①

上面的方法是先将原始空间中的特征向量进行映射,然后再做內积运算;然而这个映射函数不是那么容易找到的,并且映射过后的维度可能非常大。

观察发现:     -----②

②式右半部分和①式右半部分形式很相似,只是在某些维度上进行了坐标伸缩,若令:

\phi (X_1,X_2)=(\sqrt{2}X_1,X_1^2,\sqrt{2}X_2,X_2^2,\sqrt{2}X_1X_2,1)=(Z_1,Z_2,Z_3,Z_4,Z_5,1),则 \left \langle \phi (x_1),\phi(x_2) \right \rangle=(\left \langle x_1,x_2 \right \rangle+1)^2

②式仅仅在原始特征空间上进行內积运算,再进行简单的平方运算就可以得到和之前①式相同的结果,但②式的计算复杂程度远远低于①式。若令k(x_1,x_2)=(\left \langle x_1,x_2 \right \rangle+1)^2=\left \langle \phi (x_1),\phi(x_2) \right \rangle,这就是我们需要的核函数。

常用的核函数

1. 线性核:k(x_1,x_2)=\left \langle x_1,x_2 \right \rangle

就是原始空间中的內积;当使用线性核函数时代表原始空间中的数据线性可分。本可以不用核函数的,但是为了使线性SVM和非线性SVM一致对应,统一使用核函数表示內积,因此才有了这个线性核函数。

2. 多项式核:k(x_1,x_2)=(\left \langle x_1,x_2 \right \rangle+R)^d

上面的例子就是多项式核 R=1,d=2时的情况;使用多项式核对应的高维空间的维度是:\binom{m+d}d,m是原始空间维度。

3. 高斯核

这个核就是最开始提到过的会将原始空间映射为无穷维空间的那个家伙。\sigma为高斯核的带宽,如果\sigma选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果\sigma选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数\sigma,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。-----(by JULY)

径向基函数:Radial Basis Function 简称 RBF,就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 ,可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小;最常用的径向基函数就是高斯核函数,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ^2) } 其中x_c为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。如果x和x_c很相近那么核函数值为1,如果x和x_c相差很大那么核函数值约等于0。

σ设置较小:高斯核函数“又高又瘦”,会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高而测试准确率不高的可能;

σ设置较大:高斯核函数“又扁又平”,造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率;

所以σ参数非常重要。

西瓜书上还有拉普拉斯核以及sigmoid核。P128

核函数总结

1. 当原始特征空间中的数据集线性不可分时,可以将原始空间映射到高维空间中,再用线性分类器学习;

2. 映射过后,原始对偶问题中将会出现\left \langle \phi (x_i),\phi(x_j) \right \rangle內积形式,映射后的空间维度可能非常大,因此计算量也会非常大;

3. 核函数的作用是什么呢?就是使 k(x_1,x_2)=\left \langle \phi (x_1),\phi(x_2) \right \rangle,它等价于将原始空间转换到高维空间,但是只在原始空间中进行计算,但实质分类效果却表现在高维空间中,大大降低了计算复杂度。

 

  软间隔&正则化

为什么有软间隔这个东东?简单来讲就是,前面讨论的内容都是假设训练样本在特征空间中线性可分,超平面能将所有样本都正确分类,所有样本都满足约束:y_{i}(w^{T}x_{i}+b)\geq 1(硬间隔,hard margin);但实际生活中的分类问题很难找到合适的核函数使得样本在特征空间中线性可分,或者即使找到了一个可以将数据完全分开的超平面,也很难断定这个线性可分的结果不是由于过拟合造成的。

如图所示,数据样本中可能存在很多噪声,有的数据点偏离正常位置很远,即离群点(异常值)outlier,为了将所有数据正确分类,超平面最终为黑色虚线。如果将outlier删除,最终的分类平面为红色实线,直观上看,红色实线超平面比黑色虚线分类面要好。SVM超平面本身只由少数几个支持向量决定,如果支持向量中包含outlier,那么这个超平面将受到outlier的极大影响。

因此,软间隔化的基本思想是:允许支持向量机在一些样本上出错,即允许某些样本不满足约束y_{i}(w^{T}x_{i}+b)\geq 1;约束条件为

y_{i}(w^{T}x_{i}+b)\geq 1-\xi_i\, \, \, \, \, \, \, \xi_i\geq 0

其中 \xi_i 称为松弛变量(slack variable),它表示outlier与函数间隔 \hat{\gamma } 的偏离距离。\xi_i 如果任意大,那么任意一个超平面,所有样本都满足这个约束,这显然是不行的。因此对 \xi_i 也要有一定的约束,即 min\, \sum_{i=1}^{n}\xi _i,那么SVM基本模型就变成了:

min\, \frac{1}{2}\left \| w \right \|^2+C\sum_{i=1}^{n}\xi _i

s.t.\, y_i(w^{T}x_i+b)\geq 1-\xi _i

\, \, \, \, \xi _i\geq 0\, \, \, \, i=1,2,...,n

上面的优化目标就是“软间隔支持向量机”。

C是一个事先确定好的常量,用于控制目标函数中两项之间的权重(1.寻找最大间隔;2.样本点偏差量最小);极端情况下,C无穷大时,要求\sum_{i=1}^{n}\xi _i=0,即所有样本均需满足约束;当C为常量时,允许部分样本不满足约束。

软间隔下的对偶问题

将软间隔支持向量机的优化目标表示成拉格朗日函数形式:

L(w,b,\xi,\alpha,r)=\frac{1}{2}\left \| w \right \|^2+C\sum_{i=1}^{n}\xi _i-\sum_{i=1}^{n}\alpha_i(y_i(w^{T}x_i+b)-1+\xi _i)-\sum_{i=1}^{n}r_i\xi_i          ①

s.t.\, \xi_i,\alpha_i,r_i\geq 0,\, \, \, \, i=1,2,...,n

求解参数过程与之前一样,求对偶问题。注意求的是L对 w, b, \xi的最小,L对\alpha ,r的最大。

       \frac{\partial L}{\partial \xi_i}=0\Rightarrow C-\alpha_i-r_i=0\Rightarrow \alpha_i+r_i=C

将上面三个式子代回①式,得到:

L(w,b,\xi,\alpha,r)=\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_jx_i^{T}x_j

s.t. \sum_{i=1}^{n}\alpha_iy_i=0

0\leq \alpha _i\leq C

上面的优化问题就是软间隔下对偶问题。很神奇对不对! \xi 和 r 都不在了,与硬间隔下的对偶问题唯一区别就是由于\alpha_i+r_i=C,并且r_i\geq 0,所以,0\leq \alpha _i\leq C 。一张图总结:

 

软间隔下的KKT条件

与硬间隔类似,软间隔下的对偶问题最优值与原始问题最优值相等,必须满足KKT条件:

\frac{\partial L}{\partial w}|_{w=w*}=0

\frac{\partial L}{\partial b}|_{b=b*}=0-----------①

\alpha_i\geq 0\, \, \, ,r_i\geq 0-------------②

y_i(w^{T}x_i+b)-1+\xi _i\geq 0---------③

\alpha_i(y_i(w^{T}x_i+b)-1+\xi _i)= 0--------④

\xi_i\geq 0----------⑤

r_i\xi_i= 0--------⑥

可以看出,我们的原始问题都满足KKT条件,所以对偶问题求出来的最优值就是原始问题的最优值。

梳理一下拉格朗日乘子的取值以及样本点分类情况:

① \alpha_i= 0-----------该样本对决策平面没有任何影响

\alpha_i> 0------------y_i(w^{T}x_i+b)=1-\xi _i,该样本点为支持向量(离群点和错分样本点都是支持向量)

C> \alpha_i> 0\Rightarrow r_i>0\Rightarrow \xi _i=0-----------------样本点在最大间隔边界上

④.1   \alpha_i=C\Rightarrow r_i=0 且 1>\xi_i>0------------------0<y_i(w^{T}x_i+b)<1,样本点被正确分类,落在超平面和最大边界之间;

④.2   \alpha_i=C\Rightarrow r_i=0 且 \xi_i>1 -------------------------y_i(w^{T}x_i+b)<0,样本点被错误分类。

④.3   \alpha_i=C\Rightarrow r_i=0 且 \xi_i=1 -------------------------y_i(w^{T}x_i+b)=0,样本点在超平面上。

由此可知,软间隔支持向量机的决策平面仍然只与支持向量有关,即通过采用hinge损失函数仍然保持了稀疏性。(所谓的稀疏性就是指许多样本点的\alpha_i= 0,使得决策平面只与少数支持向量有关),这也是hinge损失函数的好处。

正则化

西瓜书P133提到了SVM的更一般化形式:

min_{f}\, \Omega (f)+C\sum_{i=1}^{m}l(f(x_i),y_i)

第一项用于描述划分超平面的间隔大小;第二项用于描述训练集上的误差。

\Omega (f) 称为“结构风险”,用于描述f某些性质,表示我们希望模型具有何种性质(例如希望获得负责度更小的模型);也就是正则化项,用于降低经验风险最小化时的过拟合风险。

\sum_{i=1}^{m}l(f(x_i),y_i)称为“经验风险”,用于描述模型与训练数据的契合程度(损失函数就是干这个的);

C是正则化常数,用于对二者进行折中。

SVM的损失函数

软间隔SVM,西瓜书中(P130)提到了替代损失函数这一概念,在此添加一点记录。

 软间隔就是允许部分样本不满足约束条件y_{i}(w^{T}x_{i}+b)\geq 1,但是不满足约束条件的样本要越少越好,所以优化目标可以写作:

min\, \frac{1}{2}\left \| w \right \|^2+C\sum_{i=1}^{n}l_{0/1}(y_{i}(w^{T}x_{i}+b)- 1)           ①

l_{0/1}(z)=\left\{\begin{matrix} 1,if z<0& \\ 0,if z\geq 0& \end{matrix}\right.

这就是0/1损失函数,当样本满足约束条件时,z≥0,l=0;否则 l=1。

但是由于l_{0/1}损失函数非凸,非连续,数学性质不好(可以想象一下l_{0/1}的函数形状),使得①式不好求解,所以通常用其他的损失函数来替代l_{0/1}函数,称为“替代损失”。替代损失函数一般具有较好的数学性质,比如是凸函数且是连续的。常用的替代损失函数有:

hinge损失:l_{hinge}(z)=max(0,1-z)

指数损失:l_{exp}(z)=exp(-z)

对率损失:l_{log}(z)=log(1+exp(-z))

软间隔SVM通常采用的是hinge损失,所以①式可以转化为:

min\, \frac{1}{2}\left \| w \right \|^2+C\sum_{i=1}^{n}max(0,1-y_{i}(w^{T}x_{i}+b))          ②

由此引入松弛变量 \xi _i,②式重写为:

min\, \frac{1}{2}\left \| w \right \|^2+C\sum_{i=1}^{n}\xi _i               ③

s.t.\, y_i(w^{T}x_i+b)\geq 1-\xi _i          ④

\, \, \, \, \xi _i\geq 0\, \, \, \, i=1,2,...,n                  ⑤

为什么可以重写为这样呢?看③-⑤是否与②等价。

④、⑤式,可以写作:\xi _i\geq 1-y_i(w^{T}x_i+b)\, \, \, \, \, \, \xi _i\geq 0,也就是说 \xi _i 的下限为1-y_i(w^{T}x_i+b) 或者 0;而为了使③式最小化,\xi _i 会取得它的下限。所以当1-y_i(w^{T}x_i+b)>0时,\xi _i 会取1-y_i(w^{T}x_i+b);而当1-y_i(w^{T}x_i+b)\leq 0时,\xi _i会取0.这与②式完全等价。

所以最上面的软间隔SVM讨论一开始就给出了③-⑤式的形式,实际上暗藏了:软间隔SVM使用hinge损失函数这个性质。

SVM简单小结

1. SVM主要用于处理分类问题 \Rightarrow 模型为一个超平面w^{T}x+b \Rightarrow 寻找最大几何间隔 \Rightarrow 转化为凸优化问题 min\, \frac{1}{2}\left \| w \right \|^2

\Rightarrow 转化为拉格朗日对偶问题求解参数 \Rightarrow 转为求解拉格朗日乘子 \alpha_i  \Rightarrow 采用高效的SMO算法求解 

2. 线性不可分时,引入核函数,核函数的妙处在于,只需要在原始特征空间中进行计算,但最终的分类效果却可以表现在高维空间中;大大减小了计算量;

3. 软间隔SVM允许部分样本分类错误;其中涉及到hinge损失函数以及松弛变量 \xi _i;计算方法与硬间隔SVM一样。支持向量包括在最大间隔边界上的点以及分类错误的点,意思是只有这些样本点对超平面才有影响。

 

SVM与LR的区别与联系

联系:

① 都是用于处理分类问题,且以线性模型为基础;

② 但是如果对原始特征空间做高维映射,模型对参数w仍然是线性的,但可以解决非线性问题。所以逻辑回归和SVM一样,采用kernel trick 都可以处理非线性问题。

区别:

损失函数不同,逻辑回归采用的是对数损失函数,SVM(软间隔时)采用hinge损失函数;但是这两种损失函数都是增大对分类平面影响较大的样本点的权重,减小与分类关系较小样本点的权重。只不过SVM只考虑少数样本点——支持向量,而逻辑回归则是减小离分类平面较远的点的权重。

② 损失函数的优化方法不同,逻辑回归采用梯度下降法,SVM采用SMO算法;

③  逻辑回归考虑所有点,预测开销更大;而SVM只考虑部分点,得到的解具有稀疏性;

④ 逻辑回归在预测类别的同时给出了概率;而SVM不具有概率意义(经过特殊处理可以得到);

sklearn中SVM的几个重要参数

sklearn.svm.SVC ()

1.  C(default=1.0):错分样本的惩罚参数,默认为1;也就是上面叙述中软间隔SVM优化目标中的C。

2.  class_weight :{dict, ‘balanced’}:

1)dict{0:x1,1:x2}自定义错分样本惩罚系数,将C设置为class_weight[0]*x1,class_weight[1]*x2(通过设置这个就可以实现代价敏感学习模型,即0类错分为1类的代价为x1,1类错分为0类的代价为x2.若1类为少数类,则应该设置x2>x1)

2)balanced:自适应,将C设为 n_samples / (n_classes * np.bincount(y)), y={0,1},所以bincount(y)就是 0,1类的各自的数量

3)none(默认):C=1

3. kernel:‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’;核函数,默认为‘rbf’

4. degree:多项式核的阶数;

5. gamma:‘rbf’, ‘poly’ and ‘sigmoid’ 核函数的系数;默认是 gamma = 1 / n_features,gamma和σ的关系:

6. shrinking:是否进行启发式

7. probability:以概率形式输出,若为False,则预测值以0,1标签形式输出。

参考:

https://blog.csdn.net/v_july_v/article/details/7624837#commentsedit

https://blog.csdn.net/TaoTaoFu/article/details/56843224

https://www.cnblogs.com/90zeng/p/Lagrange_duality.html

感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值