最近在补一些机器学习的基础知识,所以就刷了一下李航博士的《统计学习方法》。那么刷一本书怎么才能彻底呢,当然是刷题了。幸好作者在每一章留有课后题,在这里尝试做一下。
(一想到这部分内容可能会被完爆我好几条街的大神看到就觉得好害羞 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄。个人水平有限,望大神指正)
在做题之前先吐槽一下第7章的内容,本章介绍了支持向量机的相关知识,内容安排合理,讲解清楚,是很棒的入门材料。不过在刷书的过程中遇到了一些小疑问,我准备把这些小疑问和大家分享一下。有些通过查文献找到了答案,有些还没有解决,希望路过的大神指点。
1、P104在推导拉格朗日函数 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)极小值的过程中,如何确定所求得的极值点(导数等于0的点)就是 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)的极小值而不是极大值呢?是否可以证明一下其所对应的二次型在这一情况下只能取极小值?
2、p120式7.82下面那句话如果严格说来应该是“对于不完备的赋范向量空间 S S S,一定可以找到一个完备的赋范向量空间 H H H,使得 S S S在 H H H中稠密”
3、P130式7.116下面那段话,原文的意思是如果 0 < α i new < C 0<\alpha_i^{\text{new}}<C 0<αinew<C,那么 b 1 new = b 2 new b_1^{\text{new}}=b_2^{\text{new}} b1new=b2new。我尝试证明一下这但是死活搞不出来。后来转念一想,P112最下面的部分不是已经说明了 b b b的值不唯一么。为什么这里就变成 b 1 new = b 2 new b_1^{\text{new}}=b_2^{\text{new}} b1new=b2new一定成立了呢?
后来经过查阅Platt的原始文献"Fast training of support vector machines using sequential minimal optimization"发现原文中是这么说的:“when b 1 b_1 b1 and b 2 b_2 b2 are vaild, they are equal”( b 1 , b 2 b_1, b_2 b1,b2是原作者使用的记号,也就相当于 b 1 new , b 2 new b_1^{\text{new}}, b_2^{\text{new}} b1new,b2new)。所以我觉得原文中的内容是不是这个意思:“如果 b 1 new , b 2 new b_1^{\text{new}}, b_2^{\text{new}} b1new,b2new都复合条件,那么用哪个作为最终结果都是一样的”。不知这部分理解是否正确,求大神指点。
4、P130在SMO算法中,应该在第一步也将 b b b初始化为0
进入正题,下面的答案是我自己做的,有时候会偷懒╮( ̄▽ ̄)╭,请见谅。
1.1 比较感知机的对偶形式与线性可分支持向量机的对偶形式。
这是一个开放问题,如何比较这两种模型的对偶形式呢。我思前想后决定首先把这两个对偶形式写出来:
给定一个训练数据集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T=\{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N) \} T={(x1,y1),(x2,y2),…,(xN,yN)}
其中, x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } , i = 1 , 2 , … , N x_i\in \mathcal{X} = R^n, y_i \in \mathcal{Y} =\{-1,1\}, i=1,2, \dots,N xi∈X=Rn,yi∈Y={−1,1},i=1,2,…,N。
根据本书前面的内容:感知机学习算法是求参数 w , b w,b w,b,使其为以下损失函数极小化问题的解:
min w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) \min_{w,b}L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b) w,bminL(w,b)=−xi∈M∑yi(w⋅xi+b)
其中 M M M为误分类点的集合。上式称为感知机算法的原始形式,事实上, 如果使用P114页所介绍的 [ ∗ ] + [*]_+ [∗]+函数,可以将上述原始形式写为:
min w , b L ( w , b ) = ∑ i = 1 N [ − y i ( w ⋅ x i + b ) ] + \min_{w,b}L(w,b)=\sum_{i=1}^N[-y_i(w\cdot x_i+b)]_+ w,bminL(w,b)=i=1∑N[−yi(w⋅xi+b)]+
如果将 w , b w,b w,b表示为实例 x i x_i xi和标记 y i y_i yi的线性组合的形式,即:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ w&=\sum_{j=1}^…
其中 α j > 0 , j = 1 , 2 , … , N \alpha_j>0, j=1,2, \dots, N αj>0,j=1,2,…,N那么上述原始形式可以写为如下的对偶形式:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \min_{w,b}L(w,…
事实上,上述最优化问题可以通过求 L ( w , b ) L(w,b) L(w,b)关于 α \alpha α的导数,然后使用梯度下降法得到。但是P34页所给出的求解步骤与此过程等价,并且也更简便。
相比之下,线性可分支持向量机的原始形式是求解 w , b w,b w,b,使其为如下最优化问题的解:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲\min_{w,b}\quad…
上述最优化问题的对偶问题为:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲\min_\alpha \qu…
最终 w , b w, b w,b的值可通过下式计算
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲w&=\sum_{i=1}^N…
可以看出,在线性可分支持向量机的对偶形式中, w w w也是被表示为实例 x i x_i xi和标记 y i y_i yi的线性组合的形式。
1.2 已知正例点 x 1 = ( 1 , 2 ) T x_1=(1,2)^\text{T} x1=(1,2)T, x 2 = ( 2 , 3 ) T x_2=(2,3)^\text{T} x2=(2,3)T, x 3 = ( 3 , 3 ) T x_3=(3,3)^\text{T} x3=(3,3)T,负例点 x 4 = ( 2 , 1 ) T x_4=(2,1)^\text{T} x4=(2,1)T, x 5 = ( 3 , 2 ) T x_5=(3,2)^\text{T} x5=(3,2)T,试求最大间隔分离超平面和分类决策函数,并在图上画出分离超平面、间隔边界及支持向量。
这个问题的解答就直接用书上给的步骤就好。这里直接用sklearn提供的包算一下结果:
from sklearn import svm
x=[[1, 2], [2, 3], [3, 3], [2, 1], [3, 2]]
y=[1, 1, 1, -1, -1]
clf = svm.SVC(kernel='linear',C=10000)
clf.fit(x, y)
print clf.coef_
print clf.intercept_
最终的结果是:
>>> [[-1 2]]
[-2]
然后可以使用matplotlib画图:
import matplotlib.pyplot as plt
import numpy as np
plt.scatter([i[0] for i in x], [i[1] for i in x], c=y)
xaxis = np.linspace(0, 3.5)
w = clf.coef_[0]
a = -w[0] / w[1]
y_sep = a * xaxis - (clf.intercept_[0]) / w[1]
b = clf.support_vectors_[0]
yy_down = a * xaxis + (b[1] - a * b[0])
b = clf.support_vectors_[-1]
yy_up = a * xaxis + (b[1] - a * b[0])
plt.plot(xaxis, y_sep, 'k-')
plt.plot(xaxis, yy_down, 'k--')
plt.plot(xaxis, yy_up, 'k--')
plt.scatter (clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=150, facecolors='none', edgecolors='k')
plt.show()
1.3 线性支持向量机还可以定义为以下形式:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \min_{w,b,\xi}…
试求其对偶形式。
解:
大部分过程与书上一样,可以仿照书中的步骤写出最优化问题所对应的拉格朗日函数:
L ( w , b , ξ , α , μ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 N ξ i 2 − ∑ i = 1 N α i ( y i ( w ⋅ x i + b ) − 1 + ξ i ) − ∑ i = 1 N μ i ξ i L(w,b,\xi,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i^2 -\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ξi2−i=1∑Nαi(yi(w⋅xi+b)−1+ξi)−i=1∑Nμiξi
其中 α i ≥ 0 , μ i ≥ 0 \alpha_i\ge0, \mu_i\ge0 αi≥0,μi≥0.
对偶问题是拉格朗日函数的极大极小问题。首先求 L L L对 w , b , ξ w,b,\xi w,b,ξ的极小:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \nabla_wL(w,b,…
把上述等式代入 L ( w , b , ξ , α , μ ) L(w,b,\xi,\alpha,\mu) L(w,b,ξ,α,μ)的表达式中,得:
min w , b , ξ L ( w , b , ξ , α , μ ) = − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i − 1 4 C ∑ i = 1 N ( α i + μ i ) 2 \min_{w,b,\xi}L(w,b,\xi,\alpha,\mu)=-\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-\frac{1}{4C}\sum_{i=1}^N(\alpha_i+\mu_i)^2 w,b,ξminL(w,b,ξ,α,μ)=−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi−4C1i=1∑N(αi+μi)2
在对 min w , b , ξ L ( w , b , ξ , α , μ ) \min_{w,b,\xi}L(w,b,\xi,\alpha,\mu) minw,b,ξL(w,b,ξ,α,μ)求 α \alpha α的极大,即得对偶问题:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \max_{\alpha, …
1.4 证明内积的正整数幂函数:
K ( x , z ) = ( x ⋅ z ) p K(x,z)=(x\cdot z)^p K(x,z)=(x⋅z)p
是正定核函数,这里 p p p是正整数, x , z ∈ R n x,z\in R^n x,z∈Rn.
证明:
首先定义映射 f : R n ↦ R n p f: R^n \mapsto R^{n^p} f:Rn↦Rnp:
f ( [ x 1 , x 2 , … , x n ] ) = ( x j 1 , x j 2 , … , x j p ∣ j 1 , … , j p ∈ { 1 , … , n } ) f([x_1, x_2, \dots, x_n])=(x_{j_1}, x_{j_2}, \dots, x_{j_p}| j_1, \dots, j_p \in \{1, \dots, n\}) f([x1,x2,…,xn])=(xj1,xj2,…,xjp∣j1,…,jp∈{1,…,n})
举个栗子:如果 n = 2 n=2 n=2, p = 2 p=2 p=2,那么有:
f ( [ x 1 , x 2 ] ) = ( x 1 2 , x 2 2 , x 1 x 2 , x 2 x 1 ) f([x_1, x_2]) = (x_1^2, x_2^2, x_1x_2, x_2x_1) f([x1,x2])=(x12,x22,x1x2,x2x1)
注意 f f f的定义式中各单项式 x j 1 , x j 2 , … , x j p x_{j_1}, x_{j_2}, \dots, x_{j_p} xj1,xj2,…,xjp是有序的,意思是我们认为 x 1 x 2 x_1x_2 x1x2和 x 2 x 1 x_2x_1 x2x1是不同的。
显然对于 ∀ x , z ∈ R n \forall x,z\in R^n ∀x,z∈Rn,有:
K ( x , z ) = f ( x ) ⋅ f ( z ) K(x,z)=f(x)\cdot f(z) K(x,z)=f(x)⋅f(z)
所以对 ∀ a 1 , a 2 , … , a n ∈ R \forall a_1, a_2, \dots, a_n \in R ∀a1,a2,…,an∈R,$x_1, x_2, \dots, x_n \in R^n $有:
KaTeX parse error: No such environment: align at position 7: \begin{̲a̲l̲i̲g̲n̲}̲ \sum_{i,j=1}^n…
所以可证 K ( x , z ) = ( x ⋅ z ) p K(x,z)=(x\cdot z)^p K(x,z)=(x⋅z)p是正定核函数。
ps:写证明还是用笔和纸方便,两分钟写好的内容码上来可费劲了。小抱怨一下。