吴恩达机器学习系列四(SVM)

吴恩达机器学习系列四

如何设计复杂的学习系统

构建一个学习算法的推荐方法为

  1. 首先选择一个可以快速应用的简单的算法,实现它然后测试得到交叉验证数据
  2. 绘制学习曲线来决定是否需要更多的数据(高方差)还是更多的特征(高偏差)来帮助
  3. 误差分析:手动检查算法出错的实例(在交叉验证集中),看看你是否发现了任何系统化的趋势,在哪种类型的例子上出错

误差分析

以我们的垃圾邮件过滤器为例,误差分析要做的是检验交叉验证集中我们的算法产生错误预测的所有邮件,看:是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。

然后看分类器对哪一组邮件的预测误差最大,并着手优化。 思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。 例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从出现次数最多的情况开始着手优化

吴恩达机器学习系列四(SVM)

误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验证集的误差

类偏斜的误差度量

偏斜类(skewed classes)

类偏斜情况表现为我们的训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本

例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。然而我们通过训练而得到的神经网络算法却有1%的误差。

这时,误差的大小是不能视为评判算法效果的依据

查准率(Precision)/查全率(Recall)

用来评估此类情况下的算法的效果、模型的好坏

吴恩达机器学习系列四(SVM)

  1. 正确肯定True Positive,TP):预测为真,实际为真
  2. 正确否定True Negative,TN):预测为假,实际为假
  3. 错误肯定False Positive,FP):预测为真,实际为假
  4. 错误否定False Negative,FN):预测为假,实际为真

Precision 查准率

查准率=TP/(TP+FP)

在我们预测属于某一类的样本中,有多少是真正属于该类的;越高越好

Recall 查全率

召回率=TP/(TP+FN)

在所有实际上为某一类的样本中,有多少是被成功预测为该类的;越高越好

查准率和查全率之间的权衡

查准率和查全率,作为遇到偏斜类问题的评估度量值

我们希望能够保证查准率和查全率的相对平衡

例如,癌症识别的例子
吴恩达机器学习系列四(SVM)

查准率**(Precision)=TP/(TP+FP)** 例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。

查全率**(Recall)=TP/(TP+FN)**例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比0.5更大的阀值,如0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。 如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比0.5更小的阀值,如0.3。 我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:

吴恩达机器学习系列四(SVM)

我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算F1 值F1 Score

F1 Score

评估如何选择合适的阀值

F 1 S c o r e : 2 P R P + R F_{1} Score:2\frac{PR}{P+R} F1​Score:2P+RPR​

我们选择使得F1值最高的阀值

机器学习的数据

吴恩达机器学习系列四(SVM)

通过不同类型的算法来区分常见的易混淆的单词
吴恩达机器学习系列四(SVM)

首先大部分算法,都具有相似的性能;其次,随着训练数据集的增大,在横轴上代表以百万为单位的训练集大小,从0.1个百万到1000百万,也就是到了10亿规模的训练集的样本,这些算法的性能也都对应地增强了

这些结果表明,许多不同的学习算法有时倾向于表现出非常相似的表现,这还取决于一些细节,但是真正能提高性能的,是你能够给一个算法大量的训练数据

支持向量机(Support Vector Machines)

优化目标

与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式
吴恩达机器学习系列四(SVM)

用 z z z表示 θ T x \theta^{T}x θTx

左边的函数称之为 C o s t 1 ( z ) Cost_{1}(z) Cost1​(z),右边的函数称之为 C o s t 0 ( z ) Cost_{0}(z) Cost0​(z);分别对应 y = 1 y=1 y=1和 y = 0 y=0 y=0的情况

接下来开始构建支持向量机
吴恩达机器学习系列四(SVM)

由于 1 m \frac{1}{m} m1​仅是常数项,与优化无关,因此去除 1 m \frac{1}{m} m1​这一项,也同样会得到 θ \theta θ最优值;同时将目标函数乘上一个常量 m m m,也并不会改变取得最小值时的 θ \theta θ值

在SVM中,我们使用 C C C来代替正则化参数 λ \lambda λ,同样是一种权衡方式/一种不同的参数设置方法,来决定我们是更关心第一项的优化,还是更关心第二项的优化

因此得到了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 ∑ i = 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_{i=1}^{n}\theta_{j}^{2} minθ​C∑i=1m​[y(i)cost1​(θTx(i))+(1−y(i))cost0​(θTx(i))]+21​∑i=1n​θj2​
吴恩达机器学习系列四(SVM)

最后有别于逻辑回归输出的概率。在这里,我们的代价函数,当最小化代价函数,获得参数时,支持向量机所做的是它来直接预测的值等于1,还是等于0

