吴恩达机器学习(十四)—— SVM

1. 优化目标

  与Logistic回归和神经网络相比,支持向量机(SVM)在学习复杂的非线性方程时提供了一种更为清晰、更加强大的方式。
  接下来,我们从Logistic回归开始展示我们如何一点一点修改来得到本质上的支持向量机。
  Logistic回归模型的假设函数是 h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta }(x)=g(\theta ^{T}x)=\frac{1}{1+e^{-\theta ^{T}x}} hθ​(x)=g(θTx)=1+e−θTx1​ ,常用的Logistic函数为S形函数,图像如下图所示。

吴恩达机器学习(十四)—— SVM
  Logistic回归要做的是:

  • I f     y = 1 ,     w e     w a n t     h θ ( x ) ≈ 1 ,     θ T x > > 0. If\ _{} \ _{} y=1,\ _{} \ _{}we\ _{} \ _{}want \ _{} \ _{}h_{\theta }(x)\approx1,\ _{} \ _{}\theta ^{T}x>>0. If ​ ​y=1, ​ ​we ​ ​want ​ ​hθ​(x)≈1, ​ ​θTx>>0.
  • I f     y = 0 ,     w e     w a n t     h θ ( x ) ≈ 0 ,     θ T x < < 0. If\ _{} \ _{} y=0,\ _{} \ _{}we\ _{} \ _{}want \ _{} \ _{}h_{\theta }(x)\approx0,\ _{} \ _{}\theta ^{T}x<<0. If ​ ​y=0, ​ ​we ​ ​want ​ ​hθ​(x)≈0, ​ ​θTx<<0.

  Logistic回归的代价函数为 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(\theta )=-\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(θ)=−m1​i=1∑m​[y(i)log(hθ​(x(i)))+(1−y(i))log(1−hθ​(x(i)))]+2mλ​j=1∑n​θj2​

  Logistic回归的优化目标为 min ⁡ θ J ( θ ) \min_{\theta}J(\theta ) θmin​J(θ)

  在SVM中,我们用 c o s t 0 ( z ) cost_{0}(z) cost0​(z)来替换 − l o g ( 1 − 1 1 + e − z ) -log(1-\frac{1}{1+e^{-z}}) −log(1−1+e−z1​),用 c o s t 1 ( z ) cost_{1}(z) cost1​(z)来替换 − l o g 1 1 + e − z -log\frac{1}{1+e^{-z}} −log1+e−z1​,如下图所示。

吴恩达机器学习(十四)—— SVM
  对优化目标来说,我们用 c o s t 0 ( θ T x ( i ) ) cost_{0}(\theta ^{T}x^{(i)}) cost0​(θTx(i))来替换 − l o g ( 1 − h θ ( x ( i ) ) ) -log(1-h_{\theta}(x^{(i)})) −log(1−hθ​(x(i))),用 c o s t 1 ( θ T x ( i ) ) cost_{1}(\theta ^{T}x^{(i)}) cost1​(θTx(i))来替换 − l o g ( h θ ( x ( i ) ) ) -log(h_{\theta}(x^{(i)})) −log(hθ​(x(i))),则SVM的优化目标为 min ⁡ θ 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 \min_{\theta}C\sum_{i=1}^{m}[y^{(i)}cost_{1}(\theta ^{T}x^{(i)})+(1-y^{(i)})cost_{0}(\theta ^{T}x^{(i)})]+\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2} θmin​Ci=1∑m​[y(i)cost1​(θTx(i))+(1−y(i))cost0​(θTx(i))]+21​j=1∑n​θj2​

