机器学习之SVM(支持向量机)算法详解

1-1 基本流程

一、概念:

SVM:寻找到一个超平面使样本分成两类,并且间隔最大。而我们求得的w就代表着我们需要寻找的超平面的系数
这里写图片描述

与超平面的距离表示分类的确信度, 距离越远则分类正确的确信度越高
这里写图片描述

超平面方程

一条直线方程, 其中m是斜率, c是直线在y轴的截距:y = mx + c

超平面的一般方程如下:

w T x = 0

其中w和x是向量, w^Tx是两个向量的点积。 向量w通常被称为权重。 w,x皆为向量,
wx+b=0就是a1*x1+a2*x2+…an*xn+b=0

二维空间里面, 一条直线的方程可以表示为: Ax+By+C=0
三维空间里面, 平面的方程可以表示为: Ax+By+Cz+D=0
依次推广, n维空间的超平面方程可以表示为:
0Ax1+Bx2+Cx3+Dx4+Ex5+Fx6+….+K=0
因为n维空间对应的是n维坐标系, 仅仅用x、 y、 z几个字母较难表示, 所以此处用x1、 x2、 x3、 …、 xn来表示n维坐标系, 各个维度的系数此处也可以用w1、
w2、 w3、 …、 wn来表示, 所以n维空间里面的超平面方程可以写成如下形式:
w1x1+w2x2+w3x3+w4x4+…+wnxn+b=0

这里写图片描述
求:超平面间距离

x 2 = x 1 + t w D = | | t w | | = | t | | | w | | w . x 2 + b 2 = 0 w . ( x 1 + t w ) + b 2 = 0 w . x 1 + t | | w | | 2 + b 2 = 0 ( w . x 1 + b 1 ) b 1 + t | | w | | 2 + b 2 = 0 b + t | | w | | 2 + b 2 = 0 t = b 2 b 1 | | w | | 2 D = | t | | | w | | D = b 2 b 1 | | w | | 2 | | w | | = b 2 b 1 | | w | |

最大化2||w||,等价于最小化1\2*||w||^2
满足约束:yi(w^txi+b) >=1

SVM为什么采用间隔最大化?
间距大增大了超平面到支持向量点的距离,增强对未知分类的泛化能力

超平面线性方程:

w T x + b = 0

样本中任意点到超平面距离:
r = | w T x + b | | | w | |

求解过程如下:
这里写图片描述

二、数学模型:

样本正确分类:
数据集(x1,y1)(x2,y2)到(xn,yn)
y(x)=w^Tθ(x)+b
y为样本的类别:
当x为正例时候 y = +1
当x为负例时候 y = -1
可得

y ( x i ) > 0 > y i = + 1

y ( x i ) < 0 > y i = 1

可推出
y i . y ( x i ) > 0

找到一个条线(w和b),使得离该线最近的点能够最远argmax(w,b)使得min(最近的点到该线的距离)
y i . ( w T . Φ ( x i ) + b ) | | w | |

对于线(w,b)可以通过缩放使得其结果值|y|≥1
y i . ( w T . Φ ( x i ) + b ) 1

a r g m a x w , b { 1 | | w | | m i n i [ y i . ( w T . Φ ( x i ) + b ) ] }

a r g m a x w , b 1 | | w | |

目标函数: m a x w , b 1 | | w | | 且(约束条件) y i . ( w T . Φ ( x i ) + b ) 1
转换成最小值: m i n w , b 1 2 w 2 y i . ( w T . Φ ( x i ) + b ) 1

拉格朗日乘子法标准格式:
min f(x)
st gi(x)≤0, i = 1,…,m

拉格朗日乘子法为:

F ( x , λ ) = f ( x ) + k = 1 I λ k h k ( x )

约束条件为:
1 y i . ( w T . Φ ( x i ) + b ) 0

并且:
f ( x ) = 1 2 w 2

h ( x ) = 1 y i . ( w T . Φ ( x i ) + b )

带入拉格朗日乘子法得:
L ( w , b , a ) = 1 2 | | w | | 2 i = 1 n a i ( y i . ( w T . Φ ( x i ) + b ) 1 )

分别对w和b求偏导(求极值),分别得到两个条件
δ L δ w = 0   =>     w = i = 1 n a i y i Φ ( x i ) δ L δ b = 0   =>     0 = i = 1 n a i y i

推导如下:
L ( w , b , a ) = 1 2 | | w | | 2 i = 1 n a i ( y i . ( w T . Φ ( x i ) + b ) 1 ) = 1 2 w T w w T i = 1 n a i y i Φ ( x i ) b i = 1 n a i y i + i = 1 n a i = i = 1 n a i 1 2 ( i = 1 n a i y i Φ ( x i ) ) T i = 1 n a i y i Φ ( x i ) = i = 1 n a i 1 2 i = 1 , j = 1 n a i a j y i y j Φ T ( x i ) Φ ( x i )

