本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片
机器学习 | Coursera
吴恩达机器学习系列课程_bilibili
12 支持向量机(SVM)
12-1 优化目标
- 上图左侧坐标系为 y = 1 y=1 y=1时代价函数的图像,支持向量机时画出粉色的曲线,命名为 C o s t 1 ( z ) Cost_1(z) Cost1(z),下标指 y y y的值为 1 1 1
- 同样的,右侧坐标系为 y = 0 y=0 y=0时代价函数的图像,支持向量机时画出粉色的曲线,命名为 C o s t 0 ( z ) Cost_0(z) Cost0(z),下标指 y y y的值为 0 0 0
在逻辑回归中,代价函数为:
J
(
θ
)
=
−
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(θ)=-\frac{1}{m}\left[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))\right]+\frac{λ}{2m}\sum_{j=1}^{n}θ_j^2
J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2
要支持向量机,先将上式里的负号放到求和里面去,然后把
1
m
\frac{1}{m}
m1去掉(
1
m
\frac{1}{m}
m1是一个常数,虽然去掉它会改变代价函数的值,但是仍然能求得一样的最小值对应的
θ
\theta
θ),之后得到的代价函数为:
J
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
(
−
l
o
g
(
h
θ
(
x
(
i
)
)
)
)
+
(
1
−
y
(
i
)
)
(
−
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
J(θ)=\sum_{i=1}^m\left[y^{(i)}\left (-log(h_θ(x^{(i)}))\right )+(1-y^{(i)})\left(-log(1-h_θ(x^{(i)}))\right)\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=i=1∑m[y(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+2λj=1∑nθj2
把上式中的
(
−
l
o
g
(
h
θ
(
x
(
i
)
)
)
)
\left (-log(h_θ(x^{(i)}))\right )
(−log(hθ(x(i))))替换为
C
o
s
t
1
(
θ
T
x
(
i
)
)
Cost_1(\theta^Tx^{(i)})
Cost1(θTx(i)),把
(
−
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
)
\left(-log(1-h_θ(x^{(i)}))\right)
(−log(1−hθ(x(i))))替换为
C
o
s
t
0
(
θ
T
x
(
i
)
)
Cost_0(\theta^Tx^{(i)})
Cost0(θTx(i)),得到代价函数:
J
(
θ
)
=
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
x
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
λ
2
∑
j
=
1
n
θ
j
2
J(θ)=\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{λ}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=i=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+2λj=1∑nθj2
在支持向量机中,不再使用正则化参数
λ
\lambda
λ,改为使用参数
C
C
C,更改后的支持向量机的代价函数为:
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(θ)=C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tx^{(i)})+(1-y^{(i)})Cost_0(\theta^Tx^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n}θ_j^2
J(θ)=Ci=1∑m[y(i)Cost1(θTx(i))+(1−y(i))Cost0(θTx(i))]+21j=1∑nθj2
- 支持向量机中不会预测 y = 1 / 0 y=1/0 y=1/0的概率,如果 θ T x ( i ) ≥ 0 \theta^Tx^{(i)}\ge0 θTx(i)≥0,假定函数输出1,反之输出0
12-2 大间距的理解
支持向量机又被称为大间距分类器
更改支持向量机中的判断边界,让
θ
T
x
(
i
)
≥
1
\theta^Tx^{(i)}\ge1
θTx(i)≥1时才输出1,
θ
T
x
(
i
)
≤
−
1
\theta^Tx^{(i)}\le-1
θTx(i)≤−1时才输出0,这样两个结果之间就有一个安全间距
使用一般的逻辑回归算法可能会生成上图中粉色和绿色的直线来分割两类样本,而使用支持向量机会生成图中黑色的直线,图中两条蓝线中间的区域称为间距,支持向量机会尽可能的将两种样本以最大的间距分隔开,可以看出,支持向量机后可以有更好地鲁棒性
如上图,先假设没有左侧的那一个负样本,用一个很大的
C
C
C可以生成上图中黑色直线,但如果有左侧的那一个负样本,由于
C
C
C很大,支持向量机为保证两类样本间有最大的间距,会生成上图中粉色的直线,但如果
C
C
C没有那么大,则即使有左侧的那一个负样本,依然会生成黑色直线
- C C C就相当于之前的 1 λ \frac{1}{\lambda} λ1,虽然两者确实不一样,但呈现出来的效果差不多
12-3 支持向量机的数学原理
12-4 核函数I
如图的样本,如果假定函数
≥
0
\ge0
≥0,就预测
y
=
1
y=1
y=1,其他情况预测
y
=
0
y=0
y=0,
在上图中的假定函数中,设
f
1
=
x
1
,
f
2
=
x
2
,
f
3
=
x
1
x
2
,
f
4
=
x
1
2
,
.
.
.
f_1=x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,...
f1=x1,f2=x2,f3=x1x2,f4=x12,...
假定函数变为
h
θ
(
x
)
=
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
.
.
.
h_\theta(x)=\theta_0+\theta_1 f_1+\theta_2 f_2+...
hθ(x)=θ0+θ1f1+θ2f2+...
以上方法与下文方法无关,与核函数无关
然而,除了对原有的特征进行组合以外,有没有更好的方法来构造𝑓1, 𝑓2, 𝑓3?我们可以利用核函数来计算出新的特征。
在坐标系中取3个样本标记矩阵
l
(
1
)
、
l
(
2
)
、
l
(
3
)
l^{(1)}、l^{(2)}、l^{(3)}
l(1)、l(2)、l(3)
x
x
x是一个给定的训练实例,假设有两个特征值,那么
x
=
[
x
1
,
x
2
]
x=[x_1,x_2]
x=[x1,x2]
令
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
x
p
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)
f
2
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
2
)
)
=
e
x
p
(
−
∥
x
−
l
(
2
)
∥
2
2
σ
2
)
f_2=similarity\left(x,l^{(2)}\right)=exp\left(-\frac{\Vert x-l^{(2)} \Vert^2 }{2\sigma^2}\right)
f2=similarity(x,l(2))=exp(−2σ2∥x−l(2)∥2)
f
3
=
.
.
.
.
.
.
f_3=......
f3=......
.
.
.
.
.
.
......
......
- s i m i l a r i t y ( x , l ( i ) ) similarity\left(x,l^{(i)}\right) similarity(x,l(i))称为相似度量函数/核函数
- s i m i l a r i t y ( x , l ( i ) ) similarity\left(x,l^{(i)}\right) similarity(x,l(i))也可写为 k ( x , l ( i ) ) k\left(x,l^{(i)}\right) k(x,l(i))
- e x p ( x ) exp(x) exp(x)表示 e x e^x ex,这里称为高斯核函数
- σ 2 \sigma^2 σ2是高斯核函数的参数
核函数运算时可化为:
f
1
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
1
)
)
=
e
x
p
(
−
∥
x
−
l
(
1
)
∥
2
2
σ
2
)
=
e
x
p
(
−
∑
j
=
1
n
(
x
j
−
l
j
(
1
)
)
2
2
σ
2
)
f_1=similarity\left(x,l^{(1)}\right)=exp\left(-\frac{\Vert x-l^{(1)} \Vert ^2}{2\sigma^2}\right)=exp\left(-\frac{\sum_{j=1}^n(x_j-l_j^{(1)} )^2}{2\sigma^2}\right)
f1=similarity(x,l(1))=exp(−2σ2∥x−l(1)∥2)=exp(−2σ2∑j=1n(xj−lj(1))2)
如果
x
x
x非常接近标记
l
(
1
)
l^{(1)}
l(1),那么
f
1
≈
e
x
p
(
−
0
2
2
σ
2
)
≈
1
f_1\approx exp(-\frac{0^2}{2\sigma^2})\approx1
f1≈exp(−2σ202)≈1
如果
x
x
x远离标记
l
(
1
)
l^{(1)}
l(1),那么
f
1
≈
e
x
p
(
−
(
l
a
r
g
e
n
u
m
b
e
r
)
2
2
σ
2
)
≈
0
f_1\approx exp(-\frac{(large\ number)^2}{2\sigma^2})\approx0
f1≈exp(−2σ2(large number)2)≈0
上图,如果
σ
2
\sigma^2
σ2变大,那么
f
i
f_i
fi的下降速度会变慢(斜率降低)
如上图,取一点
x
x
x,已经通过支持向量机计算得出
θ
0
、
θ
1
、
.
.
.
\theta_0、\theta_1、...
θ0、θ1、...的值如上图,然后可以按照核函数计算出
f
0
、
f
1
、
.
.
.
f_0、f_1、...
f0、f1、...的值如上图,将
θ
\theta
θ和
f
f
f的值代入假定函数得到
0.5
≥
0
0.5\ge0
0.5≥0,所以预测
y
=
1
y=1
y=1
如上图,再取另外的点
x
x
x,假设:最后得到靠近
l
(
1
)
和
l
(
2
)
l^{(1)}和l^{(2)}
l(1)和l(2)的点会预测为1,而远离
l
(
1
)
和
l
(
2
)
l^{(1)}和l^{(2)}
l(1)和l(2)的点会预测为0,那么最后可以拟合出一条如图中红色的曲线,曲线内预测为1,曲线外预测为0
12-5 核函数II
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则我们选
取𝑚个地标,并且令:𝑙(1) = 𝑥(1), 𝑙(2) = 𝑥(2), . . . . . , 𝑙(𝑚) = 𝑥(𝑚)。这样做的好处在于:现在我们
得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
由
f
1
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
1
)
)
f_1^{(i)}=similarity\left(x^{(i)},l^{(1)}\right)
f1(i)=similarity(x(i),l(1))
f
2
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
2
)
)
f_2^{(i)}=similarity\left(x^{(i)},l^{(2)}\right)
f2(i)=similarity(x(i),l(2))
.
.
.
...
...
f
m
(
i
)
=
s
i
m
i
l
a
r
i
t
y
(
x
(
i
)
,
l
(
m
)
)
f_m^{(i)}=similarity\left(x^{(i)},l^{(m)}\right)
fm(i)=similarity(x(i),l(m))
将
f
f
f写为特征向量形式得到
f
(
i
)
=
[
f
0
(
i
)
=
1
f
1
(
i
)
f
2
(
i
)
.
.
.
f
m
(
i
)
]
f^{(i)}= \begin{bmatrix} f_0^{(i)}=1\\ f_1^{(i)}\\ f_2^{(i)}\\ ...\\ f_m^{(i)} \end{bmatrix}
f(i)=⎣⎢⎢⎢⎢⎢⎡f0(i)=1f1(i)f2(i)...fm(i)⎦⎥⎥⎥⎥⎥⎤
f
(
i
)
f^{(i)}
f(i)是一个
m
+
1
m+1
m+1维矩阵,因为除了
m
m
m个样本外,还加入了一个偏置项
f
0
(
i
)
=
1
f_0^{(i)}=1
f0(i)=1
矩阵
f
(
i
)
f^{(i)}
f(i)的含义是(第
i
i
i个样本里的所有特征)与(从1到m的每一个样本里的所有特征)进行核函数运算,一共m个运算结果排列在矩阵里,再加上第0个的
f
0
(
i
)
=
1
f_0^{(i)}=1
f0(i)=1
用
f
(
i
)
f^{(i)}
f(i)替换带
x
x
x项,得到代价函数为:
C
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
∑
j
=
1
n
=
m
θ
j
2
C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\sum_{j=1}^{n=m}θ_j^2
Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21j=1∑n=mθj2
- 关于正则化项中 n = m n=m n=m的解释: θ ( i ) \theta_{(i)} θ(i)是对应于矩阵 f ( i ) f^{(i)} f(i)的权重,由于一共有 i = 1 , 2 , . . . , m i=1,2,...,m i=1,2,...,m共m个 f ( i ) f^{(i)} f(i)对应着m个 θ \theta θ,所以假定函数中一共有m项,即有m个 θ \theta θ,而之前已经规定了权重 θ \theta θ的个数用n来表示,所以这里有 n = m n=m n=m 注意这里已经忽略了 θ 0 \theta_0 θ0,不对其进行正则化
正则化项在具体实施中,求和部分可写为
∑
j
=
1
n
=
m
θ
j
2
=
θ
T
θ
\sum_{j=1}^{n=m}θ_j^2=\theta^T\theta
∑j=1n=mθj2=θTθ,并且在计算时用
θ
T
M
θ
\theta^TM\theta
θTMθ代替
θ
T
θ
\theta^T\theta
θTθ,矩阵
M
M
M是根据我们选择的核函数而不同的一个矩阵,这样做可以提高计算效率,修改后的代价函数为:
C
∑
i
=
1
m
[
y
(
i
)
C
o
s
t
1
(
θ
T
f
(
i
)
)
+
(
1
−
y
(
i
)
)
C
o
s
t
0
(
θ
T
f
(
i
)
)
]
+
1
2
θ
T
M
θ
C\sum_{i=1}^m\left[y^{(i)}Cost_1(\theta^Tf^{(i)})+(1-y^{(i)})Cost_0(\theta^Tf^{(i)})\right]+\frac{1}{2}\theta^TM\theta
Ci=1∑m[y(i)Cost1(θTf(i))+(1−y(i))Cost0(θTf(i))]+21θTMθ
理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 𝑀来简化计算的方法不适用于逻辑回归,因此计算将非常耗费时间。
在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如
liblinear,libsvm 等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核
函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),
当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采
用这种不带核函数的支持向量机。
下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。
来自https://www.cnblogs.com/sl0309/p/10499278.html
上图是两个参数对结果的影响
12-6 使用支持向量机(SVM)
- 使用SVM软件库来计算 θ \theta θ的值
- 我们需要选择C的值
- 我们需要选择核函数
- 线性内核函数:不选择核函数,直接使用线性拟合,可以在特征数量n很大,而样本数量m很小的情况下使用
- 高斯核函数:可以在样本数量m很大,特征数量n很小的情况下使用,能够拟合出非线性边界
使用非线性核函数时,需要将特征值归一化
核函数需要满足默塞尔定理Mercer’s theorem