机器学习(十六) - Machine Learning System Design

Building a Spam Classifier

Prioritizing What to Work On

假设我们现在有一个任务,是建立一个垃圾邮件分类器。首先我们想到可以通过邮件里的内容来进行分类,比如人工选出100个词,作为100个特征 x j x_j xj,如果该词存在于邮件当中就将该词对应的 x j x_j xj置为1,否则为0。当我们建立好训练集,就可以开始对模型进行训练,训练完成之后就可以开始分类了。
这里写图片描述
实际中,人工选择特征是不太准确的,一般我们选取训练集中出现频率最高的 n n n个词(10000~50000),这样更具有实际意义。
当我们建立好模型,也训练好了。接下来我们的任务就是如何提高我们分类器的准确率了。对于垃圾邮件分类器来说,我们有三个方向的选择:

  1. 收集大量的数据
  2. 选择、运用复杂的特征(如利用email的header数据)
  3. 编写精细复杂的算法去处理我们的输入(如识别垃圾邮件中的故意的错误单词拼写)
    如果不进行任何分析,很难说我们需要从哪方面入手对我们的模型进行优化。
Error Analysis

由于机器学习算法有很多优化方向,而且实际中任何优化方向都会花费我们很多的时间。凭直觉选择或者随意选择都是不合理的,于是我们需要对我们的算法模型进行error analysis。
接下来为Andrew Ng教授给出的推荐步骤:

  1. 首先给出一个可以很快编写和运行的简单算法和模型,然后进行训练,最后用验证集进行测试。(不要一开始就去追求复杂的算法,不要想着一开始就能取得一个理想的test error,而浪费更多的时间)
  2. 画出学习曲线,决定模型是需要使用更多的数据,还是需要更多的特征等
  3. 误差分析:除了使用学习曲线,还有一种非常有效的方法叫作误差分析。人工地检查在验证集中被我们的算法错误分类的数据,从这些分离出的数据集中我们探究是否存在某种趋势或某种特征导致分类失误,例子如下。
    这里写图片描述
    通过上图,我们发现有一半的错误分类邮件都是关于盗取密码的,这关于盗取密码的53封错误分类邮件中,又有32封邮件有着胡乱使用标点符号的特征。那么我们就可以有针对性的对这类邮件进行处理并添加标点符号这一特征。

当我们完成了改进,很重要的一点,我们需要一个单一的数值结果来表征我们的error,否则我们很难去描述我们的模型算法的效果。通过这个单一数值,我们就能知道,当我们使用了新的特征,新的数据处理算法,模型是否变好了。
这里写图片描述

Handling Skewed Data

Error Metrics for Skewed Classes

刚刚我们提到单一数值的误差度量是很重要的,我们需要通过这个数值来评判我们模型的好坏和泛化能力。对于分类问题,如果我们一般采用classification accuracy(classification error),即正确分类的样本数除以总样本数。但是这样的误差度量对于带有skewed class(倾斜类)的样本来说不是很准确。所谓skewed class就是样本中,一类样本特别少,另一类样本特别多的情况。下图为例:
这里写图片描述
如上图,如果我们的模型在test set上的error仅有1%,乍看之下,我们的模型挺棒的,但是如果我们的样本中仅有0.5%的病人有癌症,那么对于这个test set我不需要任何复杂的算法,我只需要全部预测为没有癌症,error只有0.5%比之前的1%还要低,那么显然这样的误差度量是不合适的。下面我们将要介绍另外两种评价度量Precision/Recall(准确度/召回率)。
这里写图片描述
首先需要说明的是, y = 1 y=1 y=1代表我们想要探查样本中少的那一方(比如对于是否有癌症,有癌症表示为 y = 1 y=1 y=1)。

  • Precision
    对于所有我们判定 y = 1 y=1 y=1的类,实际上有多少比例是真正的 y = 1 y=1 y=1
  • Recall
    对于所有的真正 y = 1 y=1 y=1的类,实际上我们判定了多少比例的 y = 1 y=1 y=1

对于刚刚的情况(只有0.5%的人患有癌症,如果我们全部判定没有癌症),accuracy为99.5%,recall为0,那么显然这个算法就有问题,不能使用。

Trading Off Precision and Recall