为了解决个别正例和负例样本点很接近时,引入松弛因子
当C趋近于无穷大时,容忍度越低,分类越严格
当C趋近于很小时,意味着容忍度很高
yi(w·xi+b)≥1-ζ
目标函数:
m i n 1 2 | | w | 2 + C i = 1 n ζ i

L ( w , b , ζ , a , u ) = 1 2 | | w | | 2 C i = 1 n a i ( y i . ( w T . x i + b ) 1 + ζ i ) i = 1 n u i ζ i

可以推出:
w = i = 1 n a i y i . Φ ( x i ) 0 = i = 1 n a i y i C a i u i = 0

带入原式:
1 2 i = 1 n j = 1 n a i a j y i y j ( x i . x j ) + i = 1 n a i i = 1 n a i y i = 0 C a i u i = 0 a i 0 u i 0 0 a i C

仍然求对偶函数
m i n 1 2 i = 1 n j = 1 n a i a j y i y j ( x i . x j ) i = 1 n a i i = 1 n a i y i = 0 0 a i C

1-2 核问题

一、核函数

假设X是输入空间,H是特征空间,存在一个映射ž使得X中的点x能够计算得到H空间中的点h,对于所有的X中的点都成立:

h = Φ ( x )

若x,z是X空间中的点,函数k(x,z)满足下述条件,那么都成立,则称k为核函数,而ž为映射函数:
k ( x , z ) = Φ ( x ) . Φ ( z )

我们现在考虑核函数 K ( v 1 , v 2 ) =< v 1 , v 2 > 2 ,即“内积平方”。
这里面 v 1 = ( x 1 , y 1 ) , v 2 = ( x 2 , y 2 ) 是二维空间中的两个点。
这个核函数对应着一个二维空间到三维空间的映射,它的表达式是:
P ( x , y ) = ( x 2 , 2 x y , y 2 )

可以验证,
< P ( v 1 ) , P ( v 2 ) > = < ( x 1 2 , 2 x 1 y 1 , y 1 2 ) , ( x 2 2 , 2 x 2 y 2 , y 2 2 ) > = x 1 2 x 2 2 + 2 x 1 x 2 y 1 y 2 + y 1 2 y 2 2 = ( x 1 x 2 + y 1 y 2 ) 2 = < v 1 , v 2 > 2 = K ( v 1 , v 2 )

在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:
1) 线性:
K ( v 1 , v 2 ) =< v 1 , v 2 >

2) 多项式:
K ( v 1 , v 2 ) = ( γ < v 1 , v 2 > + c ) n

3) Radial basis function:
K ( v 1 , v 2 ) = exp ( γ | | v 1 v 2 | | 2 )

4) Sigmoid:
K ( v 1 , v 2 ) = tanh ( γ < v 1 , v 2 > + c )

在 SVM 中设定一个参数「C」;从而你可以在两种结果中权衡:
1. 拥有很宽的间隔;
2. 精确分离训练数据;
C 的值越大, 意味着在训练数据中允许的误差越少。
必需强调一下这是一个权衡的过程。如果想要更好地分类训练数据, 那么代价就是间隔会更宽。以下几个图展示了在不同的 C 值中分类器和间隔的变化(未显示支持向量) 。
这里写图片描述
1、 对于线性可分数据, SVM 工作地非常出色。
2、对于近似线性可分数据, 只要只用正确的 C 值, SVM 仍然可以工作地很好。
3、对于线性不可分数据,可以将数据映射到另一个空间使数据变得完美或者几乎完美
线性可分, 将问题回归到了 1 或者 2。
映射到高维空间:
x i = ( x i 1 , x i 2 )

其对应的映射点的坐标为:
x i = ( x i 1 2 , x i 2 2 , 2 x i 1 x i 2 )

二、常用核函数:

①线性核

线性核, 主要用于线性可分的情况,我们可以看到特征空间到输入空间的维度是一样的,其参数少速度快,对于线性可分数据, 其分类效果很理想。

K ( x i , x j ) =< x i T , x j >

②多项式核

多项式核, 可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候, 核矩阵的元素值将趋于无穷大,计算复杂度会大到无法计算。 (d≥1为多项式的次数)

K ( x i , x j ) = ( x i T , x j ) d

③高斯(RBF) 核函数

斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个, 无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核
函数的时候, 优先使用高斯核函数多项式核。(σ>0为高斯核的带宽 )

K ( x i , x j ) = e x p ( | | x i T x j | | 2 2 σ 2 )

④sigmoid核函数

采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。 ( tanh为双曲正切函数, β>0,θ<0)

K ( x i , x j ) = t a n h ( β x i T x j + θ )

四、核函数选择依据及核矩阵:

核函数选择依据:
1,如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM;
2,如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数;
3,如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

小结

SVM优点:
1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网络等算法)
4、可以很好的处理高维数据集。
5、泛化能力比较强。

SVM缺点:
1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺失数据敏感。

猜你喜欢

转载自blog.csdn.net/sinat_30353259/article/details/80991273