什么是SVM
支持向量机简称SVM是最大化分类间隔的线性分类器,如果使用核函数,可以解决非线性问题。支持向量机的目标是寻找一个分类超平面,它不仅能正确的分类每一个样本,并且要使得每一类样本中距离超平面最近的样本到超平面的距离尽可能远。
什么是SVM?我们可以知道SVM是一种二分类问题,那然后呢?SVM是一种二分类的排序方式,我们可以在线性空间中通过一根线,或者希尔伯特空间中的一个超平面确立一个将空间上的点二分,然后得到一个比较好的分类效果的算法。
那么SVM是怎么做到的呢?
我们先看一个趣味游戏:
将红白两种球散落在一张桌子上,我们需要将两种颜色不同的球进行分类,那么分类方案如下:
从上图的结果显示,要找出一根线分开红蓝这两类球,结果有很多,但从这三根线的最大间隔来讲,最优的还是黑线最优。然后我们还能再看,当我们将其中的一些球的位置再散乱些,球的数量再多些:
看来这个也是比较好得出结果的,但如果其中一些的篮球和对面的红球之间进行互换,那我们还能找到这样的一根线去分开它嘛?答案是有的,还是上面那幅图,那我再加一个红球在篮球阵营,那么这就只能是局部最优了:
初步看感觉还行,到时候推导或者写代码的时候可以将其当做异常值除去,或者一个另类的特征。但如果蓝球已经和红球完全混合,这应该怎么办?这可能将是一条曲线了,具体如下:
我们可以发现,这个问题已经由原来的线性可分变成了线性不可分,并且需要曲线才会有最大间隔,但其实这分离开这两类样本的并不是真的曲线,只是将原来的线性空间换成了希尔伯特空间.而已,下面我们来看下面这张图就知道了:
具体的可以看如下链接中的一分钟短视频(需要翻墙9):
https://www.youtube.com/watch?v=3liCbRZPrZA
然后我们可以假设的是,从上往下看,看到的二维平面很可能是下面的样子,呈现的是山峰状,被绿色圈起来的就是支持向量,而那条最明显的黑线就是超平面,其余的闭环是数据域:
那么我们便可以总结:把这些球叫做data,把直线叫做classifier, 找到最大间隙的trick叫做optimization,转换空间的步骤叫做kernelling, 分离开新空间点的平面叫做hyperplane,把距离平面最近的点叫做support vector。
SVM实例
我们可以看一个SVM的实例模型,西瓜书图6.3中,介绍的示例,这里可以看到什么是支持向量机:
我们知道点到直线的距离公式可以表示为:
d
=
∣
A
x
0
+
B
y
0
+
C
A
2
+
B
2
∣
d = \left | \frac{Ax_{0}+By_{0}+C}{\sqrt{A^{2}+B^{2}}} \right |
d=∣∣∣∣A2+B2Ax0+By0+C∣∣∣∣
那么同理,扩展到我们的超平面中,距离的表示公式变为:
d
=
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
d = \frac{|w^{T}x+b|}{{||w||}}
d=∣∣w∣∣∣wTx+b∣
其中
∣
∣
w
∣
∣
=
w
1
2
+
w
2
2
||w||=\sqrt{w_{1}^{2}+w_{2}^{2}}
∣∣w∣∣=w12+w22,为||w||的L2范数,
w
T
w^{T}
wT叫做超平面的法向量,b为位移量,而d我们称作为分类间隔。
另外,我们需要求解的,就是上图中的r,也就是公式中的d,但我们到底如何去求解才能将其最大化?或者说我们如何判断超平面是否将样本点正确分类?第一步应该就是解出它两边的约束,只有中间的间隔最大才能说明达到了最优化。
首先,我们需要求解出使其最大化的条件是什么,那么这里就要理解的变量是:
函数间隔和几何间隔
对于一个训练样本
(
x
i
,
y
i
)
(x_{i},y_{i})
(xi,yi)我们定义它到超平面
(
w
,
b
)
(w,b)
(w,b)的函数间隔为:
r
^
i
=
y
i
(
w
x
i
+
b
)
\hat{r}_{i} = y_{i}(wx_{i}+b)
r^i=yi(wxi+b)
我们当然希望上式的距离越大越好,因为越大,那么支持的距离也就越好,但事实并不是这样的,还是拿图6.3来看,在这个二维平面,我们可以知道函数间隔为
r
=
A
x
0
+
B
y
0
+
C
r=Ax_{0}+By_{0}+C
r=Ax0+By0+C,当我们成比例改变A、B、C的系数时,平面没有任何变化,但是直线却发生了很大的变化,导致与某些点之间的距离被拉远或者拉大所以我们需要对w起某种约束,使其间隔是确定的,这时函数间隔就变成了几何间隔。
r i = w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ r_{i}=\frac{w}{||w||}\cdot x_{i}+\frac{b}{||w||} ri=∣∣w∣∣w⋅xi+∣∣w∣∣b
这个二维平面上有两种点,我们分别对它们进行标记:
- 上方的加号标记为1,我们人为规定其为正样本;
- 下方的减号标记为-1,我们人为规定其为负样本。
所以在二维空间中,几何间隔就是点到直线的距离。在三维及以上空间中,就是点到超平面的距离。所以我们可以用几何间距来表示,而函数距离,就是上述距离公式中的分子。也就是上面我们求出的点到直线的距离公式。
那么理解了这一点,接下来我们就需要对这个距离最大化,根据前面我们进行的标记,可以得出:
{ w T x i + r ≥ 1 , ∀ y i = 1 w T x i + r ≤ − 1 , ∀ y i = − 1 \left\{\begin{matrix} w^{T}x_{i}+r\geq 1 , \forall y_{i}=1 & \\ \\ w^{T}x_{i}+r\leq -1, \forall y_{i}=-1 & \end{matrix}\right. ⎩⎨⎧wTxi+r≥1,∀yi=1wTxi+r≤−1,∀yi=−1
对上式进一步化简,可以得到:
y i ( w T x i + r ) ≥ 1 y_{i}(w^{T}x_{i}+r)\geq 1 yi(wTxi+r)≥1
那么最终得出的式子,正是因引用了几何间隔以及标记的作用,即为我们的约束方程。
再来看看我们的目标方程,我们可以从图中看到画圈的点即为支持向量,而它们都在偏移量为-1和1的直线上,所以可以得到:
∣
w
T
x
i
+
r
∣
=
1
,
∀
支
持
向
量
点
x
i
=
1
|w^{T}x_{i}+r| = 1, \forall 支持向量点x_{i}=1
∣wTxi+r∣=1,∀支持向量点xi=1
所以,我们的目标函数由于分子为1,那么就变成了:
m
a
x
:
d
=
1
∣
∣
w
∣
∣
max: \ \ d = \frac{1}{{||w||}}
max: d=∣∣w∣∣1
但实际情况中,我们更喜欢求解的是最小化问题,这样有利于我们的计算,所以我们将上式转换为:
m
i
n
:
d
=
1
2
∣
∣
w
∣
∣
min: \ \ d = \frac{1}{2}||w||
min: d=21∣∣w∣∣
按常理来讲是没有1/2的,但这一步是为了后面好求导而准备的,并且这样做并没有对最优化求解有丝毫影响,所以我们得到了支持向量机的数学模型为:
m i n : d = 1 2 ∣ ∣ w ∣ ∣ s . t y i ( w T x i + r ) ≥ 1 , i = 1 , 2 , . . . , n \begin{matrix} min: \ \ d = \frac{1}{2}||w|| \\ & \\ s.t \ \ y_{i}(w^{T}x_{i}+r)\geq 1, \ \ i=1,2,...,n & \end{matrix} min: d=21∣∣w∣∣s.t yi(wTxi+r)≥1, i=1,2,...,n
SVM解析
首先我们的原目标函数为:
a
r
g
m
a
x
w
,
b
{
1
∣
∣
w
∣
∣
m
i
n
i
[
y
i
(
w
T
(
x
i
)
+
b
)
]
}
\underset{w,b}{arg max}\left \{ \frac{1}{||w||}\underset{i}{min}[y_{i}(w^{T} (x_{i})+b)] \right \}
w,bargmax{∣∣w∣∣1imin[yi(wT(xi)+b)]}
经过上面的推导,我们可以得出总的支持向量机模型为:
m i n : d = 1 2 ∣ ∣ w ∣ ∣ s . t y i ( w T x i + r ) ≥ 1 i = 1 , 2 , . . . , n min: \ \ d = \frac{1}{2}||w|| \\ \ s.t \ \ y_{i}(w^{T}x_{i}+r)\geq 1 \ \ i=1,2,...,n min: d=21∣∣w∣∣ s.t yi(wTxi+r)≥1 i=1,2,...,n
但这样的约束还是很难求,我们不知道它什么时候取最大值,另外就是假如是引入高维空间的话,由于不是正定,这个QP问题将逐渐转变成NP-complete问题,所以,我们不妨将有约束条件用拉格朗日对偶算法成无约束方程,所以定义拉格朗日函数为:
L ( w , b , a ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 m a i ( y i ( w ⋅ x i + b − 1 ) ) L(w,b,a) = \frac{1}{2}||w||^{2} - \sum_{i=1}^{m}a_{i}(y_{i}(w\cdot x_{i}+b -1)) L(w,b,a)=21∣∣w∣∣2−i=1∑mai(yi(w⋅xi+b−1))
这里为什么要用拉格朗日函数和相应的证明可以看下面两篇博文还有统计学习方法附录C:
为什么SVM要用拉格朗日对偶算法来解问题?
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
m
a
x
a
m
i
n
w
,
b
L
(
w
,
b
,
a
)
\underset{a}{max} \ \underset{w,b}{min}L(w,b,a)
amax w,bminL(w,b,a)
将拉格朗日函数
L
(
w
,
b
,
a
)
\ L(w,b,a)
L(w,b,a)对
w
,
b
\ w,b
w,b求偏导数并令其等于0:
{
∀
w
L
(
w
,
b
,
a
)
=
w
−
∑
i
=
1
m
a
i
y
i
x
i
=
0
∀
b
L
(
w
,
b
,
a
)
=
−
∑
i
=
1
m
a
i
y
i
=
0
\left\{\begin{matrix} \forall_{w} L(w,b,a) = w - \sum_{i=1}^{m}a_{i}y_{i}x_{i} = 0 & \\ \\ \forall_{b} L(w,b,a) = -\sum_{i=1}^{m}a_{i}y_{i} = 0 & \end{matrix}\right.
⎩⎨⎧∀wL(w,b,a)=w−∑i=1maiyixi=0∀bL(w,b,a)=−∑i=1maiyi=0
得:
{
w
=
∑
i
=
1
m
a
i
y
i
x
i
0
=
−
∑
i
=
1
m
a
i
y
i
\left\{\begin{matrix} w = \sum_{i=1}^{m}a_{i}y_{i}x_{i} & \\ \\ 0 = -\sum_{i=1}^{m}a_{i}y_{i} & \end{matrix}\right.
⎩⎨⎧w=∑i=1maiyixi0=−∑i=1maiyi
再将上面两个偏导带入对偶式中,得到的优化方程为:
由于ai和yi都是实数,因此转置后与自身一样,所以可以得到上式。
(不知道为啥上面这段代码在csdn出不来,但是在latex还有axmath显示正常,去百度了好久,寻找无果,那么本篇就到这里吧。。。)
未完待续
下次争取全部写完。