支持向量机(Support Vector Machine)
以前非常厉害的一个算法,不过后来遇到了对手——神经网络
这个也是面试的时候经常会问到的非常重要的一个算法
- 这两个图分别用不同的决策边界
- 可见,第二个图的决策边界更好,与两边的距离更宽,区分度越明显
为了更好理解边界的划分过程,我们先推导一下点到平面的距离公式
引用百度百科的一张图
- 我们简化一下:这里我们设
w
→
\overrightarrow{w}
w是平面的法向量,则平面可以表示为
w
→
X
+
b
=
0
\overrightarrow{w}X+b=0
wX+b=0,我们假设空间中一点坐标为
e
=
(
x
,
y
,
z
)
e=(x,y,z)
e=(x,y,z)我们推导出来
d = 1 ∣ w → ∣ ∣ w → e + b ∣ d=\frac{1}{|\overrightarrow{w}|}|\overrightarrow{w}e+b| d=∣w∣1∣we+b∣
下面再来说说数据标签的定义,因为后面我们要利用支持向量机对数据进行分析,我们先来熟悉一下数据
- 先假设数据集 ( X 1 , Y 1 ) ( X 2 , Y 2 ) ( X 3 , Y 3 ) . . . ( X n , Y n ) (X_1,Y_1)(X_2,Y_2)(X_3,Y_3)...(X_n,Y_n) (X1,Y1)(X2,Y2)(X3,Y3)...(Xn,Yn)
- 其中
Y
Y
Y是数据的类别,定义如下:
Y = { + 1 , X 为正例的时候 − 1 , X 为负例的时候 Y= \begin{cases} +1, & \text {$X$为正例的时候} \\ -1, & \text{$X$为负例的时候} \end{cases} Y={+1,−1,X为正例的时候X为负例的时候- 注意设置的是 + 1 +1 +1和 − 1 -1 −1,而不是 1 1 1和 0 0 0
- 那么,我们利用上面定义好的数据后,就可以定义决策方程了
-
决策方程的定义:
- 基于上面的距离公式,并且将
x
x
x转换为函数
Φ
(
x
)
\Phi(x)
Φ(x),有如下公式:
y ( x ) = w → ⋅ Φ ( x ) + b y(x)=\overrightarrow{w}\cdot \Phi(x)+b y(x)=w⋅Φ(x)+b
⇓ \Downarrow ⇓
y ( x i ) > 0 ⇔ y i = + 1 y(x_i)>0\Leftrightarrow y_i=+1 y(xi)>0⇔yi=+1
y ( x i ) < 0 ⇔ y i = − 1 y(x_i)<0\Leftrightarrow y_i=-1 y(xi)<0⇔yi=−1
⇓ \Downarrow ⇓
y i ⋅ y ( x i ) > 0 y_i\cdot y(x_i)>0 yi⋅y(xi)>0
- 基于上面的距离公式,并且将
x
x
x转换为函数
Φ
(
x
)
\Phi(x)
Φ(x),有如下公式:
有了以上的公式之后,我们就可以确立我们的优化目标了
- 我们看回去第二个图,我们就是要找一条直线,离两边的点都足够远,越远越好,这样能最好地区分出两边的点
- 我们先将点到直线的距离都化简一下:
Y = y i ⋅ ( w → ⋅ Φ ( x i ) + b ) ∣ w → ∣ Y=\frac{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)}{|\overrightarrow{w}|} Y=∣w∣yi⋅(w⋅Φ(xi)+b) - 因为 y i ⋅ y ( x i ) > 0 y_i\cdot y(x_i)>0 yi⋅y(xi)>0,因此这里将分子的绝对值去掉了,其实这个 y i y_i yi纯粹是因为加上去让后面好处理的
通过这个公式,我们可以得出我们的优化目标
a r g m a x w , b { 1 ∣ w → ∣ m i n i { y i ⋅ ( w → ⋅ Φ ( x i ) + b ) } argmax_{w,b}\{\frac{1}{|\overrightarrow{w}|}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\} argmaxw,b{∣w∣1mini{yi⋅(w⋅Φ(xi)+b)}
- 上式的意思是首先寻找最小距离,也即 m i n i { y i ⋅ ( w → ⋅ Φ ( x i ) + b ) } min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\} mini{yi⋅(w⋅Φ(xi)+b)}即两边的点到你要求的那条分割线的最小距离,然后再给这个最小距离求最大值,也即外面的 a r g m a x w , b argmax_{w,b} argmaxw,b
- 但其实我们还是不方便求解这个函数,那么我们换一个思路,先进行放缩变换试试:
- 对于方程 Y = y i ⋅ ( w → ⋅ Φ ( x i ) + b ) Y=y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b) Y=yi⋅(w⋅Φ(xi)+b),我们可以尝试通过放缩使 ∣ Y ∣ > = 1 |Y|>=1 ∣Y∣>=1,也即 y i ⋅ ( w → ⋅ Φ ( x i ) + b ) > = 1 y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)>=1 yi⋅(w⋅Φ(xi)+b)>=1(注意,没通过放缩之前是 ∣ Y ∣ > = 0 |Y|>=0 ∣Y∣>=0的)
- 通过放缩之后,我们是不是就可以通过 y i ⋅ ( w → ⋅ Φ ( x i ) + b ) > = 1 y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)>=1 yi⋅(w⋅Φ(xi)+b)>=1而认为 m i n i { y i ⋅ ( w → ⋅ Φ ( x i ) + b ) } = 1 min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\}=1 mini{yi⋅(w⋅Φ(xi)+b)}=1了,因为我们放缩的目的就是想让最小值变成1,这样后面直接把 m i n i { y i ⋅ ( w → ⋅ Φ ( x i ) + b ) } min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\} mini{yi⋅(w⋅Φ(xi)+b)}当做是1而忽略掉
- 至此,原优化目标 a r g m a x w , b { 1 ∣ w → ∣ m i n i { y i ⋅ ( w → ⋅ Φ ( x i ) + b ) } argmax_{w,b}\{\frac{1}{|\overrightarrow{w}|}min_i\{y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)\} argmaxw,b{∣w∣1mini{yi⋅(w⋅Φ(xi)+b)}简化为 a r g m a x w , b 1 ∣ w → ∣ argmax_{w,b}\frac{1}{|\overrightarrow{w}|} argmaxw,b∣w∣1
如何求解极大值呢
- 在线性回归的时候我们试过求极小值,却没试过求极大值,那我们是不是可以取一个倒数变成求最小值的问题呢
a r g m i n w , b ∣ w → ∣ argmin_{w,b}|\overrightarrow{w}| argminw,b∣w∣ - 上式还带有绝对值,用着很不爽,那我们转换成求
a r g m i n w , b 1 2 w → 2 argmin_{w,b}\frac{1}{2}\overrightarrow{w}^2 argminw,b21w2 - 之所以前面带一个 1 2 \frac{1}{2} 21是因为后面求导的时候正好能把 1 2 \frac{1}{2} 21约掉,也是方便计算用的
-
求这个式子我们用到拉格朗日乘子法
- 对于带约束的优化问题,我们可以对式子进行转换,这里省去一万步,直接看结论:
- 下面是利用拉格朗日乘子法化简完后的式子
L ( w , b , α ) = 1 2 ∣ w → ∣ 2 − ∑ i = 1 w α i ( y i ( w → ⋅ Φ ( x i ) + b ) − 1 ) L(w,b,\alpha)=\frac{1}{2}|\overrightarrow{w}|^2-\sum_{i=1}^w \alpha_i(y_i(\overrightarrow{w}\cdot \Phi(x_i)+b)-1) L(w,b,α)=21∣w∣2−i=1∑wαi(yi(w⋅Φ(xi)+b)−1) - 记住约束条件不用忘了哦 y i ⋅ ( w → ⋅ Φ ( x i ) + b ) > = 1 y_i\cdot(\overrightarrow{w}\cdot \Phi(x_i)+b)>=1 yi⋅(w⋅Φ(xi)+b)>=1
- 下面是我们要求解的内容
m i n w , b m a x α L w , b , α min_{w,b}max_{\alpha}L{w,b,\alpha} minw,bmaxαLw,b,α
- 下面是利用拉格朗日乘子法化简完后的式子
- 根据对偶性质,上式可以调换顺序
m i n w , b m a x α L ( w , b , α ) − > m a x α m i n w , b L ( w , b , α ) min_{w,b}max_{\alpha}L(w,b,\alpha)->max_{\alpha}min_{w,b}L(w,b,\alpha) minw,bmaxαL(w,b,α)−>maxαminw,bL(w,b,α) - 那么求最小值我们就应该想到求偏导(梯度下降的内容),极值点存在于偏导为0的时候
- 对
w
w
w求偏导
∂ L ∂ w = 0 = > w = ∑ i = 1 n α i y i Φ ( x n ) \frac{\partial L}{\partial w}=0=>w=\sum_{i=1}^{n}\alpha_iy_i\Phi(x_n) ∂w∂L=0=>w=i=1∑nαiyiΦ(xn) - 对
b
b
b求偏导
∂ L ∂ b = 0 = > 0 = ∑ i = 1 n α i y i \frac{\partial L}{\partial b}=0=>0=\sum_{i=1}^{n}\alpha_iy_i ∂b∂L=0=>0=i=1∑nαiyi
- 对
w
w
w求偏导
- 将以上两个偏导带入原来式子中,进行简单化简(从略)可以得到:
m i n w , b L ( w , b , α ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 , j = 1 w α i α j y i y j Φ ( x i ) Φ ( x j ) min_{w,b}L(w,b,\alpha)=\sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i=1,j=1}^{w}\alpha_i\alpha_jy_iy_j\Phi(x_i)\Phi(x_j) minw,bL(w,b,α)=i=1∑nαi−21i=1,j=1∑wαiαjyiyjΦ(xi)Φ(xj)- 条件为 ∑ i = 1 n α i y i = 0 和 α i > = 0 \sum_{i=1}^{n}\alpha_iy_i=0和\alpha_i>=0 ∑i=1nαiyi=0和αi>=0
- 已经完成第一步 m i n w , b L ( w , b , α ) min_{w,b}L(w,b,\alpha) minw,bL(w,b,α)的求解了
- 接下来对
α
\alpha
α求极大值
- 遵循以前求极大值的思路,我们还是先将其转换成极小值的计算,这里直接取负号
m i n α ( 1 2 ∑ i = 1 , j = 1 w α i α j y i y j Φ ( x i ) Φ ( x j ) − ∑ i = 1 n α i ) min_{\alpha}(\frac{1}{2}\sum_{i=1,j=1}^{w}\alpha_i\alpha_jy_iy_j\Phi(x_i)\Phi(x_j)-\sum_{i=1}^{n}\alpha_i) minα(21i=1,j=1∑wαiαjyiyjΦ(xi)Φ(xj)−i=1∑nαi) - 条件为 ∑ i = 1 n α i y i = 0 和 α i > = 0 \sum_{i=1}^{n}\alpha_iy_i=0和\alpha_i>=0 ∑i=1nαiyi=0和αi>=0
- 遵循以前求极大值的思路,我们还是先将其转换成极小值的计算,这里直接取负号
- 尝试求解了哈,别眨眼了
- 数据:3个点,其中正例
x
1
(
3
,
3
)
,
x
2
(
4
,
3
)
x1(3,3) ,x2(4,3)
x1(3,3),x2(4,3) ,负例
x
3
(
1
,
1
)
x3(1,1)
x3(1,1)
- 求解
m
i
n
α
(
1
2
∑
i
=
1
,
j
=
1
w
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
)
−
∑
i
=
1
n
α
i
)
min_{\alpha}(\frac{1}{2}\sum_{i=1,j=1}^{w}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j))-\sum_{i=1}^{n}\alpha_i)
minα(21∑i=1,j=1wαiαjyiyj(xi⋅xj))−∑i=1nαi)
- 约束条件是: α 1 + α 2 − α 3 = 0 , α i > = 0 ( i = 1 , 2 , 3 ) \alpha1+\alpha2-\alpha3=0, \alpha_i>=0(i=1,2,3) α1+α2−α3=0,αi>=0(i=1,2,3)
- 将数据代入:
1 2 ( 18 α 1 2 + 25 α 2 2 + 2 α 3 2 + 42 α 1 α 2 − 12 α 1 α 3 − 14 α 2 α 3 ) − α 1 − α 2 − α 3 \frac{1}{2}(18\alpha_1^2+25\alpha_2^2+2\alpha_3^2+42\alpha_1\alpha_2-12\alpha_1\alpha_3-14\alpha_2\alpha_3)-\alpha_1-\alpha_2-\alpha_3 21(18α12+25α22+2α32+42α1α2−12α1α3−14α2α3)−α1−α2−α3 - 由
α
1
+
α
2
=
α
3
\alpha_1+\alpha_2=\alpha_3
α1+α2=α3可以化简:
4 α 1 2 + 13 2 α 2 2 + 10 α 1 α 2 − 2 α 1 − 2 α 2 4\alpha_1^2+\frac{13}{2}\alpha_2^2+10\alpha_1\alpha_2-2\alpha_1-2\alpha_2 4α12+213α22+10α1α2−2α1−2α2 - 约束条件是: α 1 + α 2 − α 3 = 0 , α i > = 0 ( i = 1 , 2 , 3 ) \alpha1+\alpha2-\alpha3=0, \alpha_i>=0(i=1,2,3) α1+α2−α3=0,αi>=0(i=1,2,3)
- 分别对
α
1
\alpha_1
α1和
α
2
\alpha_2
α2求偏导,偏导等于0可以得到
α
1
=
1.5
,
α
2
=
−
1
\alpha_1=1.5,\alpha_2=-1
α1=1.5,α2=−1,这是最一般的情况,但是并没能满足约束条件第二条
- 那我们再考虑一下会不会在 α 1 = 0 \alpha_1=0 α1=0或者 α 2 = 0 \alpha_2=0 α2=0处满足条件呢?此处我们称之为边界点
- α 1 = 0 , α 2 = − 2 13 \alpha_1=0,\alpha_2=-\frac{2}{13} α1=0,α2=−132不满足约束
-
α
1
=
0.25
,
α
2
=
0
\alpha_1=0.25,\alpha_2=0
α1=0.25,α2=0满足约束条件,代入原式
=
−
0.25
=-0.25
=−0.25
根据等式,有 α 3 = 0.25 \alpha_3=0.25 α3=0.25
- 有了这些
α
\alpha
α,我们可以回代求出n和b了
- 还记得这些饥渴难耐的式子吧
w = ∑ i = 1 n α i y i Φ ( x n ) w=\sum_{i=1}^{n}\alpha_iy_i\Phi(x_n) w=i=1∑nαiyiΦ(xn)
y ( x ) = w → ⋅ Φ ( x ) + b y(x)=\overrightarrow{w}\cdot \Phi(x)+b y(x)=w⋅Φ(x)+b - 直接将上述
α
\alpha
α代入
w = 1 4 × 1 × ( 3 , 3 ) + 1 4 × ( − 1 ) × ( 1 , 1 ) = ( 1 2 , 1 2 ) w=\frac{1}{4}\times1\times(3,3)+\frac{1}{4}\times(-1)\times(1,1)=(\frac{1}{2},\frac{1}{2}) w=41×1×(3,3)+41×(−1)×(1,1)=(21,21)
b = y i − ∑ i = 1 n a i y i ( x i ⋅ x j ) = 1 − ( 1 4 × 1 × 18 + 1 4 × ( − 1 ) × 6 ) = − 2 b=y_i-\sum_{i=1}^{n}a_iy_i(x_i\cdot x_j)=1-(\frac{1}{4}\times 1\times18+\frac{1}{4}\times(-1)\times6)=-2 b=yi−i=1∑naiyi(xi⋅xj)=1−(41×1×18+41×(−1)×6)=−2
- 还记得这些饥渴难耐的式子吧
-
因此可得平面方程为
- 数据:3个点,其中正例
x
1
(
3
,
3
)
,
x
2
(
4
,
3
)
x1(3,3) ,x2(4,3)
x1(3,3),x2(4,3) ,负例
x
3
(
1
,
1
)
x3(1,1)
x3(1,1)
总结一下
- 我们看出来,支持向量机中,真正其作用的点都在决策边界上的点,下图中圈起来的部分,包括我们刚刚的那个例子,只有位于边界上的x1和x3起到作用了(
α
!
=
0
\alpha!=0
α!=0),其他的都没有对边界起到任何作用
- 面试可能会出考题:支持向量是哪些?其实就是 α ̸ = 0 \alpha\not=0 α̸=0的那些, α = 0 \alpha=0 α=0的就不是支持向量了
- 支持向量是真正发挥作用的数据点,其他的对结果都没有任何影响
软间隔(soft-margin)
- 在数据中,经常会存在一些噪音点,在这些噪音点不存在的时候,支持向量机拟合出来的边界比较不错,但是一旦考虑到这个噪音点而用支持向量机必须考虑这个噪音点的时候,边界会变得相对较差,效果降低,如下图实线就是考虑那个噪音点之后的边界,明显不如虚线来得好
- 因此我们引入一个新的目标函数
m i n 1 2 ∣ w ∣ 2 + C ∑ i = 1 n ξ i min\frac{1}{2}|w|^2+C\sum_{i=1}^{n}\xi_i min21∣w∣2+Ci=1∑nξi - 引入的这个C是我们需要指定的一个参数
- 当C趋于很大时,意味着分类严格不能有错误
- 当C趋于很小时,可以有更大的错误容忍
- 再次引入拉格朗日乘子法来求解,这里我们不多说了,直接给出运算后的结果
m i n α 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 n α i min_\alpha\frac{1}{2}\sum_{i=1}^{n}\sum_{j=1}^{n}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^{n}\alpha_i minα21i=1∑nj=1∑nαiαjyiyj(xi⋅xj)−i=1∑nαi - 约束条件为: ∑ i = 1 n α i y i = 0 , 0 ≤ α i ≤ C \sum_{i=1}^{n}\alpha_iy_i=0, 0\leq\alpha_i\leq C ∑i=1nαiyi=0,0≤αi≤C
- 以上遵循之前同样的解法,但是约束条件比之前更严格
- 引入了C之后,我们要一步步把C试出来,找出最合适的参数,让边界划分的更好
下一次更新SVM的示例代码吧
对唐宇迪老师的机器学习教程进行笔记整理
编辑日期:2018-10-7
小白一枚,请大家多多指教
转载请注明出处