吴恩达机器学习笔记---机器学习系统的设计

前言

1.类偏斜的误差度量(Error Metrics for Skewed Classes)
2.查准率和查全率之间的权衡(Trading off Precision and Recall)

机器学习系统的设计(Machine Learning System Design)

(一)首先要做什么(Prioritizing What to Work on)

  我们将开始学习在设计机器学习系统的时候可能遇到的问题以及相应的建议,我们以一个垃圾邮件分类器作为例子展开。假设我要设计一个能够区分垃圾邮件的系统,我们已经有一些加标签的训练集,包括标注的垃圾邮件表示为 y = 1 y=1 y=1和非垃圾邮件表示为 y = 0 y=0 y=0。 我们如何用监督学习的方法来构造一个分类器区分垃圾邮件和非垃圾邮件呢?首先,我们得有特征向量 x x x,怎么构造特征向量呢?我们可以通过浏览上千封邮件,找出一些可以有效区分垃圾邮件的单词,例如buy,discount,watch等等,也找出一些不像垃圾邮件的单词,例如now还有人名等等,在此基础上,我们用这样一个几百个单词组成的向量和我们已有的邮件内容进行比对,出现该单词的地方置1,没有则置0,最后针对每一封邮件我们都会得到与之对应的一个只包含0和1的向量。例如:
在这里插入图片描述
  当我们用我们构造好的特征和标签来实现垃圾邮件分类器的时候,结果可能并不理想,为了使分类结果更准确,我们可以做以下事情,至于选用哪一个最合适,需要运用误差分析来判断。

  • 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本

  • 基于邮件的路由信息开发一系列复杂的特征

  • 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理

  • 为探测刻意的拼写错误(把watch 写成w4tch)开发复杂的算法

(二)误差分析(Error Analysis)

  当我们在构造一个学习系统时,最有效的方法就是以尽可能快的速度构建一个简单的算法,不要求这个算法有多好的准确率,甚至它就是一个没有用的系统。我们的目的就是能够很快的运行,在交叉验证集上运行得到我们想要的学习曲线,通过学习曲线找出我的算法是否存在高偏差或者高方差或者其他的一些问题,分析之后我们再判断是否要添加更复杂的特征变量,或者收集更多的数据,这和我们之前在讲高方差和高偏差问题的时候是一致的,也就是可以总结如下:

  • 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
  • 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

  除此之外,误差分析也是一种很好的方法。误差分析我理解的就是分析误差从何而来,着重解决大误差。例如,在我们构建垃圾邮件分类器的时候,如果1000封邮件有100封被分类错了,其中一大部分分类错的是钓鱼邮件,那我们要做的应该是应该花更多的时间来研究这种类型的邮件,然后看一看是否能通过构造更好的特征变量来正确区分这种类型的邮件;除此之外,我们要做的是看一看哪些特征变量可能会帮助算法正确地分类邮件。假设能帮助我们提高邮件分类表现的方法是检查有意的拼写错误以及垃圾邮件特有的标点符号方式,比如很多感叹号,那我们就手动浏览分类错误的邮件,观察是否存在以上问题,如果在交叉验证中得到的结果说明有意地拼写错误出现频率较高,那么就说明这是一个很强的特征,我们应该花费时间去构造基于有意地拼写错误的更加复杂的特征变量。
  另外补充一下,最好的评估机器算法优劣的方法是通过数值的方式,就是通过一个量化的数值评估让我们更加直观的观察我们算法的优劣,比如一开始有5%的分错率,后来优化到了3%的分错率,从某种程度上看,我们的算法改进了,但是对于一些特殊的情况,这样的判断方式并不准确,我们要运用其他一些数值定义方法来评估我们的算法,这就是查准率和查全率。

