开发成功的机器学习应用程序需要一定的“民间技巧”

编译:刘嘉伟、王媛媛、沃克

机器学习算法被认为能够通过从数据中学习来找出如何执行重要任务。

这意味着数据量越大,这些算法可以解决的问题就越复杂。然而,开发成功的机器学习应用程序需要一定的“民间技巧”,而这在教科书或机器学习入门课程中是很难找到的。

Pedro Domingos 教授的一篇出色的研究论文汇集了机器学习研究人员和从业者的经验教训。

要避免的陷阱、要关注的重要问题以及一些常见问题的答案。准备好了解了吗?

1.学习=表示+评估+优化

您有一个应用程序,并且您认为机器学习可能是一个不错的选择。现在,在机器学习领域,每年都有海量的机器学习算法可供选择,数百种机器学习算法问世。应该使用哪一个?

在这个巨大的空间中不迷失的关键是要了解所有机器学习算法都由三个核心元素组成:

表示:输入数据,即要使用的特征,学习器和分类器必须用计算机可以理解的语言来表示。学习器可以学习的分类器集合称为学习器的假设空间。如果分类器不在假设空间中,它就无法学习。

澄清:分类器与学习器的含义是什么?假设您有训练数据,并使用您构建另一个程序(模型)的程序处理该数据,例如决策树。学习器是从输入数据构建决策树模型的程序,决策树模型是分类器(为输入数据的每个实例提供预测输出的东西)。

评估:需要评估函数来区分好分类和坏分类。算法内部使用的评估函数可能与我们希望分类器优化的外部评估指标不同(为了便于优化和后面讨论的问题)

优化:最后,我们需要一种在分类器中进行搜索的方法,以便我们可以选择最好的分类器。学习效率的关键是优化技术的选择。通常从使用现成的优化器开始。稍后,如果需要,您可以用自己的设计替换它们。

下表显示了这三个组件中的每一个的一些常见示例。

2.泛化很有用

机器学习的基本目标是在训练集中的示例之外进行泛化。因为,无论我们有多少数据,我们都不太可能在测试时再次看到这些确切的示例。在训练集上做得很好很容易。初学者最常见的错误是测试训练数据并获得成功的错误印象。如果选择的分类器随后在新数据上进行测试,它通常并不比随机猜测好。所以从一开始就设置一些数据,只用它来测试最终选择的分类器,然后在整个数据上学习最终的分类器。

当然子集和问题 近似算法,保留数据会减少可用于训练的样本数量。这可以通过交叉验证来缓解:比如说,将你的训练数据随机分成十个子集,在训练其余的子集时保留每个子集,在其未使用的示例上测试每个学习的分类器,并评估结果平均值以查看一个特定的参数设置工作。

3.数据不够

当以泛化为目标时,我们会遇到另一个主要后果:无论您拥有多少数据,仅靠数据是不够的。假设我们想学习超过一百万个示例的 100 个变量的布尔函数(0/1 分类)。这意味着 2^100-10^6 个例子,你不知道他们的班级。如果您手头没有更多信息,这怎么能比随机猜测更好?

好像我们被困住了。幸运的是,我们想要在现实世界中学习的属性并不是从所有数学上可能的函数集合中统一得出的!事实上,非常笼统的假设——比如具有相似类的相似示例——是机器学习如此成功的一个重要原因。

这意味着专业知识和对数据的理解对于做出正确的假设很重要。对学习知识的需求应该不足为奇。机器学习不是魔术,它不能从头开始创建。它所做的就是事半功倍。与所有工程一样,编程是一项繁重的工作:我们必须从头开始构建一切。学习更像是种地,让大自然完成大部分工作。农民将种子与养分结合起来种植农作物。学习者将知识与数据相结合以优化程序。

4.过拟合的多面性

过拟合问题是机器学习的问题。当你的学习器输出一个在训练数据上准确率 100% 但在测试数据上准确率只有 50% 的分类器时,当它实际上可以输出一个在这两个数据上准确率都为 75% 的分类器时,它就是过拟合。

机器学习领域的每个人都知道过拟合,但它有多种形式,而且不是很明显。理解过拟合的方法之一是将泛化误差分解为偏差和方差。

偏见是学习者不断学习相同错误的倾向。独立于真实信号,方差是学习随机事物的趋势。使用飞镖图比率可以更好地理解这一点,如下图所示:

例如,线性学习器具有高偏差,因为当两个类之间的分区不是显式超平面时,学习器无法正确区分关系。决策树没有这个问题,因为它们的学习方法很灵活。但另一方面,它们可能有很大的不同——在同一任务的不同训练数据集上学习的决策树通常非常不同,而实际上它们应该是相同的。

