机器学习笔记 Week6 机器学习系统设计

学习笔记(Machine Learning) Week6

全部笔记PDF版:http://vdisk.weibo.com/s/J4rRX/1373287206

Week6 由两部分内容构成:

  1. 机器学习应用建议
  2. 机器学习系统设计

2机器学习系统设计

2.1首先要做什么

本周以一个垃圾邮件分类器算法为例进行讨论。

为了解决这样一个问题,我们首先要做的决定是如何选择并表达特征向量x。我们可以选择一个由100个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为1,不出现为0),尺寸为100×1。

为了构建这个分类器算法,我们可以做很多事,例如:

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

在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择比随着感觉走要更好。

2.2误差分析(Error Analysis)

误差分析可以帮助我们系统化地选择该做什么。

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

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

以我们的垃圾邮件过滤器为例,误差分析要做的既是检验交叉验证集中我们的算法产生错误预测的所有邮件,看:

  • 是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。
  • 思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从出现次数最多的情况开始着手优化。

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

在我们的垃圾邮件分类器例子中,对于“我们是否应该将discount/discounts/discounted/discounting处理成同一个词?”如果这样做可以改善我们算法,我们会采用一些截词软件。误差分析不能帮助我们做出这类判断,我们只能尝试采用和不采用截词软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。

2.3类偏斜的误差度量(Error Metrics for 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。

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

继续沿用刚才预测肿瘤性质的例子。假使,我们的算法输出的结果在0-1之间,我们使用阀值0.5来预测真和假。

如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用比0.5更大的阀值,如0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。

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

我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:

QQ截图20130701134721

我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算F1(F1 Score),其计算公式为:

QQ截图20130701135110

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

2.5机器学习的数据

Bank和Brill的尝试通过机器学习算法来区分常见的易混淆的单词,他们尝试了许多种不同的算法,并发现,数据量非常大时,这些不同类型的算法效果都很好。我们下面希望探讨,什么时候我们会希望获得更多数据,而非修改算法。

QQ截图20130701135538

通常情况下,首先思考这样一个问题,“在这些特征面前,一个真人专家是否能有信心地预测结果?”如果回答是肯定的,我们需要再思考我们的模型是怎样的。如果算法是高偏差的,且代价函数很小,那么增加训练集的数据量不太可能导致过拟合,可使得交叉验证误差和训练误差之间差距更小。这种情况下,考虑获得更多数据。

也可以这样来认识,我们希望我们的算法低偏倚,低偏差,我们通过选择更多的特征来降低偏倚,再通过增加数据量来降低偏差。

课程地址:https://class.coursera.org/ml-003/class/index

 

One thought on “机器学习笔记 Week6 机器学习系统设计

  1. Pingback: 机器学习笔记 Week6 机器学习应用建议 - Ryan's Cabinet of Curiosities

Leave a Reply

Your email address will not be published. Required fields are marked *