其中, C C C控制着对误差分类的惩罚力度, C C C越大,SVM越努力地试图将训练样本全部正确分类。
  Logistic回归的代价函数可以写为 A + λ B A+\lambda B A+λB的形式,若 λ \lambda λ非常大,意味着 B B B的权重很大。而SVM的代价函数可以写为 C A + B CA+B CA+B的形式,对应于Logistic回归的代价函数形式, C = 1 λ C=\frac{1}{\lambda} C=λ1​,若 C C C非常小,相应的 B B B有更大权重。
  SVM的假设函数为 h θ ( x ) = { 1         i f     θ T x ⩾ 0 0         o t h e r w i s e     h_{\theta }\left ( x \right )=\left\{\begin{matrix} 1\ _{} \ _{}\ _{} \ _{}if\ _{} \ _{}\theta ^{T}x\geqslant 0\\ 0\ _{} \ _{}\ _{} \ _{}otherwise\ _{} \ _{} \end{matrix}\right. hθ​(x)={1 ​ ​ ​ ​if ​ ​θTx⩾00 ​ ​ ​ ​otherwise ​ ​​

  有别于Logistic回归输出的概率,最小化支持向量机的代价函数获得参数 θ \theta θ时,支持向量机所做的是直接预测 y y y的值等于1还是等于0。如果 θ T x ⩾ 0 \theta ^{T}x\geqslant 0 θTx⩾0,假设函数就会输出1,反之会输出0,所以学习参数 θ \theta θ就是支持向量机的假设函数形式。

2. 大间距的直观理解

  有时人们会把支持向量机叫做大间距分类器(Large margin classifiers)。

吴恩达机器学习(十四)—— SVM

  • I f     y = 1 ,     w e     w a n t         θ T x ⩾     1 ( n o t     j u s t     ⩾ 0 ) . If\ _{} \ _{} y=1,\ _{} \ _{}we\ _{} \ _{}want \ _{} \ _{}\ _{} \ _{}\theta ^{T}x\geqslant \ _{}\ _{}1(not\ _{} \ _{}just\ _{} \ _{}\geqslant 0). If ​ ​y=1, ​ ​we ​ ​want ​ ​ ​ ​θTx⩾ ​ ​1(not ​ ​just ​ ​⩾0).
  • I f     y = 0 ,     w e     w a n t         θ T x ⩽ − 1 ( n o t     j u s t     ⩽ 0 ) . If\ _{} \ _{} y=0,\ _{} \ _{}we\ _{} \ _{}want \ _{} \ _{}\ _{} \ _{}\theta ^{T}x\leqslant -1(not\ _{} \ _{}just\ _{} \ _{}\leqslant 0). If ​ ​y=0, ​ ​we ​ ​want ​ ​ ​ ​θTx⩽−1(not ​ ​just ​ ​⩽0).

  上面的图中,左边关于 z z z的代价函数用于正样本,右边关于 z z z的代价函数用于负样本。
  如何使代价函数变得更小?如果 y = 1 y=1 y=1,那么仅当 z ⩾ 1 z\geqslant 1 z⩾1,有 c o s t 1 ( z ) = 0 cost_{1}(z)=0 cost1​(z)=0,代价函数更小。如果 y = 0 y=0 y=0,那么仅当 z ⩽ − 1 z\leqslant -1 z⩽−1,有 c o s t 0 ( z ) = 0 cost_{0}(z)=0 cost0​(z)=0,代价函数更小。
  如果 C C C非常大,那么当最小化优化目标时,迫切希望能找到一个值使得第一项等于0。如果把优化问题看作是通过选择参数来使得第一项等于0,那么优化问题就变成了 m i n [ C × 0 + 1 2 ∑ j = 1 n θ j 2 ] = m i n 1 2 ∑ j = 1 n θ j 2 min[C\times0+\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2}]=min\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2} min[C×0+21​∑j=1n​θj2​]=min21​∑j=1n​θj2​。当解决这个优化问题的时候,最小化关于参数 θ \theta θ的函数,会得到一个很有趣的决策边界。
  对于线性可分的数据集,存在多条不同的直线可以把正样本和负样本完全分开,如下图所示。
吴恩达机器学习(十四)—— SVM
  上图中的多条决策边界中,黑色的看起来更好、更稳健一些,在分离正样本和负样本中显得的更好。数学上来讲,这条黑线有更大的距离,这个距离叫做间距(margin),这使得支持向量机具有鲁棒性,因为它在分离数据时会尽量用大的间距去分离样本,因此支持向量机有时被称为大间距分类器
  为什么优化问题会产生大间距分类器?这个大间距分类器是在常数 C C C被设的非常大的情况下得出的。
  事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当我们使用大间距分类器的时候,我们的学习算法会受异常点(outlier) 的影响,比如我们加入一个额外的正样本。下面我们看一下存在异常点的大间距分类器,如下图所示。
吴恩达机器学习(十四)—— SVM  上图中,在没有加异常点之前,决策边界是黑色线,若加上异常点之后,决策边界就变成了红色线,但仅仅因为这一个样本就将决策边界从这条黑线变到这条红线实在是不明智的。而如果正则化参数 C C C设置得比较小,决策边界则还是黑线。如果数据不是线性可分的,SVM仍可正确分类。在实际应用中,当 C C C不是非常大时,可以忽略像上图中这样的异常点来得到正确的结果,甚至当数据不是线性可分的时候,支持向量机也可以给出好的结果。
  回顾一下 C = 1 λ C=\frac{1}{\lambda} C=λ1​:

  • C C C较大时,相当于 λ \lambda λ较小,可能会导致过拟合,高方差。
  • C C C较小时,相当于 λ \lambda λ较大,可能会导致低拟合,高偏差。

3. 大间距分类器背后的数学原理

  向量内积的性质:有向量 u = [ u 1 u 2 ] u=\begin{bmatrix} u_{1}\\ u_{2} \end{bmatrix} u=[u1​u2​​], v = [ v 1 v 2 ] v=\begin{bmatrix} v_{1}\\ v_{2} \end{bmatrix} v=[v1​v2​​],如下图所示。

吴恩达机器学习(十四)—— SVM
其中, ∥ u ∥ \left \| u \right \| ∥u∥为向量 u u u的欧几里得长度, ∥ u ∥ = u 1 2 + v 1 2 \left \| u \right \|=\sqrt{u_{1}^{2}+v_{1}^{2}} ∥u∥=u12​+v12​ ​, p p p为向量 v v v在向量 u u u上的投影长度, p p p是有符号的,即它可能是正值,也可能是负值,则 u T v = p ⋅ ∥ u ∥ = u 1 v 1 + u 2 v 2 = v T u u^{T}v=p\cdot\left \| u \right \|=u_{1}v_{1}+u_{2}v_{2}=v^{T}u uTv=p⋅∥u∥=u1​v1​+u2​v2​=vTu。
  接下来,我们使用这些关于向量内积的性质试图来理解支持向量机中的目标函数。
  支持向量机中的目标函数:
min ⁡ θ 1 2 ∑ j = 1 n θ j 2 \min_{\theta}\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2} θmin​21​j=1∑n​θj2​