(三)类偏斜的误差度量(Error Metrics for Skewed Classes)

  为了衡量一个算法的优劣,我们采用数值的方式设定误差度量值。例如,在预测是否患有癌症的例子中,我们用 y = 1 y=1 y=1表示患有癌症,用 y = 0 y=0 y=0表示没有癌症,如果我们预测的准确率是99%,看起来是很不错的,只有1%的误差。但是患癌症的人是极少一部分的,如果原本只有0.5%的人患有癌症,我们直接令所有的预测的 y = 0 y=0 y=0,那么得到的准确率是99.5%,比我们算法预测的还要高,这就不合理了。对于这类正样本和负样本比例差距悬殊的情况期末称之为类偏斜,对于这类数据,我们该用查准率和查全率来衡量。
  首先我们有以下几个数据:

预测值
PositiveNegative
实际值PositiveTrue PositiveFalse Negative
NegativeFalse PositiveTrueNegative

  四种关系如下:

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

  根据这几个数据,我们可以得到查准率和查全率的公式:

  • 查准率=TP/(TP+FP)。例,在所有我们预测有癌症的病人中,实际上有癌症的病人的百分比,越高越好。侧重于准确率,数值越高预测越准确。
  • 查全率=TP/(TP+FN)。例,在所有实际上癌症的病人中,成功预测有癌症的病人的百分比,越高越好。侧重于全面,尽量将可疑样本都包含在内,数值越高包含的可疑样本月多。

  在之前那个令所有的 y = 0 y=0 y=0的例子中,查全率为0,说明效果不好。

(四)查准率和查全率之间的权衡(Trading off Precision and Recall)

  我们已经知道了查全率和查准率的含义,一个侧重“全”,一个侧重“准”,那么怎么根据我们的需要调整它们之间的关系呢?在逻辑回归中,我们根据输出的结果判断其属于哪一类,以0.5为阈值,大于等于0.5的归入 y = 1 y=1 y=1中,小于0.5的归入 y = 0 y=0 y=0中。现在有两种情况:
  一,由于患癌症的人占极少数,一旦通知患者他可能患有癌症对患者来说是及其不幸的,所以我们尽量希望只有当患者极有可能患有癌症的时候才告知他结果。为了实现这一目的,我们可以调高阈值,比如将0.5调至0.7或者0.9。这时候,我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况,也就是说查准率会升高,查全率会下降
  二,我们不想放过任何一个可疑病例,对于可能患有癌症的患者就进行检查,避免患有癌症却没有得到及时治疗的问题,尽可能地让所有有可能的病人都得到进一步地检查、诊断。这时候,我们可以通过降低阈值实现,比如将阈值降至0.3,这时我们会减少遗漏肿瘤为恶性的情况,同时会增加错误预测病人为恶性肿瘤的情况。也就是说查全率会升高,查准率会下降
  最后,如果我们已知一个算法的查全率和查准率,我们如何衡量它优劣呢?如下图:
在这里插入图片描述
  最简单的我们想到用二者的平均值来表示,但如果我们全部预测 y = 1 y=1 y=1,那么查全率为1,差准率接近0,平均一下0.5左右,很明显是不合理的。在众多的定义方法中,我们选择这样一种,简称F1值:
                 F 1 S c o r e = 2 P R P + R {{F}_{1}}Score=2\frac{PR}{P+R} F1Score=2P+RPR
  当查全率和查准率都为1时,F1值为1,;当查全率或者查准率有一个为0时,结果为0,所以该式很好的平衡了二者的关系。

(五)机器学习的数据(Data for Machine Learning)

  我们以前说过收集大量的数据有时并不能够很好的提高算法的准确率,但有些情况下大量的数据可以极大地提高算法的性能,即使该算法十分的“劣等”。那是在什么情况下大数据有用呢?就是在有大量参数,也就是特征的时候。我们可以从两个方面来理解:
  一,当我的参数足够多的时候,训练集上的拟合结果一定是低偏差的,放到测试集上,由于我使用了大量的数据,数据是不太可能出现过拟合,也就是高方差的,所以测试集上的误差也不会很大,也就是说训练集和测试集上的误差都不大,这是满足我们要求的;
  二,假设我就是想要一个高性能的算法,希望有低偏差和低方差,大量的参数对应于低偏差,大量的数据对应于低方差,这样就很好的实现了。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值