现在,如何处理过拟合?

这里可以使用交叉验证,例如通过使用它来选择要学习的决策树的最佳大小。但请注意这里还有一个问题:如果我们用它来选择太多参数,它会开始过度拟合,我们又回到了同一个陷阱。

除了交叉验证,还有很多方法可以处理过拟合。最流行的是在评估函数中添加正则化项。另一种选择是执行统计显着性检验,例如卡方,以分析增加更多复杂性是否对类分布有任何影响。这里重要的一点是没有特定的技术可以“解决”过拟合问题。例如,我们可以通过陷入欠拟合的相反错误(偏差)来避免过度拟合(方差)。同时避免两者需要学习一个完美的分类器,没有技术总是最好的(没有免费的午餐)。

5.更高维度的直觉失败

过拟合之后,机器学习最大的问题就是维度灾难。这个表达式意味着当输入是高维时,许多在低维上工作得很好的算法变得难以处理。

由于固定大小的训练集覆盖了输入空间的一小部分(可能的组合变得巨大),因此正确泛化的难度随着示例维数(即特征数量)的增长呈指数增长。但这就是为什么机器学习既必要又困难的原因。正如您在下图中看到的那样,即使我们从 1D 过渡到 3D,分辨示例之间的差异似乎也开始变得越来越困难——在高维度上,所有示例都开始相似。

这里的普遍问题是,我们对 3D 世界的直觉在高维度上失败了。比如高维橙的体积大部分是在外面,而不是在里面!

难以置信:如果恒定数量的示例均匀分布在一个高维超立方体中,并且如果我们通过将超球体内接在一个超立方体中来近似一个超球体,那么在高维中,几乎所有超立方体的体积都在球体之外的超立方体中. 这是个坏消息。因为在机器学习中,一种形状经常被另一种近似。

澄清说明:如果你对所有的“夸张”感到困惑,超立方体内部的超球体在 2D 和 3D 中看起来像这样:

因此,正如您现在可以理解的那样,构建 2 维或 3 维分类器很容易,但在高维中,很难理解发生了什么。这反过来又使设计好的分类器变得困难。事实上,我们经常陷入认为获取更多特征不会产生负面影响的陷阱,因为在最坏的情况下,它们不会提供有关该类的新信息。但事实上,维度的诅咒可能超过了它们的好处。

要点:下次您考虑添加更多功能时,请考虑尺寸过大时可能出现的潜在问题。

图片[1]-开发成功的机器学习应用程序需要一定的“民间技巧”-老王博客

6.特征工程是关键

归根结底子集和问题 近似算法,所有机器学习项目都有成功和失败。它们之间有什么区别?不难想到,最重要的因素是使用的特征。如果有很多独立的特征,并且每个特征都与类有很好的相关性,那么机器学习很容易。相反,如果类需要对特征进行复杂的处理才能使用,那么事情就变得困难了,这也称为特征工程——根据当前输入的特征创建新的特征。

通常原始数据格式基本上无法用于建模。但是您可以从中构建可用于学习的功能。事实上,这是机器学习项目中劳动强度最高的部分。但这也是最有趣的部分之一,直觉、创造力和“小技巧”与技术一样重要。

初学者通常会惊讶于机器学习项目的培训时间如此之少。但是,如果考虑到收集数据、整合数据、清洗数据和预处理数据的时间,以及特征选择中反复试验的次数,这个时间是相对合理的。

更重要的是,机器学习不是一个一次性的构建数据集和运行学习示例的过程,而是一个需要运行学习示例、分析结果、修改数据或学习示例,并重复上述过程的迭代过程。训练通常是最快的部分,但那是因为我们非常擅长!特征工程很难,因为它是一个专业领域,但学习者在很大程度上是通用的。当然,机器学习社区的梦想之一是提高特征工程的自动化程度。

7.丰富的数据胜过聪明的算法

假设你已经构建了最好的特征集,但是你得到的分类器仍然不够准确。你现在还能做什么?主流方法有两种:

设计更好的机器学习算法或收集更多数据(更多样本,可能更多原始特征)。机器学习研究人员会改进算法,但实际上,通往成功的最快途径往往是更多的数据。

根据经验,具有大量数据的愚蠢算法胜过具有中等数据量的聪明算法。

在计算机科学中,通常两个主要的资源限制是时间和内存。但是在机器学习中,还有第三个限制条件:训练数据。在这三个方面,今天的主要瓶颈是时间,因为有很多可用数据但没有足够的时间来处理它们,所以它处于闲置状态。这意味着在实践中,更简单的分类器会胜出,因为复杂的分类器需要很长时间才能学习。

