支撑向量机(Support Vector Machines): 在19世纪末火爆十年分类模型
学习内容:
目标函数
,计算过程和算法步骤
,线性SVM
,增加软间隔达到线性可分的SVM
(分类效果更好),核函数
,参数的计算方法SMO
。
文章目录
- 各种概念
- 使用核解决线性不可分
- 线性分类问题
- 建立目标函数
- 举例
- 线性支持向量机
- 损失函数
- 核函数
各种概念
- 线性可分SVM:数据集存在一条抽象的线可以完全将数据分成两类。
- 线性SVM:允许一定错误率的前提下,才满足第1条。
- 非线性SVM:核函数。线性可分SVM和线性SVM都可以通过增加核函数达到非线性的效果。
在中学数学知识中,下图中直线 L L L函数的方差为 y = 1 2 x + 1 y=\frac{1}{2}x+1 y=21x+1
我们用线代的知识对函数做个变形:
y = 1 2 x + 1 y=\frac{1}{2}x+1 y=21x+1
− x + 2 y + 1 = 0 -x+2y+1=0 −x+2y+1=0
抽取参数后:
( − 1 , 2 ) ( x y ) + 1 = 0 (-1,2)\begin{pmatrix} x \\ y \\ \end{pmatrix}+1 =0 (−1,2)(xy)+1=0
( − 1 , 2 ) (-1, 2) (−1,2) 这个向量我们可以看出是直线 L L L的一条法线(垂直于 L L L)将这个向量记为 w ⃗ \vec{w} w,将参数向量记为 x ⃗ \vec{x} x ,将截距项(常亮)记为b,于是有:
f ( x ⃗ ) = w ⃗ T ⋅ x ⃗ + b f(\vec{x})=\vec{w}^T\cdot\vec{x}+b f(x)=wT⋅x+b
如果参数 x ⃗ \vec{x} x是n维的,则 w ⃗ \vec{w} w也是n维的,b是一维的。
若将样本点 x 0 x_0 x0带入 w ⃗ T ⋅ x 0 ⃗ + b > 0 \vec{w}^T\cdot\vec{x_0}+b>0 wT⋅x0+b>0,则表示此点在法线同方向,同理小于0在法线逆方向。
使用核解决线性不可分
涉及核函数内容后面讲;
线性分类问题
实际上我们的痛苦不是分不出来,而是分割方式太多如何选择?
回顾中学计算点到直线距离的方式:
直线方程为 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0求点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)到直线的距离
直接套公式: d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} d=A2+B2∣Ax0+By0+C∣
由上文可知符号表方向,所以我们在此不考虑绝对值。 d = A x 0 + B y 0 + C A 2 + B 2 d=\frac{Ax_0+By_0+C}{\sqrt{A^2+B^2}} d=A2+B2Ax0+By0+C
变形: d = A A 2 + B 2 x 0 + B A 2 + B 2 y 0 + C A 2 + B 2 d=\frac{A}{\sqrt{A^2+B^2}}x_0+\frac{B}{\sqrt{A^2+B^2}}y_0+\frac{C}{\sqrt{A^2+B^2}} d=A2+B2Ax0+A2+B2By0+A2+B2C
简写一下,满足 A ′ , B ′ A',B' A′,B′平方和为1即可: A ′ x 0 + B ′ y 0 + C ′ A'x_0+B'y_0+C' A′x0+B′y0+C′
如上文也可以视为: w ⃗ ⋅ x ⃗ + b \vec{w}\cdot\vec{x}+b w⋅x+b
对于 A 2 + B 2 \sqrt{A^2+B^2} A2+B2,可以理解为 ( w 1 , w 2 , . . . ) ( w 1 w 2 . . . ) = w 1 2 + w 2 2 + . . . \sqrt{(w_1,w_2,...)\begin{pmatrix} w_1 \\ w_2 \\ ... \end{pmatrix}}=\sqrt{w_1^2+w_2^2+...} (w1,w2,...)⎝⎛w1w2...⎠⎞=w12+w22+...
定义二范式: ∣ ∣ w ⃗ ∣ ∣ = ( w 1 , w 2 , . . . ) ( w 1 w 2 . . . ) ||\vec{w}|| = (w_1,w_2,...)\begin{pmatrix} w_1 \\ w_2 \\ ... \end{pmatrix} ∣∣w∣∣=(w1,w2,...)⎝⎛w1w2...⎠⎞
则二范式的平方为 ∣ ∣ w ⃗ ∣ ∣ 2 = w ⃗ T ⋅ w ⃗ ||\vec{w}||^2=\vec{w}^T\cdot \vec{w} ∣∣w∣∣2=wT⋅w
所以n维的点到直线的距离可以写成:
d ( x 0 , l ) = w ⃗ ⋅ x ⃗ + b ∣ ∣ w ⃗ ∣ ∣ d(x_0,l)=\frac{\vec{w}\cdot\vec{x}+b}{||\vec{w}||} d(x0,l)=∣∣w∣∣w⋅x+b
在推导如何计算点到直线距离的时候我们忽略了绝对值(前面解释过是因为符号代表相对于法线的方向),但是样本中会有一个y值(定义负例为-1,正例为1)来标定这个样本的类别。那么我们可以将这个y值也放到公式中抵消符号:
d
(
x
0
,
l
)
=
(
w
⃗
⋅
x
⃗
+
b
)
y
i
∣
∣
w
⃗
∣
∣
d(x_0,l)=\frac{(\vec{w}\cdot\vec{x}+b)y^i}{||\vec{w}||}
d(x0,l)=∣∣w∣∣(w⋅x+b)yi
接下来我们找到距离直线最近的样本点
i
i
i。
min
i
=
1
,
2
,
.
.
.
(
f
(
x
i
;
w
,
b
)
)
\min_{i=1,2,...}(f(x^i;w,b))
i=1,2,...min(f(xi;w,b))
再比较每一条直线
j
j
j对应最近的点,找到距离最近点最远的直线。
max
j
=
1
,
2
,
.
.
.
(
min
i
=
1
,
2
,
.
.
.
(
f
(
x
i
;
w
,
b
)
)
)
\max_{j=1,2,...}(\min_{i=1,2,...}(f(x^i;w,b)))
j=1,2,...max(i=1,2,...min(f(xi;w,b)))
一不小心就推到了目标函数
我们总是想要找到使得
w
j
,
b
j
w_j,b_j
wj,bj在这个目标函数取最大。最小距离取最大
w
∗
,
b
∗
⟹
arg max
j
=
1
,
2
,
.
.
.
(
min
i
=
1
,
2
,
.
.
.
(
(
w
⋅
x
(
i
)
+
b
)
⋅
y
(
i
)
∣
∣
w
∣
∣
)
)
w^*,b^*\Longrightarrow \argmax_{j=1,2,...}(\min_{i=1,2,...}(\frac{(w\cdot x^{(i)}+b)\cdot y^{(i)}}{||w||}))
w∗,b∗⟹j=1,2,...argmax(i=1,2,...min(∣∣w∣∣(w⋅x(i)+b)⋅y(i)))
arg max
w
,
b
{
1
∣
∣
w
∣
∣
min
i
[
y
i
⋅
(
w
T
⋅
Φ
(
x
i
)
+
b
)
]
}
\argmax_{w,b}\{\frac{1}{||w||}\min_i[y_i \cdot (w^T \cdot \Phi(x_i)+b)]\}
w,bargmax{∣∣w∣∣1imin[yi⋅(wT⋅Φ(xi)+b)]}
这个目标函数太复杂了,还能不能简化呢?
函数中有很大一部分是表示距离的,假设我们让他除以一个系数(这个系数就是最近点到直线的距离,也就是将最小距离视为单位1),这样表示距离的公式部分就可以知己省略。
- 新目标函数:
arg max w , b 1 ∣ ∣ w ∣ ∣ \argmax_{w,b}\frac{1}{||w||} w,bargmax∣∣w∣∣1
建立目标函数
max
w
,
b
1
∣
∣
w
∣
∣
⇒
min
w
,
b
∣
∣
w
∣
∣
⇒
min
w
,
b
1
2
∣
∣
w
∣
∣
2
\max_{w,b}\frac{1}{||w||} \Rightarrow \min_{w,b}{||w||} \Rightarrow \min_{w,b}\frac{1}{2}{||w||^2}
w,bmax∣∣w∣∣1⇒w,bmin∣∣w∣∣⇒w,bmin21∣∣w∣∣2
s
.
t
.
y
i
(
w
T
⋅
Φ
(
x
i
)
+
b
)
≥
1
,
i
=
1
,
2
,
⋅
⋅
⋅
,
n
(
n
样
本
个
数
,
n
个
约
束
条
件
)
s.t. y_i(w^T \cdot \Phi(x_i) + b) \ge1 ,i=1,2,···,n (n样本个数,n个约束条件)
s.t.yi(wT⋅Φ(xi)+b)≥1,i=1,2,⋅⋅⋅,n(n样本个数,n个约束条件)
插入知识点,凸优化可以将最大最小问题转化为最小最大问题
拉格朗日乘子法
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 n α i ( y i ( w T ⋅ Φ ( x i ) + b ) − 1 ) L(w,b,\alpha)=\frac{1}{2}||w||^2-\sum_{i=1}^n\alpha_i(y_i(w^T\cdot \Phi(x_i)+b)-1) L(w,b,α)=21∣∣w∣∣2−i=1∑nαi(yi(wT⋅Φ(xi)+b)−1)
注:实际上还包含不等式约束。
- 分别对w,b求偏导并令其为0:
∂ L ∂ w = 0 ⇒ w = ∑ i = 1 n α i y i Φ ( x n ) \frac{\partial L}{\partial w} = 0 \Rightarrow w=\sum_{i=1}^n \alpha_iy_i\Phi(x_n) ∂w∂L=0⇒w=i=1∑nαiyiΦ(xn)
∂ L ∂ b = 0 ⇒ 0 = ∑ i = 1 n α i y i \frac{\partial L}{\partial b}=0 \Rightarrow 0=\sum_{i=1}^n\alpha_iy_i ∂b∂L=0⇒0=i=1∑nαiyi
举例
线性支持向量机
为了得到最宽的分隔带,未必完全正确的分隔所以样本。
接下来求解线性SVM目标函数:
min
w
,
b
,
ξ
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
≥
1
−
ξ
i
,
i
=
1
,
2
,
⋅
⋅
⋅
,
n
ξ
i
≥
0
,
i
=
1
,
2
,
⋅
⋅
⋅
,
n
\min_{w,b,\xi}\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i \\ s.t.\quad y_i(w\cdot x_i+b)\ge1-\xi_i,\quad i=1,2,···,n \\ \xi_i\ge0,i=1,2,···,n
w,b,ξmin21∣∣w∣∣2+Ci=1∑Nξis.t.yi(w⋅xi+b)≥1−ξi,i=1,2,⋅⋅⋅,nξi≥0,i=1,2,⋅⋅⋅,n
条 件 项 : y i ( w ⋅ x i + b ) − 1 + ξ i ≥ 0 每 项 乘 α i ( 1 , 2 , . . . , n ) α i ( y i ( w ⋅ x i + b ) − 1 + ξ i ) 每 项 乘 μ i ( 1 , 2 , . . . , n ) μ i ξ i 条件项:y_i(w\cdot x_i+b)-1+\xi_i\ge 0 \\ 每项乘 \alpha_i(1,2,...,n) \quad \alpha_i(y_i(w\cdot x_i+b)-1+\xi_i) \\ 每项乘\mu_i(1,2,...,n) \quad \mu_i\xi_i 条件项:yi(w⋅xi+b)−1+ξi≥0每项乘αi(1,2,...,n)αi(yi(w⋅xi+b)−1+ξi)每项乘μi(1,2,...,n)μiξi
拉格朗日函数:
L
(
w
,
b
,
ξ
,
α
,
μ
)
≡
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
n
ξ
i
−
∑
i
=
1
n
α
i
(
y
i
(
w
⋅
x
i
+
b
)
−
1
+
ξ
i
)
−
∑
i
=
1
n
μ
i
ξ
i
L(w,b,\xi,\alpha,\mu)\equiv\frac{1}{2}||w||^2+C\sum_{i=1}^n\xi_i-\sum_{i=1}^n\alpha_i(y_i(w\cdot x _i+b)-1+\xi_i)-\sum_{i=1}^n \mu_i\xi_i
L(w,b,ξ,α,μ)≡21∣∣w∣∣2+Ci=1∑nξi−i=1∑nαi(yi(w⋅xi+b)−1+ξi)−i=1∑nμiξi
对
w
,
b
,
ξ
w,b,\xi
w,b,ξ求偏导:
∂
L
∂
w
=
0
⇒
w
=
∑
i
=
1
n
a
i
y
i
ϕ
(
x
n
)
∂
L
∂
b
=
0
⇒
0
=
∑
i
=
1
n
a
i
y
i
∂
L
∂
ξ
i
=
0
⇒
C
−
a
i
−
μ
i
=
0
\frac{\partial L}{\partial w}=0 \Rightarrow w=\sum_{i=1}^n a_iy_i\phi(x_n)\\ \frac{\partial L}{\partial b}=0\Rightarrow 0=\sum_{i=1}^n a_iy_i\\ \frac{\partial L}{\partial \xi_i}=0\Rightarrow C-a_i-\mu_i=0
∂w∂L=0⇒w=i=1∑naiyiϕ(xn)∂b∂L=0⇒0=i=1∑naiyi∂ξi∂L=0⇒C−ai−μi=0
回带这三个式子:
损失函数
就是所有样本的损失(点到支撑线的距离)之和:
C
∑
i
=
1
n
ξ
i
C\sum_{i=1}^n\xi_i
Ci=1∑nξi
核函数
数据不总是线性可分的,对于非线性的数据处理的一种手段。
核技巧(kernel trick):
- 使用一个变换,将原空间的数据映射到新空间
- 在新空间例用线性分类学习方法训练数据中学习分类模型。