文章目录
1.SVM(Large Margin Classification)
SVM又称为大间距分类
1.1支持向量机的引入(support vector machine SVM)
介绍从修改逻辑回归的假设函数及曲线,得到支持向量机,支持向量机的特点是鲁棒性(大间距分类)和特征选取的不同(不使用多项式,用标记点和相似度函数区分样本距离),在样本特征小于样本数的时候计算效率高于神经网络。
与逻辑回归和神经网络相比,它在学习非线性复杂方程上提供了一种更加清晰、更加有效的思路。
逻辑回归中的代价函数和判决准则
逻辑回归中单个样本的代价如下图所示:
改造逻辑回归
上图下面左右两边的品红是的折现线分别表示,改造后 y = 1 y=1 y=1 和 y = 0 y=0 y=0的代价函数。 c o s t 1 ( z ) cost_1(z) cost1(z)和 c o s t 2 ( z ) cost_2(z) cost2(z),其中 z = θ T x z=\theta^Tx z=θTx。
对于逻辑回归优化目标是:
在支持向量机中将
c
o
s
t
1
(
z
)
cost_1(z)
cost1(z)和
c
o
s
t
2
(
z
)
cost_2(z)
cost2(z)替换进去,得到:
无论是否有
1
m
\frac{1}{m}
m1都不影响取最优化的参数
θ
\theta
θ,在支持向量机中默认忽略
1
m
\frac{1}{m}
m1。
如下图所示,在逻辑回归中正则化代价函数,可以用 A + λ B A+\lambda B A+λB表示,其中 A A A表示训练样本的代价, B B B表示正则化项,设置 λ \lambda λ来控制 A 、 B A、B A、B之间的平衡,是得拟合效果更好。支持向量机使用另一个参数 C C C来控制 A A A和 B B B之间的平衡,代价函数为 C A + B CA+B CA+B
支持向量机的优化目标是:
总觉逻辑回归和SVM的区别
- 代价函数不同
支持向量机中用 c o s t 1 ( z ) c o s t 0 ( z ) cost1(z)\quad cost_0(z) cost1(z)cost0(z)代替 − l o g 1 1 + e − z -log\frac{1}{1+e^{-z}} −log1+e−z1,即用折线代替曲线,还有 θ T x \theta^Tx θTx范围的问题下节说明- 去掉参数 λ \lambda λ,使用 C C C去平衡训练样本的代价和正则化项
- 不使用系数 1 m \frac{1}{m} m1
SVM其实本质上也是在空间中拟合一条曲线(面) θ T x \theta^Tx θTx进行空间分隔,参数 C C C的大小能影响曲线的形状
下面讨论支持向量机的边界问题
1.2最大间距分类器(Large Margin Intuition)
支持向量机有时候被称为“大间距分类器”,原因后述。
下图是支持向量机模型的代价函数,判定条件。
上面的式子是SVM的优化目标(代价函数),左图是
c
o
s
t
1
(
z
)
cost_1(z)
cost1(z) 的图像,右侧是
c
o
s
t
0
(
z
)
cost_0(z)
cost0(z) 的图像。
讨论代价函数的最小化问题,在本周的课程中思路是假设
C
C
C是一个很大的正数,为了最小化的目标函数,必须让前一项等于0,其实就算要
θ
T
x
\theta^Tx
θTx满足上图的条件。那么现在问题就是最小化
1
2
∑
j
=
1
n
θ
j
2
\frac{1}{2}\displaystyle\sum_{j=1}^n\theta_j^2
21j=1∑nθj2
首先从简单的二维图形上直观感受一下这个过程:
对于线性可分隔数据集,这个数学问题在二维坐标系(考虑只有两个参数的情况,多维可以扩展)中就被转化为求一条直线可以完美地分隔我们的正负数据集的决策边界,如下图绿色,紫红色和黑色的直线都做到了分隔数据集,但是明显黑色线条分隔的更好,而上述最值问题求解出的就是黑色这条直线,这条黑色直线拥有所谓”很大的margin”,margin指的是正负样本到直线的最小距离。而别的直线拥有的margin就很小。这也就是Large Margin Classifier中large margin的由来,同时这也是SVM具有鲁棒性的原因。后面再详细讲解数学原理。
再来看参数C对决策边界的影响:
参数
C
C
C控制着对误分类训练样本的惩罚,当参数
C
C
C设置的较大时,优化过程会努力使所有的训练数据都被正确分类,这会导致当有一个异常点的的时候,决策边界从下图的黑色变成粉色。SVM可以通过控制参数
C
C
C的大小忽略掉一些异常点的影响。
C是常数,和 1 λ \frac{1}{\lambda} λ1的作用类似
1.3大间距分类器背后的数学原理 (large margin classification)
【数学复习】矩阵的内积
最小化支持向量机中的目标函数
为了方便直观理解和推导,我们简化一下,考虑样本只有俩个参数的情况n=2,
θ
0
=
0
\theta_0=0
θ0=0;首先对最小化函数进行转换,最小化函数其实就算系数向量在二维平面上模(长度)的平方。再看约束条件
θ
T
x
\theta^Tx
θTx是两个向量的内积。其实等价于
p
(
i
)
.
∣
∣
θ
∣
∣
p^{(i)}.||\theta||
p(i).∣∣θ∣∣,
p
(
i
)
p^{(i)}
p(i)为向量
x
(
i
)
x^{(i)}
x(i)在
θ
\theta
θ上的投影,
∣
∣
θ
∣
∣
||\theta||
∣∣θ∣∣为向量
θ
\theta
θ的长度。那么我们的优化目标就成了
现在的目标是拟合一条直线去分割平面,直线的方程是
θ
T
x
=
0
\theta^Tx=0
θTx=0,对应的向量
θ
\theta
θ就是直线的法向量,对于下图中的平面,如果我们按照下图左下角的绿色曲线,我们会发现
x
(
i
)
x^{(i)}
x(i)在
θ
\theta
θ上的投影很小,那么为了满足上图中的约束条件,
θ
\theta
θ的长度就很大,但我们的目标是最小化
θ
\theta
θ,该曲线不是我们所求。在图右下角,
x
(
i
)
x^{(i)}
x(i)在
θ
\theta
θ上的投影相对取到最大,那么
θ
\theta
θ的长度就能对应取到最小,是目标解。
2.核函数(Kernels)
2.1核函数1
在前面我们讨论的都是线性分类问题,接下来讨论SVM作为非线性分类器的情况,完成非线性分类的核心思想就算引入一个"核函数"的东西。
如下图,我们现在要对这样一个数据集进行分类,我们能想到的一种方法就是利用高次项来进行拟合,但是在处理复杂的问题的时候,高次项会大大增加我们的运算负荷,于是就想能不能选择别的更好的特征呢。答案当然是肯定的,也就是kernel。
接下来引入核函数,它能帮我们引入新的特征变量。同样的假设我们只有两个维度
x
1
,
x
2
x_1,x_2
x1,x2,人为的在平面上选取一些点作为标记点(landmark)这里假设取三个,分别为
l
(
1
)
,
l
(
2
)
,
l
(
3
)
l^{(1)},l^{(2)},l^{(3)}
l(1),l(2),l(3)
定义新的特征为某个相似函数:
f
i
=
s
i
m
i
l
a
r
i
t
y
(
x
,
l
(
i
)
)
=
e
x
p
(
−
∣
∣
x
−
l
(
i
)
∣
∣
2
2
δ
2
)
f_i=similarity(x,l^{(i)})=exp(-\frac{||x-l^{(i)}||^2}{2\delta^2})
fi=similarity(x,l(i))=exp(−2δ2∣∣x−l(i)∣∣2)
这个相似函数就是定义某个点与我们选取的landmark的接近(相似)程度,这个也就是我们的kernel(核函数)。核函数有很多种,课程中所举例的是高斯核函数。
对于高斯分布,如果某个点离我们的landmark越近,它对应的核函数的值就越接近于1,如果离的越远,就越接近于0。
我们之前定义了三个标记点
l
(
1
)
,
l
(
2
)
,
l
(
3
)
l^{(1)},l^{(2)},l^{(3)}
l(1),l(2),l(3),从每个标记点可以根据相似函数的定义一个新的特征变量,也就是说,给定一个样本 x ,我们可以计算出三个特征变量
f
1
,
f
2
,
f
3
f_1,f_2,f_3
f1,f2,f3。
我们假设现在有两个特征,
x
1
x_1
x1 和
x
2
x_2
x2,第一个标记点
l
(
1
)
=
[
3
5
]
l^{(1)}=\begin{bmatrix} 3 \\ 5 \end{bmatrix}
l(1)=[35] ,我们设置不同的 σ 的值并画出
f
1
f_1
f1 的图像:
对于二维的情况,每个kernel都是一个跟landmark和所选取的 σ 有关的二维高斯分布。
参数
δ
2
\delta^2
δ2对核函数曲线的影响
通过核函数和标记点构造复杂的非线性边界
假设只考虑3个标记点,根据SVM假设函数的定义,若
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
⩾
0
θ_0+θ_1f_1+θ_2f_2+θ_3f_3⩾0
θ0+θ1f1+θ2f2+θ3f3⩾0,则预测
y
=
1
y=1
y=1。
假设我们已经得到
θ
0
=
−
0.5
,
θ
1
=
1
,
θ
2
=
1
,
θ
3
=
0
θ_0=−0.5,θ_1=1,θ_2=1,θ_3=0
θ0=−0.5,θ1=1,θ2=1,θ3=0,标记点和训练样本的位置如下图:
对于粉色样本点,根据前面定义的新特征项的图像,
f
1
≈
1
,
f
2
≈
0
,
f
3
≈
0
f_1≈1,f_2≈0,f_3≈0
f1≈1,f2≈0,f3≈0,所以,
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
=
0.5
>
0
θ_0+θ_1f_1+θ_2f_2+θ_3f_3=0.5>0
θ0+θ1f1+θ2f2+θ3f3=0.5>0,预测 y=1。
对于蓝绿色样本点,根据前面定义的新特征项的图像,
f
1
≈
0
,
f
2
≈
0
,
f
3
≈
0
f_1≈0,f_2≈0,f_3≈0
f1≈0,f2≈0,f3≈0,所以,
θ
0
+
θ
1
f
1
+
θ
2
f
2
+
θ
3
f
3
=
−
0.5
<
0
θ_0+θ_1f_1+θ_2f_2+θ_3f_3=-0.5<0
θ0+θ1f1+θ2f2+θ3f3=−0.5<0,预测 y=0。
最终的决策边界会是非线性的,在边界内部预测 y=1,在边界外部预测 y=0,如上图红色框线所示。
那我们如何找到标记点(landmarks)?核函数2中介绍。
2.核函数2
选择标记点
面对复杂的问题,人为地选取landmark,显然是不太现实的。于是一个即简单又合理的方法就是选取我们训练集所有的点作为landmark,有多少个点就有多少个landmark。
对于给定的样本可以添加一个额外的特征
f
0
=
1
f_0=1
f0=1,得到特征向量:
f
=
[
f
0
f
1
f
2
⋮
f
m
]
f=\begin{bmatrix} f_0 \\ f_1\\ f_2\\ \vdots \\ f_m \end{bmatrix}
f=⎣⎢⎢⎢⎢⎢⎡f0f1f2⋮fm⎦⎥⎥⎥⎥⎥⎤
通过核函数(本质上一种映射),我们将
x
(
i
)
∈
R
n
+
1
x^{(i)}∈R^{n+1}
x(i)∈Rn+1映射到
f
(
i
)
∈
R
m
+
1
f^{(i)}∈R^{m+1}
f(i)∈Rm+1,现在特征量有了,训练集也有了,接下来就要训练模型拟合$θ $了。相比于上一篇的目标函数,由于加入了kernel,我们进行了一些修改如下。
对于目标函数的后一项可以表示为 θ T θ θ^Tθ θTθ,这里的 θ \theta θ 我们忽略 θ 0 \theta_0 θ0。在实际运用当中,我们的后一项其实是使用 θ T M θ θ^TMθ θTMθ,这个 M 矩阵跟我们的kernel有关,不仔细讲解它的构成,只说明加入这个矩阵的原因,由于我们将我们训练集的所有样本都用作为了landmark,可想而知,如果我们的样本数量很大,那么 θ T θ θ^Tθ θTθ的运算量是非常大的,而这个矩阵的引入能够大大的减少运算时间。
参数C与
δ
\delta
δ对偏差和方差的影响
前面提到参数 C 相当于逻辑回归中的
1
λ
\frac{1}{\lambda}
λ1,那么参数 C 对方差和偏差的影响如下:
C 太大,相当于 λ 太小,会产生高方差,低偏差,过拟合;
C 太小,相当于λ 太大,会产生高偏差,低方差,欠拟合。
同时,参数
σ
2
σ^2
σ2 也会对方差和偏差产生影响:
σ
2
σ^2
σ2 大,则特征
f
(
i
)
f^{(i)}
f(i) 变化较缓慢,可能会产生高偏差,低方差;
σ
2
σ^2
σ2 小,则特征
f
(
i
)
f^{(i)}
f(i) 变化不平滑,可能会产生高方差,低偏差。
3.SVM应用
在具体实现时,我们不需要自己编写代码来最优化参数 θ,而是使用SVM软件包(如:liblinear,libsvm等)来最优化参数 θ。在使用这些软件包时,我们需要自己选择参数 C 以及选择使用哪种核函数。
如果特征数 n 很大,而训练样本数 m 很小,使用线性核函数产生一个线性分类器就较为适合,不容易过拟合。 如果特征数 n
很小,而训练样本数 m 很大,就适合用一个核函数去实现一个非线性分类器,高斯核函数是个不错的选择。
默塞尔定理(Mercer’s Theorem)
我们如何选择使用SVM还是逻辑回归来解决分类问题?
①如果特征数 n 相对于训练样本数 m 来说很大:
则应该使用逻辑回归或者线性核函数(无核)的SVM。 mm 较小时,使用线性分类器效果就很好,并且也没有足够的数据去拟合出复杂的非线性分类器。
②如果特征数 n 很小,训练样本数 m 中等大小:
则应该使用高斯核函数SVM。
③如果特征数 n 很小,训练样本数 m 很大:则高斯核函数的SVM运行会很慢。这时候应该创建更多的特征变量,然后再使用逻辑回归或者线性核函数(无核)的SVM。
对于以上这些情况,神经网络很可能做得很好,但是训练会比较慢。实际上SVM的优化问题是一种凸优化问题,好的SVM优化软件包总是能找到全局最小值或者是接近全局最小的值。