机器学习 2014斯坦福大学课程: 5 支持向量机
刚开始学习机器学习,学习的视频教程是coursera网站上吴恩达(Andrew Ng)教授的机器学习课程。
在此梳理并记录总结笔记,供学习交流,欢迎批评指正!
文章目录
机器学习 分类 回顾
- 监督学习(supervised learning )
1.1 回归问题(regression): 线性回归问题(linear regression)
1.2分类问题(classification)
:逻辑回归;神经网络;向量机- 无监督学习(unsupervised learning)
2.1 聚集问题(clustering)
2.2. 非聚集问题(non-clustering)
支持向量机(support vector machine,SVM)
除逻辑回归,神经网络之外,又一个解决分类问题的方法,是监督学习算法之一。
逻辑回归问题中代价函数为:
J ( θ 0 , θ 1 , . . . θ n ) = 1 m ∑ i = 1 m ( − y ( i ) ∗ l o g ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ) l o g ( 1 − h θ ( x ( i ) ) ) ) + λ 2 m ∑ j = 1 n θ j 2 J(\theta_0,\theta_1,...\theta_n)=\frac{1}{m}\sum_{i=1}^m (-y^{(i)}*log(h_\theta(x^{(i)}))+(1-y^{(i))})log(1-h_\theta(x^{(i)}))) +\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2 J(θ0,θ1,...θn)=m1i=1∑m(−y(i)∗log(hθ(x(i)))+(1−y(i)))log(1−hθ(x(i))))+2mλj=1∑nθj2
h ( θ ) = g ( X ∗ θ ) h(\theta)=g(X*\theta) h(θ)=g(X∗θ)
其中, g ( z ) g(z) g(z) sigmoid函数为
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+e−z1
将 l o g ( h θ ( x ( i ) ) ) , l o g ( 1 − h θ ( x ( i ) ) ) log(h_\theta(x^{(i)})),log(1-h_\theta(x^{(i)})) log(hθ(x(i))),log(1−hθ(x(i)))两个函数分别用分段函数代替(图中紫红色函数),并且正则化一项的 λ \lambda λ转移到第一项,去掉 1 m \frac{1}{m} m1
支持向量机中代价函数为
J ( θ ) = C ∑ i = 1 m ( − y ( i ) ∗ c o s t 1 ( θ T x ( i ) ) ) + ( 1 − y ( i ) ) ) c o s t 0 ( θ T x ( i ) ) ) ) + 1 2 ∑ j = 1 n θ j 2 J(\theta)=C\sum_{i=1}^m (-y^{(i)}*cost_1(\theta^Tx^{(i)}))+(1-y^{(i))})cost_0(\theta^Tx^{(i)}))) +\frac{1}{2}\sum_{j=1}^n\theta_j^2 J(θ)=Ci=1∑m(−y(i)∗cost1(θTx(i)))+(1−y(i)))cost0(θTx(i))))+21j=1∑nθj2
h θ = { 1 θ T x ≥ 1 1 θ T x ≤ − 1 h_\theta=\begin{cases} 1 & \theta^Tx\ge1\\1 & \theta^Tx\le-1 \end{cases} hθ={11θTx≥1θTx≤−1
C可以理解为 1 / λ 1/\lambda 1/λ
如图所示,
只有当 y = 1 时 , z = θ T x ≥ 1 y=1时,z=\theta^Tx\ge1 y=1时,z=θTx≥1,cost会趋近0
当 y = 0 时 , z = θ T x ≤ − 1 y=0时,z=\theta^Tx\le-1 y=0时,z=θTx≤−1,cost会趋近0
大间距分类机(large margin classification machine)
m i n J ( θ ) = m i n C ∑ i = 1 m ( − y ( i ) ∗ c o s t 1 ( θ T x ( i ) ) ) + ( 1 − y ( i ) ) ) c o s t 0 ( θ T x ( i ) ) ) ) + 1 2 ∑ j = 1 n θ j 2 minJ(\theta)=minC\sum_{i=1}^m (-y^{(i)}*cost_1(\theta^Tx^{(i)}))+(1-y^{(i))})cost_0(\theta^Tx^{(i)}))) +\frac{1}{2}\sum_{j=1}^n\theta_j^2 minJ(θ)=minCi=1∑m(−y(i)∗cost1(θTx(i)))+(1−y(i)))cost0(θTx(i))))+21j=1∑nθj2
= 1 2 ( θ 1 2 + θ 2 2 ) = 1 2 ( θ 1 2 + θ 2 2 ) = 1 2 ∣ ∣ θ ∣ ∣ 2 =\frac{1}{2}(\theta_1^2+\theta_2^2)=\frac{1}{2}\sqrt{(\theta_1^2+\theta_2^2)}=\frac{1}{2}||\theta||^2 =21(θ12+θ22)=21(θ12+θ22)=21∣∣θ∣∣2
当y=1或0时前一项趋近0只剩后一项,要使后一项尽可能小,就使 θ \theta θ向量长度尽可能小
数学意义:
u = [ u 1 ; u 2 ] u=[u_1;u_2] u=[u1;u2], v = [ v 1 ; v 2 ] v=[v_1;v_2] v=[v1;v2]
u T v = u 1 v 1 + u 2 v 2 = p ∗ ∣ ∣ u ∣ ∣ = p ∗ ( u 1 2 + u 2 2 ) u^Tv=u_1v_1+u_2v_2=p*||u||=p*\sqrt{(u_1^2+u_2^2)} uTv=u1v1+u2v2=p∗∣∣u∣∣=p∗(u12+u22),p为v投影到u的长度,有正负
svm决策边界
考虑二分类问题,特征只有2个,将两类别完全分开的直线(决策边界)一定是大间距。
将 θ \theta θ, x x x类比于 u , v u,v u,v
θ T x = θ 1 x 1 + θ 2 x 2 = p ∣ ∣ θ ∣ ∣ ≥ 1 o r ≤ − 1 \theta^Tx=\theta_1x_1+\theta_2x_2=p||\theta||\ge 1 or \le-1 θTx=θ1x1+θ2x2=p∣∣θ∣∣≥1or≤−1
θ \theta θ向量垂直于决策边界
左图中,样本投影到 θ \theta θ向量的p长度较小,为了满足 > 1 \gt1 >1或者 ≤ − 1 \le-1 ≤−1, ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣必须比较大,但此时违反了minJ的要求
右图中, 样本投影到 θ \theta θ向量的p长度较大,为了满足 > 1 \gt1 >1或者 ≤ − 1 \le-1 ≤−1, ∣ ∣ θ ∣ ∣ ||\theta|| ∣∣θ∣∣比较小,此时满足了minJ的要求
核函数(kernel)
针对非线形决策边界,如何构造?
θ
T
x
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
+
θ
n
x
n
\theta^Tx=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+...+\theta_nx_n
θTx=θ0+θ1x1+θ2x2+θ3x3+...+θnxn
令
f
0
=
1
,
f
1
=
x
1
,
f
2
=
x
2
.
.
.
f_0=1,f_1=x_1,f_2=x_2...
f0=1,f1=x1,f2=x2...
则
θ
T
f
=
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
+
.
.
.
+
θ
n
f
n
\theta^Tf=\theta_0+\theta_1f_1+\theta_2f_2+\theta_3f_3+...+\theta_nf_n
θTf=θ0+θ1f1+θ2f2+θ3f3+...+θnfn
针对非线形可以,令
f
0
=
1
,
f
1
=
x
1
2
,
f
2
=
x
2
2
,
f
3
=
x
2
x
3
.
.
.
f_0=1,f_1=x_1^2,f_2=x_2^2,f_3=x_2x_3...
f0=1,f1=x12,f2=x22,f3=x2x3...
1.高斯核函数(gaussian kernel)
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
1
)
)
=
e
x
p
(
−
(
∣
∣
x
−
l
(
1
)
∣
∣
)
2
2
σ
2
)
f_1=similarity(x^{(i)},l^{(1)})=exp(-\frac{(||x-l^{(1)}||)^2}{2\sigma^2})
f1=similarity(x(i),l(1))=exp(−2σ2(∣∣x−l(1)∣∣)2)
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
2
)
)
=
e
x
p
(
−
(
∣
∣
x
−
l
(
2
)
∣
∣
)
2
2
σ
2
)
f_2=similarity(x^{(i)},l^{(2)})=exp(-\frac{(||x-l^{(2)}||)^2}{2\sigma^2})
f2=similarity(x(i),l(2))=exp(−2σ2(∣∣x−l(2)∣∣)2)
f
3
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
3
)
)
=
e
x
p
(
−
(
∣
∣
x
−
l
(
3
)
∣
∣
)
2
2
σ
2
)
f_3=similarity(x^{(i)},l^{(3)})=exp(-\frac{(||x-l^{(3)}||)^2}{2\sigma^2})
f3=similarity(x(i),l(3))=exp(−2σ2(∣∣x−l(3)∣∣)2)
…
l
(
1
)
,
l
(
2
)
.
.
.
对
应
于
x
(
1
)
,
x
(
2
)
.
.
.
m
个
点
l^{(1)},l^{(2)}...对应于x^{(1)},x^{(2)}...m个点
l(1),l(2)...对应于x(1),x(2)...m个点
当
f
i
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
i
)
)
=
0
f_i=similarity(x^{(i)},l^{(i)})=0
fi=similarity(x(i),l(i))=0
C越大,
λ
\lambda
λ越小,对应高方差
C越小,
λ
\lambda
λ越大,对应高偏差
σ
\sigma
σ越大越平缓;对应高偏差
σ
\sigma
σ越小越尖锐 ;对应高方差 2) 线形核函数(linear kernel),即不使用核函数
θ
T
x
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
.
.
.
+
θ
n
x
n
\theta^Tx=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+...+\theta_nx_n
θTx=θ0+θ1x1+θ2x2+θ3x3+...+θnxn
3)字符串核函数(string kernel)、多项式核函数(polynomial kernel)、卡方核函数(chi-square kernel)等等
支持向量机方法总结
样本数为m,特征数为n
1.n远大于m,样本数少,使用逻辑回归或者不带核函数的支持向量机
2.n较小,m中等,使用高斯核函数的支持向量机
3.n较小,m较大,要创造更多特征,然后使用逻辑回归或者不带核函数的支持向量机
支持向量机方法,主要是选择核函数,写核函数程序,然后选择最优化算法优化
python代码
高斯核函数
def gaussian_kernel(x1,x2,sigma):
return np.exp(-(np.sum((x1-x2)**2)/(2*(sigma**2))))
调用库
import sklearn import svm
'''linear knernel'''
svc=svm.LinearSVC(C=1,loss='hinge',max_iter=1000)
svc.fit(X,y)
svc.score(X,y)
'''gaussian kernel'''
svc=svm.SVC(C=1,gamma=10,probability=True)
svc.fit(X,y)
svc.score(X,y)
参考
[1] 来自本课程课件和作业题,以及黄海广github上的中文笔记资料等