因此,如果 θ T x ≥ 0 \theta^{T}x{\ge}0 θTx≥0这个假设函数会预测1;其他会预测0

大边界的直观理解

人们有时将支持向量机看作是大间距分类器
吴恩达机器学习系列四(SVM)

如果有一个正样本 y = 1 y=1 y=1,则其实我们仅仅要求 θ T x ≥ 0 \theta^{T}x{\ge}0 θTx≥0,就能将该样本恰当分出;如果有一个负样本,仅需要 θ T x ≤ 0 \theta^{T}x{\le}0 θTx≤0,就会将负例正确分离

但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,我们需要的是比0值大很多,比如大于等于1,我也想这个比0小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子

SVM决策边界

如果 C C C非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解
吴恩达机器学习系列四(SVM)

由于第一项尽量为0,最优化问题演变如上,当解决这个优化问题的时候,得到很有趣的决策边界
吴恩达机器学习系列四(SVM)

具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分

存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开
吴恩达机器学习系列四(SVM)

这条黑色的看起来好得多,黑线看起来是更稳健的决策边界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做支持向量机的间距(margin);这使得SVM具有鲁棒性,会尽量用大的间距去分离

吴恩达机器学习系列四(SVM)

因此SVM有时被称为大间距分类器

大间距分类器

吴恩达机器学习系列四(SVM)
我们将这个大间距分类器中的正则化因子常数 C C C设置的非常大,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本

事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier) 的影响。比如我们加入一个额外的正样本,仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的
吴恩达机器学习系列四(SVM)

但是如果 C C C设置的小一点,如果你将C设置的不要太大,则你最终会得到这条黑线

但是实际上应用支持向量机的时候,当 C C C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界;甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果

回顾 C = 1 λ C=\frac{1}{\lambda} C=λ1​,因此:

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

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

核函数1

吴恩达机器学习系列四(SVM)

为了获得上图所示的判定边界,我们的模型可能是 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + ⋯ \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}+{\cdots} θ0​+θ1​x1​+θ2​x2​+θ3​x1​x2​+θ4​x12​+θ5​x22​+⋯的形式

我们可以用一系列的新的特征 f f f来替换模型中的每一项,例如:

令 f 1 = x 1 , f 2 = x 2 , f 3 = x 1 x 2 , f 4 = x 1 2 , f 5 = x 2 2 . . . . . f_{1}=x_{1},f_{2}=x_{2},f_{3}=x_{1}x_{2},f_{4}=x_{1}^{2},f_{5}=x_{2}^{2}..... f1​=x1​,f2​=x2​,f3​=x1​x2​,f4​=x12​,f5​=x22​.....

得到 h θ ( x ) = θ 1 f 1 + θ 2 f 2 + ⋯ + θ n f n h_{\theta}(x)=\theta_{1}f_{1}+\theta_{2}f_{2}+{\cdots}+\theta_{n}f_{n} hθ​(x)=θ1​f1​+θ2​f2​+⋯+θn​fn​

然后,除了对原有的特征进行组合以外,有没有更好的方法来构造 f 1 , f 2 , f 3 f_{1},f_{2},f_{3} f1​,f2​,f3​?我们可以利用核函数来计算出新的特征

给定一个训练样本 x x x,我们利用 x x x的各个特征与我们预先选定的地标(landmarks) l ( 1 ) , l ( 2 ) , l ( 3 ) l^{(1)},l^{(2)},l^{(3)} l(1),l(2),l(3)的近似程度来选取新的特征 f 1 , f 2 , f 3 f_{1},f_{2},f_{3} f1​,f2​,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{{\mid}{\mid}x-l^{(1)}||^{2}}{2{\sigma}^{2}}) f1​=similarity(x,l(1))=e(−2σ2∣∣x−l(1)∣∣2​)

其中: ∣ ∣ x − l ( 1 ) ∣ ∣ 2 = ∑ j = 1 n ( x j − l j ( 1 ) ) 2 {\mid}{\mid}x-l^{(1)}||^{2}=\sum_{j=1}^{n}(x_{j}-l_{j}^{(1)})^{2} ∣∣x−l(1)∣∣2=∑j=1n​(xj​−lj(1)​)2,为实例 x x x中所有特征与地标 l ( 1 ) l^{(1)} l(1)之间的距离的和

上例中的 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_{1} x1​ x 2 x_{2} x2​],给定地标 l ( 1 ) l^{(1)} l(1)与不同的 σ \sigma σ值,见下图:

吴恩达机器学习系列四(SVM)

图中水平面的坐标为 x 1 x_{1} x1​, x 2 x_{2} 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的控制

在下图中,当样本处于洋红色的点位置处,因为其离 l ( 1 ) l^{(1)} l(1)更近,但是离 l ( 2 ) l^{(2)} l(2)和 l ( 3 ) l^{(3)} l(3)较远,因此 f 1 f_{1} f1​接近1,而 f 2 , f 3 f_{2},f_{3} f2​,f3​接近0;因此, h θ ( x ) = θ 0 + θ 1 f 1 + θ 2 f 2 + θ 3 f 3 > 0 h_{\theta}(x)=\theta_{0}+\theta_{1}f_{1}+\theta_{2}f_{2}+\theta_{3}f_{3}>0 hθ​(x)=θ0​+θ1​f1​+θ2​f2​+θ3​f3​>0,因此预测 y = 1 y=1 y=1

同理,对于离 l ( 2 ) l^{(2)} l(2)较近的绿色点,也预测 y = 1 y=1 y=1,但是对于蓝绿色的点,因为其离三个地标都较远,预测 y = 0 y=0 y=0
吴恩达机器学习系列四(SVM)

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练样本和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练样本本身的特征,而是通过核函数计算出的新特征 f 1 , f 2 , f 3 f_{1},f_{2},f_{3} f1​,f2​,f3​

核函数2

如何选择地标?

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

下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:

给定样本 x x x,计算新特征 f ∈ R m + 1 f{\in}R^{m+1} f∈Rm+1

当 θ T f ≥ 0 \theta^{T}f{\ge}0 θTf≥0时,预测 y = 1 y=1 y=1;否则反之

相应的修改代价函数为: min ⁡ θ 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 ∑ i = 1 n = m θ j 2 \min_{\theta}C\sum_{i=1}^{m}[y^{(i)}cost_{1}(\theta^{T}f^{(i)})+(1-y^{(i)})cost_{0}(\theta^{T}f^{(i)})]+\frac{1}{2}\sum_{i=1}^{n=m}\theta_{j}^{2} minθ​C∑i=1m​[y(i)cost1​(θTf(i))+(1−y(i))cost0​(θTf(i))]+21​∑i=1n=m​θj2​

在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算 ∑ i = 1 n = m θ j 2 = θ T θ \sum_{i=1}^{n=m}\theta_{j}^{2}=\theta^{T}\theta ∑i=1n=m​θj2​=θTθ时,我们使用 θ T M θ \theta^{T}M\theta θTMθ代替 θ T θ \theta^{T}\theta θTθ,其中 M M M是根据我们选择的核函数而不同的一个矩阵,这样可以简化计算

理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 M M M来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间

在此,我们不介绍最小化支持向量机的代价函数的方法,你可以使用现有的软件包(如liblinear,libsvm等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的

另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机

总结

下面是支持向量机的两个参数 C C C和 σ \sigma σ的影响:

C = 1 λ C=\frac{1}{\lambda} C=λ1​,因此:

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

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

σ \sigma σ较大时,可能会导致低方差,高偏差;

σ \sigma σ较小时,可能会导致低偏差,高方差。

使用支持向量机

最小化支持向量机的代价函数强烈建议可以使用现有的软件包(如liblinear,libsvm等)

在高斯核函数之外我们还有其他一些选择,如:

多项式核函数(Polynomial Kernel)

字符串核函数(String kernel

卡方核函数( chi-square kernel

直方图交集核函数(histogram intersection kernel

等等…

这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer’s定理,才能被支持向量机的优化软件正确处理

多分类问题

假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有k个类,则我们需要k个模型,以及k个参数向量 θ \theta θ。我们同样也可以训练k个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可

尽管你不去写你自己的SVM的优化软件,但是你也需要做几件事:

1、是提出参数 C C C的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。

2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。

如何选择逻辑回归还是支持向量机模型

从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?

下面是一些普遍使用的准则:

n为特征数,m为训练样本数。

(1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机

(2)如果n较小,而且m大小中等,例如n在 1-1000 之间,而m在10-10000之间,使用高斯核函数的支持向量机

(3)如果n较小,而m较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机

值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值

今天的SVM包会工作得很好,但是它们仍然会有一些慢。当你有非常非常大的训练集,且用高斯核函数是在这种情况下,我经常会做的是尝试手动地创建,拥有更多的特征变量,然后用逻辑回归或者不带核函数的支持向量机

上一篇:令人头秃的支持向量机SVM(一)SVM分类


下一篇:支持向量机通俗导论(理解SVM的三层境界)