s . t     θ T x ( i ) ⩾       1     , i f     y ( i ) = 1 s.t \ _{} \ _{}\theta ^{T}x^{(i)}\geqslant \ _{}\ _{} \ _{}1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=1 s.t ​ ​θTx(i)⩾ ​ ​ ​1 ​ ​,if ​ ​y(i)=1

            θ T x ( i ) ⩽ − 1     , i f     y ( i ) = 0 \ _{} \ _{}\ _{}\ _{}\ _{} \ _{}\theta ^{T}x^{(i)}\leqslant -1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=0  ​ ​ ​ ​ ​ ​θTx(i)⩽−1 ​ ​,if ​ ​y(i)=0

  简化一下目标函数,令 θ 0 = 0 \theta_{0}=0 θ0​=0, n = 2 n=2 n=2,目标函数变为

min ⁡ θ 1 2 ∑ j = 1 n θ j 2 = min ⁡ θ 1 2 ( θ 1 2 + θ 2 2 ) = min ⁡ θ 1 2 ( θ 1 2 + θ 2 2 ) 2 = min ⁡ θ 1 2 ∥ θ ∥ 2 \min_{\theta}\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2}=\min_{\theta}\frac{1 }{2} \left ( \theta _{1}^{2}+ \theta _{2}^{2} \right )=\min_{\theta}\frac{1 }{2} \left ( \sqrt{\theta_{1}^{2}+\theta_{2}^{2}} \right )^{2}=\min_{\theta}\frac{1 }{2}\left \| \theta \right \|^{2} θmin​21​j=1∑n​θj2​=θmin​21​(θ12​+θ22​)=θmin​21​(θ12​+θ22​ ​)2=θmin​21​∥θ∥2