使用更智能的算法并没有给出更好的结果,部分原因是他们全天都在做同样的事情,所有的学习示例基本上都是通过将相邻示例分组到同一个类中来完成的。关键区别在于“相邻”的定义。

当我们有非均匀分布的数据时,即使是复杂的学习示例也会产生非常不同的边界来分类结果,最终它们仍然会在重要区域(具有大量训练示例的区域)做出相同的预测,因此大多数文本样本也可能出现)。如下图所示,无论是花哨的曲线、直线还是逐步边界,我们都可以得到相同的预测:

通常,首先尝试最简单的学习器(例如,逻辑回归之前的朴素贝叶斯,SVM 之前的邻近算法)。复杂的学习器很有吸引力,但它们通常很难使用,因为它们需要更多的旋钮来控制以获得良好的结果,而且它们的内部更像是黑匣子。

8.组合多个模型而不是一个模型

在机器学习的早期阶段,尝试尝试多个学习器的各种变体并选择最好的一个。但研究人员发现,与其选择单一模型中最好的,不如将各种变形结合起来产生更好的结果,建模者只需一点点努力就可以实现显着的改进。构建这种模型融合现在很常见:

在最简单的 bagging 技术中,我们使用相同的算法,但在原始数据的不同子集上进行训练。最后,我们通过某种投票机制取平均值或将它们组合起来。

在 Boosting 算法中,学习者是按顺序一个一个地训练的。随后的每一个都将大部分注意力集中在先前错误预测的数据点上。我们训练直到我们对结果感到满意为止。

在堆叠算法中,不同独立分类器的输出成为新分类器的输入,给出最终预测。

在 Netflix 算法大赛中,来自世界各地的团队竞相打造最佳视频推荐系统。随着比赛的进行,发现将学习者与其他团队结合会产生最好的结果,并合并成越来越大的团队。冠军和亚军都是 100 多个学习者的堆叠合奏,两个合奏的组合进一步提高了结果。算法组合会更好!

9.理论保证与实际不同

机器学习论文充满了理论保证。我们应该如何处理这些保证?传统上,归纳法与演绎法形成对比:在演绎法中你可以保证结论是正确的,在归纳法中很难说。近几十年来的一个重要进展是认识到,如果我们愿意接受概率保证,我们就可以保证归纳结果的正确性。

例如,我们可以保证,在给定足够大的训练集的情况下,学习器很有可能会返回一个成功概括的假设,或者无法找到一个保持正确的假设。

另一个常见的理论保证是给定无限数据,保证学习器输出正确的分类器。在实践中,由于我们之前讨论过的偏差-方差权衡,如果在无限数据情况下学习器 A 优于学习器 B,那么在有限数据情况下 B 通常优于 A。

理论保证在机器学习中的主要作用不是作为实际决策的标准,而是作为理解算法设计的起点。

10.简单不代表准确

在机器学习中,奥卡姆剃刀一般认为是给定两个具有相同训练误差的分类器,两者中越简单的可能测试误差越低。

但事实并非如此,我们之前看到过一个反例:即使在训练误差达到零之后,通过添加分类器,boosted ensemble 的泛化误差也会继续提高。与直觉相反,模型的参数数量与过拟合之间没有必然的联系。也就是说,在机器学习中,仍然应该首选更简单的假设,因为简单本身就是一种优势,而不是因为它意味着准确性。

11.可表示不等于可学习

仅仅因为一个函数可以被表示并不意味着它可以被学习。例如,一个标准的决策树学习器不能学习比训练样例更多的叶子的树。

给定有限的数据、时间和内存,标准学习器只能学习所有可能函数的一小部分,而这些子集对于不同表示的学习器是不同的。所以这里的关键是值得对不同的学习者进行试验(并可能将它们结合起来)。

12.相关并不意味着因果

我们都听说过相关并不意味着因果关系,但仍然有一种倾向认为相关性意味着因果关系。

通常,学习预测模型的目标是将它们用作行动指南。如果我们发现用户经常在超市买啤酒的时候买尿布,也许把啤酒放在尿布区旁边会增加销量。但除非我们进行真正的实验,否则很难判断这是否属实。相关性标志着一种潜在的因果关系,我们可以将其用作进一步研究的方向,而不是我们的最终结论。

综上所述

与其他学科一样,机器学习有很多“民间智慧”,这些智慧难以获得,但对成功至关重要。感谢Domingos教授今天为我们传授了一些智慧。希望本指南对您有所帮助。可以在下方评论区留言,表达你的想法~

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论