机器学习笔记八之机器学习系统设计

本节目录:
1 如何选择并表达特征向量
2 误差分析
3 类偏斜的误差度量
4 查准率和查全率之间的权衡
5 机器学习的数据

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

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

在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比
随着感觉走要更好。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试
试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经
超越了很多人了。大部分人并不尝试着列出可能的方法,他们做的只是某天早上醒来,因为
某些原因有了一个突发奇想.
2 误差分析
误差分析帮助你更系统地做决定。如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法是构建一个简单的算法,这样你可以很快地实现它。这样即使运行效果不好,也要把他再运行一遍,最后通过交叉验证检验数据。做完这些工作,画出学习曲线,检验误差,找出算法的问题或是否有高偏差和高方差问题。
即:当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统
性的规律:什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新
的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。
构建一个学习算法的推荐方法为:
5. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算

6. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
7. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势。

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

思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。
例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从
出现次数最多的情况开始着手优化。
误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,
然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验
证集的误差。
因此,当你在构造学习算法的时候,你总是会去尝试很多新的想法,实现出很多版本的
学习算法,如果每一次你实践新想法的时候,你都要手动地检测这些例子,去看看是表现差
还是表现好,那么这很难让你做出决定。到底是否使用词干提取,是否区分大小写。但是通
过一个量化的数值评估,你可以看看这个数字,误差是变大还是变小了。你可以通过它更快
地实践你的新想法,它基本上非常直观地告诉你:你的想法是提高了算法表现,还是让它变
得更坏,这会大大提高你实践算法时的速度。所以我强烈推荐在交叉验证集上来实施误差分
析,而不是在测试集上。
3 类偏斜的误差度量
设定某个实数来评估你的学习算法,并衡量它的表现,有了算法的评估和误差度量值。有一件重
要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微
妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的
训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。
查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真
    则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿
    瘤的病人的百分比,越高越好。
    查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的
    病人的百分比,越高越好。
    在这里插入图片描述
    4.查准率和查全率之间的平衡

在很多应用中,我们希望能够保证查准率和召回率的相对平衡。
如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查
准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。这样做我们会减少错误预测病人为恶
性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。
如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地
检查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。
我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数
据的不同而不同:
在这里插入图片描述
一种选择这个阈值的方法 是计算F1值
在这里插入图片描述
我们选择使得 F1 值最高的阀值。
5 机器学习数据
得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来
获得一个具有良好性能的学习算法。而这种情况往往出现在这些条件对于你的问题都成立。
并且你能够得到大量数据的情况下。这可以是一个很好的方式来获得非常高性能的学习算
法。
改变了训练数据集的大小,并尝试将这些学习算法用于不同大小的训练数据集中,他们得到的结果
在这里插入图片描述
这些趋势非常明显,首先大部分算法,都具有相似的性能,其次,随着训练数据集的增
大,在横轴上代表以百万为单位的训练集大小,从 0.1 个百万到 1000 百万,也就是到了 10
亿规模的训练集的样本,这些算法的性能也都对应地增强了。
事实上,如果你选择任意一个算法,可能是选择了一个"劣等的"算法,如果你给这个劣
等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚
至会比"优等算法"更好。由于这项原始的研究非常具有影响力,因此已经有一系列许多不同
的研究显示了类似的结果。这些结果表明,许多不同的学习算法有时倾向于表现出非常相似
的表现,这还取决于一些细节,但是真正能提高性能的,是你能够给一个算法大量的训练数
据。
那么这种说法在什么时候是真,什么时候是假呢?因为如果我们有一个学习算法,并且
如果这种说法是真的,那么得到大量的数据通常是保证我们具有一个高性能算法的最佳方
式,而不是去争辩应该用什么样的算法。
假如有这样一些假设,在这些假设下有大量我们认为有用的训练集,我们假设在我们的
机器学习问题中,特征值𝑥包含了足够的信息,这些信息可以帮助我们用来准确地预测𝑦。
现在假设我们使用了非常非常大的训练集,在这种情况下,尽管我们希望有很多参数,
但是如果训练集比参数的数量还大,甚至是更多,那么这些算法就不太可能会过度拟合。也
就是说训练误差有希望接近测试误差。
另一种考虑这个问题的角度是为了有一个高性能的学习算法,我们希望它不要有高的
偏差和方差。
因此偏差问题,我们将通过确保有一个具有很多参数的学习算法来解决,以便我们能
够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。
在这里插入图片描述
我们在此没有方差问题,我们的算法将没有方差,并且通过将这两个值放在一起,我们
最终可以得到一个低误差和低方差的学习算法。这使得我们能够很好地测试数据集。从
根本上来说,这是一个关键的假设:特征值有足够的信息量,且我们有一类很好的函数,这
是为什么能保证低误差的关键所在。它有大量的训练数据集,这能保证得到更多的方差值,
因此这给我们提出了一些可能的条件,如果你有大量的数据,而且你训练了一种带有很多参
数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法。
我觉得关键的测试:首先,一个人类专家看到了特征值 𝑥,能很有信心的预测出𝑦值吗?
因为这可以证明 𝑦 可以根据特征值𝑥被准确地预测出来。其次,我们实际上能得到一组庞大
的训练集,并且在这个训练集中训练一个有很多参数的学习算法吗?如果你不能做到这两
者,那么更多时候,你会得到一个性能很好的学习算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值