s . t     θ T x ( i ) ⩾       1     , i f     y ( i ) = 1 s.t \ _{} \ _{}\theta ^{T}x^{(i)}\geqslant \ _{}\ _{} \ _{}1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=1 s.t ​ ​θTx(i)⩾ ​ ​ ​1 ​ ​,if ​ ​y(i)=1

            θ T x ( i ) ⩽ − 1     , i f     y ( i ) = 0 \ _{} \ _{}\ _{}\ _{}\ _{} \ _{}\theta ^{T}x^{(i)}\leqslant -1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=0  ​ ​ ​ ​ ​ ​θTx(i)⩽−1 ​ ​,if ​ ​y(i)=0

  由上式可知,支持向量机做的全部事情就是极小化参数向量范数的平方,或者说长度的平方,可以画出如下的向量图。

吴恩达机器学习(十四)—— SVM
  由上图中的向量可得 θ T x ( i ) = p ( i ) ⋅ ∥ θ ∥ = θ 1 x 1 ( i ) + θ 2 x 2 ( i ) \theta ^{T}x^{(i)}=p^{(i)}\cdot\left \| \theta \right \|=\theta_{1}x_{1}^{(i)}+\theta_{2}x_{2}^{(i)} θTx(i)=p(i)⋅∥θ∥=θ1​x1(i)​+θ2​x2(i)​。其中, x ( i ) 表 示 一 个 正 样 本 x^{(i)}表示一个正样本 x(i)表示一个正样本, θ \theta θ为参数向量, p ( i ) p^{(i)} p(i)为用来表示这是第 i i i个训练样本在参数向量 θ \theta θ上的投影。
  由于 θ T x ( i ) = p ( i ) ⋅ ∥ θ ∥ \theta ^{T}x^{(i)}=p^{(i)}\cdot\left \| \theta \right \| θTx(i)=p(i)⋅∥θ∥,则支持向量机的目标函数为

min ⁡ θ 1 2 ∑ j = 1 n θ j 2 = min ⁡ θ 1 2 ∥ θ ∥ 2 \min_{\theta}\frac{1 }{2} \sum_{j=1}^{n} \theta _{j}^{2}=\min_{\theta}\frac{1 }{2}\left \| \theta \right \|^{2} θmin​21​j=1∑n​θj2​=θmin​21​∥θ∥2

s . t     p ( i ) ⋅ ∥ θ ∥ ⩾       1     , i f     y ( i ) = 1 s.t \ _{} \ _{}p^{(i)}\cdot\left \| \theta \right \|\geqslant \ _{}\ _{} \ _{}1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=1 s.t ​ ​p(i)⋅∥θ∥⩾ ​ ​ ​1 ​ ​,if ​ ​y(i)=1

            p ( i ) ⋅ ∥ θ ∥ ⩽ − 1     , i f     y ( i ) = 0 \ _{} \ _{}\ _{}\ _{}\ _{} \ _{}p^{(i)}\cdot\left \| \theta \right \|\leqslant -1\ _{} \ _{},if \ _{} \ _{}y^{(i)}=0  ​ ​ ​ ​ ​ ​p(i)⋅∥θ∥⩽−1 ​ ​,if ​ ​y(i)=0

  对于如下图所示的样本数据集,简化 θ 0 = 0 \theta_{0}=0 θ0​=0,使决策边界通过远点,我们来看一下它的决策边界。 θ \theta θ与决策边界垂直,使得代价函数为0。

吴恩达机器学习(十四)—— SVM
  左图所示的决策边界不是一个很好的选择,因为它的间距很小,决策边界据样本距离很近。对于正样本而言,我们需要 p ( 1 ) ⋅ ∥ θ ∥ ⩾ 1 p^{(1)}\cdot\left \| \theta \right \|\geqslant 1 p(1)⋅∥θ∥⩾1,但是如果 p ( 1 ) p^{(1)} p(1)非常小的话,那就意味着我们需要 θ \theta θ的范数非常大。类似地,对于负样本而言,我们需要 p ( 2 ) ⋅ ∥ θ ∥ ⩽ − 1 p^{(2)}\cdot\left \| \theta \right \|\leqslant -1 p(2)⋅∥θ∥⩽−1,但我们发现 p ( 2 ) p^{(2)} p(2)会非常小,因此唯一的办法就是使 θ \theta θ的范数变大。但是我们的目标函数是希望找到一个参数 θ \theta θ,它的范数是小的。因此,这看起来不像是一个好的参数向量 θ \theta θ的选择。
  右图所示的决策边界将会是支持向量机所选择的决策边界。相比于左图,右图的 p ( 1 ) p^{(1)} p(1)和 p ( 2 ) p^{(2)} p(2)变大了,所以 θ \theta θ的范数就变小了,从而令范数的平方变小,这正符合支持向量机中最小化目标函数的目的,这也就是支持向量机如何能有效地产生大间距分类的原因。
  结论: 优化目标函数的目的是找到参数 θ \theta θ使得 ∥ θ ∥ \left \| \theta \right \| ∥θ∥足够小,这可以通过让间距变大,即使 p ( 1 ) , p ( 2 ) , . . . p^{(1)},p^{(2)},... p(1),p(2),...增大来实现。

