吴恩达机器学习课程笔记+代码实现(15)10.机器学习系统的设计(Machine Learning System Design)

本文探讨了机器学习系统设计的关键步骤,强调了误差分析的重要性。通过分析错误,可以决定如何优化算法,例如在垃圾邮件分类器中进行特征选择。此外,讨论了类偏斜问题和查准率、查全率之间的权衡,以及在大量数据下如何利用不同学习算法提升性能。误差分析和数据量是决定学习算法性能的关键因素。
摘要由CSDN通过智能技术生成

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


10.1 首先要做什么

       在设计复杂的机器学习系统时,将遇到的主要问题是什么?我们试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议。

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

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

       为了构建这个分类器算法,我们可以做很多事,例如:
       1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本

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

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

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

       在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比随着感觉走要更好。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试。

       接下来讲误差分析,我会告诉你怎样用一个更加系统性的方法,从一堆不同的方法中,选取合适的那一个。因此,你更有可能选择一个真正的好方法,能让你花上几天几周,甚至是几个月去进行深入的研究。

10.2 误差分析

       在本次课程中,我们将会讲到误差分析Error Analysis)的概念。这会帮助你更系统地做出决定。如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量;而是构建一个简单的算法,这样你可以很快地实现它

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

       1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

       2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

       3.进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势

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

       思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。

       例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从出现次数最多的情况开始着手优化。

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

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

       因此,当你在构造学习算法的时候,你总是会去尝试很多新的想法,实现出很多版本的学习算法,如果每一次你实践新想法的时候,你都要手动地检测这些例子,去看看是表现差还是表现好,那么这很难让你做出决定。到底是否使用词干提取,是否区分大小写。但是通过一个量化的数值评估,你可以看看这个数字,误差是变大还是变小了。你可以通过它更快地实践你的新想法,它基本上非常直观地告诉你:你的想法是提高了算法表现,还是让它变得更坏,这会大大提高你实践算法时的速度。所以我强烈推荐在交叉验证集上来实施误差分析,而不是在测试集上。

       总结一下,当你在研究一个新的机器学习问题时,我总是推荐你实现一个较为简单快速、即便不是那么完美的算法。当你有了初始的实现之后,它会变成一个非常有力的工具,来帮助你决定下一步的做法。因为我们可以先看看算法造成的错误,通过误差分析,来看看他犯了什么错,然后来决定优化的方式。另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么,误差分析可以帮助我们系统化地选择该做什么。

10.3 类偏斜的误差度量

       在前面提到了误差分析,以及设定误差度量值的重要性。即,设定某个实数来评估你的学习算法,并衡量它的表现,有了算法的评估和误差度量值。有一件重要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值