吴恩达机器学习——机器学习系统的设计/ 支持向量机

机器学习系统的设计

引入

我们谈及在设计复杂的机器学习系统时,你将遇到的主要问题。我们会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议。这些东西是非常有用的,可能在构建大型的机器学习系统时,节省大量的时间。

本周以一个垃圾邮件分类器算法为例进行讨论。
为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量𝑦。我们可以选择一个由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为 1,不出现为 0),尺寸为 100×1。
为了构建这个分类器算法,我们可以做很多事,例如:

  1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本
  2. 基于邮件的路由信息开发一系列复杂的特征
  3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理
  4. 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法

在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比随着感觉走要更好。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经超越了很多人了。

误差分析

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

  1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
  2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
  3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势

以我们的垃圾邮件过滤器为例,误差分析要做的既是检验交叉验证集中我们的算法产生错误预测的所有邮件,看:是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从出现次数最多的情况开始着手优化。误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验证集的误差。

强烈推荐在交叉验证集上来实施误差分析,而不是在测试集上

不对称的分类(类偏斜)的误差度量

使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。

例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有 0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有 0.5%。然而我们通过训练而得到的神经网络算法却有 1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。
所以用到查准率(Precision)和 召回率(Recall)
在这里插入图片描述

我们将算法预测的结果分成四种情况:

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

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

召回率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其召回率是 0

查准率和召回率之间的权衡

怎样保证查准率和召回率的相对平衡?
假使,我们的算法输出的结果在 0-1 之间,我们使用阀值 0.5 来预测真和假在这里插入图片描述
如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。

如果我们希望提高召回率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。

我们可以将不同阀值情况下,查全率与召回率的关系绘制成图表,曲线的形状根据数据的不同而不同:
在这里插入图片描述
我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算 F1 值(F1 Score),其计算公式为:
在这里插入图片描述

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

机器学习的数据

取得成功的人不是拥有最好算法的人,而是拥有最多数据的人。
另一种考虑这个问题的角度是为了有一个高性能的学习算法,我们希望它不要有高的偏差和方差。因此偏差问题,我们将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。
如果你有大量的数据,而且你训练了一种带有很多参数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法

支持向量机

优化目标

一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support VectorMachine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式

假设函数形式,和右边的 S 型激励函数:
在这里插入图片描述
在svm中得到 cost1,cost0 函数,曲线及公式如图
在这里插入图片描述
目标函数乘上一个常量m,并不会改变取得最小值时的值,就是第一项和第二项我们依照惯例使用一个不同的参数称为C,同时改为优化目标,C× A + B就对应于将C设定为非常小的值,相应的将会给B比给A更大的权重就得到了在支持向量机中我们的整个优化目标函数
在这里插入图片描述

大边界的直观理解

在这里插入图片描述
黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为 大间距分类器

当C非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的最优解。就是y=1和y= 0两种情况的参数
在这里插入图片描述
如果我们找到了这样的参数,则我们的最小化问题便转变成
在这里插入图片描述
如果正则化参数C,设置的非常大,得到 粉线
如果你将 C 设置的不要太大,则你最终会得到这条黑线
在这里插入图片描述
回顾 𝐷 = 1/λ,因此

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

大边界分类 背后的数学 ( 选修)

p是v投影到向量u上的长度为这条红线的长度p,因此可以将u(T) v = p ⬝ ∥u∥,
在这里插入图片描述
当n=2时svm转化为 ∥θ∥的最小值,再将θx与uv类比
在这里插入图片描述
将θT⬝x=P⬝ ∥u∥代入,就变成
在这里插入图片描述
当边界是图1中绿线时,可以看到p(i)很小,而我们要满足上述 p ⬝ ∥θ∥>=1,<=-1,就要θ很大,这与svm目标求 ∥θ∥的最小值不符,svm会选择图2,p(i)很大,θ就可以很小,满足svm目标
在这里插入图片描述

核函数 1

在这里插入图片描述

为了获得上图所示的判定边界,我们的模型可能是在这里插入图片描述 ⋯的形式。
我们可以用一系列的新的特征 f 来替换模型中的每一项。例如令:在这里插入图片描述
给 定 一 个 训 练 实 例 x , 我 们 利 用 x 的 各 个 特 征 与 我 们 预 先 选 定 的 地 标 地 标
(landmarks) l(1) ,l (2) ,l(3) 的近似程度来选取新的特征f1 ,f2 f3,如图
在这里插入图片描述
核函数:
在这里插入图片描述

在这里插入图片描述
给定地标 l(i) 与不同的𝜎值:
在这里插入图片描述
图中水平面的坐标为 x 1 ,x2 而垂直坐标轴代表y。可以看出,只有当x与 l(1) 重合时y才具有最大值。随着x的改变f值改变的速率受到𝜎 2 的控制。
在这里插入图片描述

核函数2

如何选择地标?
我们通常是根据训练集的数量选择地标的数量(将训练集中的正样本选取为标记点),即如果训练集中有m个实例,则我们选取m个地标,并且令:l (1) = x (1) ,l (2) =x (2) ,…l (𝑛) = x (m) 。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,
f(i)写成向量形式:
在这里插入图片描述
给定X,计算新特征f
在这里插入图片描述

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

下面是支持向量机的两个参数C和𝜎的影响:
C = 1/λ
C 较大时,相当于λ 较小,可能会导致过拟合,高方差;
C 较小时,相当于λ 较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致高偏差, 低方差;
𝜎较小时,可能会导致低偏差 ,高方差

使用支持向量机

1 有许多好的软件库,我正好用得最多的两个是 liblinear 和 libsvm

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

3 一个实现函数的注意事项:如果有大小很不一样的特征向量,很重要的事就是在使用高斯函数之前将这些特征变量的大小按比例归一化

4尽管你不去写你自己的 SVM 的优化软件,但是你也需要做几件事:
(1)、是提出参数C的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。
(2)、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需
要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性
核的 SVM(支持向量机),这就意味这他使用了不带有核函数的 SVM(支持向量机)
在这里插入图片描述

5 逻辑回归模型,支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:

n为特征数,m为训练样本数。
(1)如果m较小,而n较大,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机
(2)如果m较大, 而n较小,例如n在 1-1000 之间,而m大于 50000,使用逻辑回归或不带核函数的支持向量机
(3)如果n较小,而且m大小中等,例如n在 1-1000 之间,而m在 10-10000 之间,使用高斯核函数的支持向量机。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值