4. 核函数

   对于下图的非线性数据集,可以通过构造一个复杂的多项式模型来解决无法用直线进行分隔的分类问题。

吴恩达机器学习(十四)—— SVM
   为了获得上图所示的决策边界,我们的模型可能是 h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + . . . h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{1}x_{2}+\theta_{4}x_{1}^{2}+\theta_{5}x_{2}^{2}+... hθ​(x)=θ0​+θ1​x1​+θ2​x2​+θ3​x1​x2​+θ4​x12​+θ5​x22​+...的形式。接下来我们用一系列新的特征 f f f来替换模型中的每一项。例如令 f 1 = x 1 f_{1}=x_{1} f1​=x1​, f 2 = x 2 f_{2}=x_{2} f2​=x2​, f 3 = x 1 x 2 f_{3}=x_{1}x_{2} f3​=x1​x2​, f 4 = x 1 2 f_{4}=x_{1}^{2} f4​=x12​, f 5 = x 2 2 f_{5}=x_{2}^{2} f5​=x22​, . . . ... ...,得到 h θ ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 + θ 4 f 4 + θ 5 f 5 + . . . h_{\theta}(x)=\theta_{0}+\theta_{1}f_{1}+\theta_{2}f_{2}+\theta_{3}f_{3}+\theta_{4}f_{4}+\theta_{5}f_{5}+... hθ​(x)=θ0​+θ1​f1​+θ2​f2​+θ3​f3​+θ4​f4​+θ5​f5​+...。那么除了对原有的特征进行组合以外,有没有更好的方法来构造特征 f 1 f_{1} f1​, f 2 f_{2} f2​, f 3 f_{3} f3​?我们可以利用核函数来计算出新的特征。
  给定一个训练样本 x x x,我们利用 x x x的各个特征与我们预先选定的地标(landmarks) l ( 1 ) l^{(1)} l(1), l ( 2 ) l^{(2)} l(2), l ( 3 ) l^{(3)} l(3)的近似程度来选取新的特征 f 1 f_{1} f1​, f 2 f_{2} f2​, f 3 f_{3} f3​,如下图所示。
吴恩达机器学习(十四)—— SVM
  例如, f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e ( − ∥ x − l ( 1 ) ∥ 2 2 σ 2 ) f_{1}=similarity(x,l^{(1)})=e({-\frac{\left \|x- l^{(1)} \right \|^{2}}{2\sigma ^{2}}}) f1​=similarity(x,l(1))=e(−2σ2∥x−l(1)∥2​)
        f 2 = s i m i l a r i t y ( x , l ( 2 ) ) = e ( − ∥ x − l ( 2 ) ∥ 2 2 σ 2 ) f_{2}=similarity(x,l^{(2)})=e({-\frac{\left \| x-l^{(2)} \right \|^{2}}{2\sigma ^{2}}}) f2​=similarity(x,l(2))=e(−2σ2∥x−l(2)∥2​)
        f 1 = s i m i l a r i t y ( x , l ( 3 ) ) = e ( − ∥ x − l ( 3 ) ∥ 2 2 σ 2 ) f_{1}=similarity(x,l^{(3)})=e({-\frac{\left \| x-l^{(3)} \right \|^{2}}{2\sigma ^{2}}}) f1​=similarity(x,l(3))=e(−2σ2∥x−l(3)∥2​)