有了Precision和Recall,我们就能解决带有skewed class的样本问题。在实际问题中,很多时候我们需要对Precision和Recall进行一定的权衡。我们依然以判定是否病人有癌症为例。
我们知道运用逻辑回归,一般我们将阈值设置为0.5,即当 h θ ( x ) ≥ 0.5 h_\theta(x) \ge 0.5 hθ(x)0.5预测 y = 1 y=1 y=1 h θ ( x ) &lt; 0.5 h_\theta(x) &lt; 0.5 hθ(x)<0.5预测 y = 0 y=0 y=0。但其实我们可以调整阈值来达到不同的效果:
1. 阈值高
我们希望我们判断的准确度高,即要么我们不下判断,一旦下了判断 y = 1 y=1 y=1,那么这个样本实际上就属于 y = 1 y=1 y=1(即判断一个病人有癌症,那么他就有癌症),但是这种情况容易漏掉很多 y = 1 y=1 y=1的样本(即他有癌症,但是我们判定他没有癌症),召回率低。
2. 阈值低
我们希望我们需要判断出样本中所有的 y = 1 y=1 y=1,即宁可错判,也不要放过一个(为了避免错将有癌症的人判定为没有癌症,耽误他们的治疗)。这样做的话,召回率就高,当然准确率就会比较低了。
这里写图片描述

那么接下来的问题是如何判定这个算法和模型的好坏呢,如果是只有单一数值度量,那么当然我们就可以直接运用这个度量来进行评判。但是对于带有skewed class的样本有了两个测量值(准确度和召回率),就需要把它们结合起来转化为一个数值度量,因此我们引入 F 1  Score F_1 \ \text{Score} F1 Score
这里写图片描述
不必纠结于 F 1  Score F_1 \ \text{Score} F1 Score 的实际意义,实际上它不具备什么实际意义,只是很好的把准确度和召回率结合了起来。那么实际运用当中,我们要如何设置我们的阈值呢,等价于模型选择时对次方的设置,以及正则系数的选择,我们需要设置一系列的阈值,然后通过验证集来找到一个对于这个任务的最佳的阈值。

Using Large Data Sets

对于机器学习任务来说,很多时候不是谁的算法好谁就能取得很高的accuracy,而是取决于谁的训练数据大,如果训练数据大小差上好几个量级,再好的算法也是无济于事的。
这里写图片描述

但是我们前面也经常提到过,并不是所有的情况下,只要增大数据集就有效,这与上面的说法并不矛盾,因为训练集大正确率就高是有前提条件的。就是我们选取的feature带有足够的信息以至于能够很好的预测 y y y 。那么怎么判断我们选取的特征带有足够的信息呢,我们只需要知道在人类相应领域的专家能否通过这些特征很好的预测出 y y y 就行了,如果可以说明这些特征足够了,如果不行,说明这些特征不够或者特征选取有误。因为一味增加数据集对欠拟合的模型是没有帮助的。
这里写图片描述
最后下面这张图就是讲述了大数据集能够取得很好的error的道理。
这里写图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
吴恩达的机器学习系统设计选择题主要包含以下几个方面: 1. 训练集和开发/测试集:选择合适的训练集和开发/测试集对于构建有效的机器学习系统非常重要。我们需要确保训练集和开发/测试集能够代表真实的数据分布,并且在划分数据集时要考虑到数据的随机性和一致性。 2. 性能指标选择:根据具体的问题和需求,选择合适的性能指标来评估机器学习系统的表现。如分类问题可以选择准确率、精确率、召回率等指标,回归问题可以选择均方误差或相关系数等指标。 3. 偏差和方差的平衡:在机器学习系统中,我们通常会面临偏差和方差之间的权衡。通过增加模型的复杂度可以降低偏差,但容易引起方差过高;通过减小模型的复杂度可以减小方差,但容易导致偏差过高。需要根据具体情况选择适当的模型复杂度。 4. 错误分析:在构建机器学习系统时,我们需要进行错误分析来深入了解模型在不同数据集上的表现。通过错误分析,我们可以找出模型存在的问题,并采取相应的措施进行修正和优化。 5. 学习曲线:学习曲线可以帮助我们了解模型的训练过程。通过绘制训练集和开发/测试集的误差随着训练集大小变化的曲线,我们可以判断模型是否出现高偏差或高方差的情况,从而决定是否需要增加更多的训练数据或者调整模型复杂度。 吴恩达强调了以上几个方面的重要性,并提供了相应的选择题帮助我们更好地设计和调整机器学习系统,以获得更好的性能和效果。这些选择题的回答需要结合具体问题和数据情况进行分析和判断,从而做出最合理的决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值