其中, ∥ x − l ( 1 ) ∥ 2 = ∑ j = 1 n ( x j − l j ( 1 ) ) 2 \left \|x- l^{(1)} \right \|^{2}=\sum_{j=1}^{n}\left (x_{j}-l^{(1)}_{j} \right )^{2} ∥∥​x−l(1)∥∥​2=∑j=1n​(xj​−lj(1)​)2为实例中所有特征与地标之间的距离的和, s i m i l a r i t y ( x , l ( 1 ) ) similarity(x,l^{(1)}) similarity(x,l(1))是核函数,具体而言是一个高斯核函数(Gaussian Kernel)。
   这些地标的作用是什么?如果一个训练样本 x x x与地标 l l l之间的距离近似于0,则新特征 f f f近似于 e − 0 = 1 e^{-0}=1 e−0=1;如果训练样本 x x x与地标 l l l之间距离较远,则 f f f近似于 e − ( 一 个 较 大 的 数 ) = 0 e^{-(一个较大的数)}=0 e−(一个较大的数)=0。
   假设我们的训练样本含有两个特征 [ x 1 , x 2 ] [x_{1},x_{2} ] [x1​,x2​],给定地标 l ( 1 ) l^{(1)} l(1)与不同的 σ \sigma σ值,见下图:

吴恩达机器学习(十四)—— SVM
   上图中水平面的坐标为 x 1 , x 2 x_{1},x_{2} x1​,x2​ ,而垂直坐标轴代表 f f f。可以看出,只有当 x x x与 l ( 1 ) l^{(1)} l(1)重合时, f f f才具有最大值。随着 x x x的改变, f f f值改变的速率受到 σ 2 \sigma^{2} σ2的控制。 σ 2 \sigma^{2} σ2是高斯函数的参数, σ 2 \sigma^{2} σ2变小会发现凸起的宽度变窄了,等高线也收缩了, f 1 f_{1} f1​下降到0的速率变快; σ 2 \sigma^{2} σ2变大,从点 l ( 1 ) l^{(1)} l(1)往旁边移动,特征变量的值减小的速率会变得比较慢。

   在给定学习问题中,如何选择地标?
   我们通常是根据训练集的数量选择地标的数量,即如果训练集中有 m m m个样本,则我们选取 m m m个地标,并且令 l ( 1 ) = x ( 1 ) l^{(1)}=x^{(1)} l(1)=x(1), l ( 2 ) = x ( 2 ) l^{(2)}=x^{(2)} l(2)=x(2), . . . ... ..., l ( m ) = x ( m ) l^{(m)}=x^{(m)} l(m)=x(m)。这样做的好处在于,现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的。

   下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设函数。
   给定 x x x,计算新特征 f f f,当 θ T f ⩾ 0 \theta ^{T}f\geqslant0 θTf⩾0时,预测 y = 1 y=1 y=1,否则反之。训练时优化目标为 min ⁡ θ 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 = m θ j 2 \min_{\theta}C\sum_{i=1}^{m}[y^{(i)}cost_{1}(\theta ^{T}x^{(i)})+(1-y^{(i)})cost_{0}(\theta ^{T}x^{(i)})]+\frac{1 }{2} \sum_{j=1}^{n=m} \theta _{j}^{2} θmin​Ci=1∑m​[y(i)cost1​(θTx(i))+(1−y(i))cost0​(θTx(i))]+21​j=1∑n=m​θj2​

   在支持向量机应用过程中,相应地修改代价函数为 ∑ j = 1 n = m θ j 2 = θ T θ \sum_{j=1}^{n=m}\theta_{j}^{2}=\theta^{T}\theta ∑j=1n=m​θj2​=θTθ。在实现的时候,用 θ T M θ \theta^{T}M\theta θTMθ代替 θ T θ \theta^{T}\theta θTθ,其中 M M M矩阵依赖于我们选择的核函数。这样做的原因是为了简化计算,使得支持向量机能够更有效率的运行,支持向量机做这种修改可以使它应用更大的训练集。
   理论上,我们也可以将核函数思想应用到Logistic回归上,但使用 M M M矩阵来简化计算的方法并不适用于Logistic回归,它会变得很慢。
   另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(Linear kernel)。当我们不采用非常复杂的函数或者我们的训练集特征非常多而样本非常少时,可以采用这种不带核函数的支持向量机。
   下面是支持向量机的两个参数 C ( = 1 λ ) C(=\frac{1}{\lambda }) C(=λ1​)和 σ 2 \sigma^{2} σ2的影响:

  • C C C较大时,相当于 λ \lambda λ较小,可能会导致过拟合、高方差;
  • C C C较小时,相当于 λ \lambda λ较大,可能会导致欠拟合、高偏差;
  • σ 2 \sigma^{2} σ2较大时,特征 f i f_{i} fi​的变化非常平滑,可能会导致高偏差、低方差;
  • σ 2 \sigma^{2} σ2较小时,特征 f i f_{i} fi​的变化变得不平滑,可能会导致低偏差、高方差。

5. 使用支持向量机

   使用SVM软件包去求解参数 θ \theta θ。尽管我们不去写自己的SVM优化软件,但是也需要做几件事:

  • 参数 C C C的选择;
  • 核函数(相似函数)的选择。

   核函数有很多的软件库,例如其中一个选择是我们选择不需要任何核参数、没有核参数的理念,也叫线性核函数。为什么这样做?如果我们有大量的特征( n n n很大),但训练样本很小( m m m很小),则只想拟合一个线性的决策边界,而不去拟合一个非常复杂的非线性函数,因为没有足够的数据,可能会导致过拟合。假如在一个非常高维的特征空间中尝试拟合非常复杂的函数,但如果训练集样本很小,这将会是一个合理的设置,决定不使用核函数或等价于一些叫做线性核函数。
   什么时候选择高斯核函数呢?如果忽略特征值 x x x,如果 n n n很小,理想情况下,如果 m m m很大,那么如果我们有一个比如二维的训练集( n = 2 n=2 n=2但我们有很多训练集样本),想用核函数来拟合相当复杂的非线性决策边界,高斯核函数是一个不错的选择。
  值得注意的是,不是所有的相似函数都是有效的核函数。高斯核函数和线性核函数以及其他核函数都需要满足一个技术条件——默塞尔定理。需要满足这个条件的原因是因为支持向量机算法或者SVM的实现有许多巧妙的数值优化技巧,为了有效地求解参数 θ θ θ,在最初的设想里这些决策都用以将我们的注意力仅仅限制在可以满足默塞尔定理的核函数上。这个定理所做的是确保所有的SVM软件包能够使用大量的优化方法并且快速地得到参数 θ θ θ。
  一些其他的核函数:多项式核函数、字符串核函数、卡方核函数、直方图交叉核函数等等 。
  从Logistic回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?下面是一些普遍使用的准则, n n n为特征数, m m m为训练样本数。

  • 如果 n n n相较于 m m m足够大的话,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用Logistic回归模型或者不带核函数的支持向量机。
  • 如果 n n n较小, m m m大小中等,例如 n n n在 1-1000 之间,而 m m m在10-10000之间,使用高斯核函数的支持向量机。
  • 如果 n n n较小,而 m m m较大,例如 n n n在1-1000之间,而 m m m大于50000,则使用支持向量机会非常慢,解决方案是手动地创建拥有更多的特征变量,然后使用Logistic回归或不带核函数的支持向量机。

  值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。
  那么神经网络使用于什么时候呢? 对于所有的这些问题,对于所有的这些不同体系,一个设计得很好的神经网络也很有可能会非常有效。有一个缺点,或者说有时可能不会使用神经网络的原因是:对于许多这样的问题,神经网络训练起来可能会特别慢,但是如果你有一个非常好的SVM实现包,它可能会运行得比较快比神经网络快很多。事实证明,SVM具有的优化问题是一种凸优化问题,因此好的SVM优化软件包总是会找到全局最小值,或者接近它的值。对于SVM,我们不需要担心局部最优。在实际应用中,局部最优不是神经网络所需要解决的一个重大问题,所以这是我们在使用SVM的时候不需要太去担心的一个问题。
  在遇到机器学习问题时,有时会不确定该用哪种算法,但是通常更加重要的是有多少数据,有多熟练,是否擅长做误差分析和排除学习算法,指出如何设定新的特征变量和找出其他能决定你学习算法的变量等方面,通常这些方面会比我们具体使用Logistic回归还是SVM算法方面更加重要。

上一篇:【lssvm预测】基于鲸鱼优化算法的lssvm数据预测matlab源码


下一篇:【语音识别】基于matlab MFCC和SVM特定人性别识别【含Matlab源码 533期】