当前位置: 首页 > 科技观察

关于机器学习实战,教科书上学不到的那12条“民间智慧”_0

时间:2023-03-21 19:51:23 科技观察

大数据文摘来源:towardsml编译:刘家伟、王媛媛、沃克执行重要任务。这意味着数据量越大,这些算法可以解决的问题就越复杂。然而,开发成功的机器学习应用程序需要一定的“民间技能”,这在教科书或机器学习入门课程中是很难找到的。PedroDomingos教授撰写的一篇出色的研究论文,汇集了机器学习研究人员和从业者的经验教训。https://homes.cs.washington.edu/~pedrod/要避免的陷阱、要关注的重要问题以及一些常见问题的答案。准备好一探究竟了吗?1.学习=表示+评估+优化你有一个应用程序,你认为机器学习可能是一个很好的选择。现在,在机器学习领域,每年都有大量的机器学习算法可供选择,数百种机器学习算法问世。你应该使用哪一个?在这个广阔的空间中不迷路的关键是要了解所有机器学习算法都由三个核心元素组成:表示:输入数据,即要使用的特征,学习者和分类器必须具有可理解的语言表示。学习器可以学习的分类器集合称为学习器的假设空间。如果分类器不在假设空间中,它就无法学习。澄清说明:分类器与学习器是什么意思?假设您有训练数据并使用您构建另一个程序(模型)的程序处理该数据,例如决策树。学习器是根据输入数据构建决策树模型的程序,而决策树模型是分类器(为每个输入数据实例提供预测输出的东西)。评估:需要一个评估函数来区分好分类和坏分类。算法内部使用的评价函数可能与我们希望分类器优化的外部评价指标不同(为了便于优化,和后面讨论的问题有关)优化:***,我们需要一种在分类器中搜索的方式,这样我们就可以选择最好的分类器。学习者效率的关键是优化技术的选择。通常从使用现成的优化器开始。如果需要,您以后可以用自己的设计替换它们。下表显示了这三个组件中每个组件的一些常见示例。2.泛化有用机器学习的基本目标是泛化超出训练集中的例子。因为,无论我们有多少数据,我们在测试时都不太可能再次看到这些确切的例子。在训练集上取得好成绩很容易。初学者最常犯的错误是测试训练数据并获得成功的错觉。如果选择的分类器随后在新数据上进行测试,它通常不会比随机猜测好多少。所以,从一开始就设置一些数据,只用它来测试最终选择的分类器,然后在整个数据上学习最终的分类器。当然,保留数据会减少可用于训练的样本数量。这可以通过交叉验证来缓解:比如,将您的训练数据随机分成十个子集,在训练其余子集时保留每个子集,在未使用的示例上测试每个学习的分类器,并评估结果平均值以查看特定参数设置的好坏作品。3.光有数据是不够的当泛化是目标时,我们会遇到另一个主要后果:光有数据是不够的,不管你有多少数据。假设我们想要在100万个示例中学习100个变量的布尔函数(0/1分类)。这意味着2^100-10^6个示例,您不知道其类别。这比手头没有更多信息的随机猜测有什么好处?好像我们被困住了。幸运的是,我们想要在现实世界中学习的特征并不是从所有数学上可能的函数集中统一抽取的!事实上,非常普遍的假设——就像相似的例子和相似的类别一样——是机器学习如此成功的一个重要原因。这意味着专业知识和对数据的理解对于做出正确的假设很重要。对学习知识的需求不足为奇。机器学习并不神奇,它不能从无到有。它的作用是事半功倍。与所有工程一样,编程需要大量工作:我们必须从头开始构建所有内容。学习更像是耕种,让大自然做大部分工作。农民将种子与养分结合起来种植庄稼。学习者将知识与数据相结合以优化程序。4.过度拟合的多面性过度拟合问题是一个机器学习问题。当你的学习器输出一个在训练数据上准确率为100%但在测试数据上准确率为50%的分类器时,它实际上可以输出一个在两者上都准确率为75%的分类器,它已经被拟合了。机器学习中的每个人都知道过度拟合,但它有多种形式,并不是很明显。理解过度拟合的一种方法是将泛化误差分解为偏差和方差。偏见是学习者不断学习相同错误的倾向。独立于真实信号,方差是学习随机事物的倾向。这可以用飞镖图更好地理解,如下所示:例如,线性学习器具有高偏差,因为当两个类之间的划分不是明确的超平面时,学习器无法正确区分关系。决策树不存在这个问题,因为它们的学习方式是灵活的。但另一方面,它们可能存在很大差异——针对同一任务在不同训练数据集上学习的决策树通常非常不同,而实际上它们应该是相同的。现在,你如何处理过度拟合?您可以在此处使用交叉验证,例如通过使用它来选择要学习的决策树的最佳大小。但是请注意,这里还有另一个问题:如果我们用它来选择太多参数,它就会开始过度拟合,我们又回到了同样的陷阱。除了交叉验证之外,还有很多方法可以解决过拟合问题。最好的办法是在评估函数中添加一个正则化项。另一种选择是执行卡方等统计显着性检验,以分析增加更多复杂性是否对类分布有任何影响。这里很重要的一点是,没有特定的技术可以“解决”过度拟合问题。例如,我们可以通过陷入欠拟合(偏差)的相反错误来避免过拟合(方差)。同时避免两者需要学习最优分类器,没有一种技术永远是最优的(天下没有免费的午餐)。5.Intuitionfailureinhighdimensions过拟合之后,机器学习最大的问题就是维数灾难。这个表达式意味着许多在低维下工作良好的算法在输入是高维时变得难以处理。由于固定大小的训练集只覆盖输入空间的一小部分(并且可能的组合变得巨大),因此随着示例维数(即特征数量)的增长,正确泛化的难度呈指数级增长。但这就是为什么机器学习既必要又困难的原因。正如您在下图中看到的,即使我们从1D移动到3D,区分不同示例的工作似乎也开始变得越来越难-在高维度中,所有示例开始看起来相似。这里的普遍问题是,我们对三维世界的直觉在高维度上让我们失望了。比如高维橙的大部分体积都在外面,而不是里面!难以置信:如果在一个高维超立方体中均匀分布恒定数量的样本,如果我们通过将超立方体内接在超立方体A球体中来近似超立方体,并且在高维中,超立方体的几乎所有体积都在超球体之外。这是个坏消息。因为在机器学习中,一种形状通常会被另一种形状逼近。澄清说明:如果你对所有的“夸张”感到困惑,超立方体内部的超球体在2D和3D中看起来像这样:所以,你现在可以理解构建2D或3D分类器很容易,但在高维中,很难理解发生了什么。反过来,这使得设计好的分类器变得困难。事实上,我们经常陷入认为获取更多特征没有负面影响的陷阱,因为在最坏的情况下,它们不会提供关于该类的新信息。但事实上,尺寸的诅咒可能超过它们的好处。要点:下次您考虑添加更多功能时,请考虑当您的维度变得太大时可能出现的潜在问题。6.特征工程是关键归根结底,所有机器学习项目都有成功和失败。它们之间有区别吗?不难想到,最重要的因素是所使用的特性。如果有许多独立的特征并且每个特征与类相关性很好,那么机器学习就很容易。相反,如果类需要对特征进行复杂的处理才能使用,那么事情就变得更加困难,这就是特征工程——根据当前输入的特征创建新的特征。通常原始数据格式基本无法用于建模。但是您可以从中构建可用于学习的功能。事实上,这是机器学习项目中最耗能的部分。但这也是最有趣的部分之一,直觉、创造力和“技巧”与技术一样重要。初学者常常惊讶于在机器学习项目中花在培训上的时间如此之少。但是,如果考虑到收集数据、整合数据、清理数据和预处理数据的时间,以及特征选择的试错次数,这个时间是相对合理的。更重要的是,机器学习不是构建数据集和运行学习样本的一次性过程,而是需要运行学习样本、分析结果、修改数据或学习样本,并重复上述过程的迭代过程。培训往往是最快的部分,但那是因为我们非常擅长!特征工程很难,因为它是一个专门领域,但学习者在很大程度上是通用的。当然,机器学习社区的梦想之一就是增加特征工程的自动化程度。7.丰富的数据胜过智能算法假设你已经构建了一组很好的特征,但是你得到的分类器仍然不够准确。你现在还能做什么?有两种主流方法:设计更好的机器学习算法或收集更多数据(更多样本,可能还有更多原始特征)。机器学习研究人员改进算法,但在现实中,最快的成功途径往往是更多的数据。根据经验,具有大量数据的愚蠢算法优于具有适度数据量的聪明算法。在计算机科学中,通常,两个主要的资源限制是时间和内存。但在机器学习中,还有第三个约束:训练数据。在这三者中,今天的主要瓶颈是时间,因为有大量可用数据,但没有足够的时间来处理它,所以数据处于闲置状态。这意味着在实践中,更简单的分类器胜出,因为复杂的分类器需要很长时间才能学习。使用更智能的算法并不能给出更好的结果,部分原因是它们全天都在做同样的事情,将所有学习到的示例分组基本上是通过将相邻示例分组到同一个类中来工作来完成的。关键区别在于“相邻”的定义。当我们的数据分布不均匀时,即使是复杂的学习示例也会产生非常不同的边界来对结果进行分类,最终它们仍然在重要区域(具有大量训练示例的区域,因此大多数文本样本也可能出现)。如下图所示,无论是花式曲线、直线还是逐步边界,我们都会得到相同的预测:通常,首先尝试最简单的学习器(例如,逻辑回归之前的朴素贝叶斯,SVM邻近算法之前的SVM)。复杂的学习器很吸引人,但它们往往很难使用,因为它们需要更多的旋钮来控制才能获得好的结果,而且它们更像是内部的黑盒子。8.组合多个模型而不是一个模型在机器学习的早期阶段,尝试使用多个学习器的各种变体并选择最有效的一个。但研究人员发现,与其从中选择最好的单一模型,不如将各种变形结合起来得到更好的结果,而且建模者只需付出一点点努力就可以获得显着的改进。现在构建这种模型集成非常普遍:在称为装袋算法的最简单技术中,我们使用相同的算法,但在原始数据的不同子集上对其进行训练。***,我们取平均值或通过某种投票机制将它们合并。在Boosting算法中,学习器是按顺序一个接一个地训练的。随后的每一个都将大部分注意力集中在前一个预测错误的数据点上。我们会继续训练,直到我们对结果满意为止。在Stacking算法中,不同独立分类器的输出成为新分类器的输入,给出最终预测。在Netflix算法竞赛中,来自世界各地的团队竞相构建最佳视频推荐系统。随着游戏的进行,人们发现将学习者与其他团队结合起来会带来最好的结果,并且会组合成越来越大的团队。冠军和亚军都是100多个学习者的堆叠集成,两个集成的结合进一步提高了结果。算法组合会更好!9.理论保证和实用的机器学习论文是有区别的,满是理论保证。我们应该如何处理这些保证?归纳法传统上与演绎法形成对比:你可以保证结论是正确的,但在归纳法中很难说。过去几十年的一个重要进步是认识到,如果我们愿意接受概率保证,就可以保证归纳结果的正确性。例如,我们可以保证,在给定足够大的训练集的情况下,学习器很有可能返回一个成功泛化的假设,或者无法找到一个保持正确的假设。另一个常见的理论保证是给定无限数据,保证学习器输出正确的分类器。在实践中,如果学习器A在无限数据下优于学习器B,则由于我们之前讨论的偏差方差折衷,B通常会在有限数据下优于A。理论保证在机器学习中的首要作用不是作为实际决策的标准,而是作为理解算法设计的起点。10.简单并不意味着准确在机器学习中,奥卡姆剃刀通常被认为是给定两个具有相同训练误差的分类器,两者中较简单的可能具有较低的测试误差。但事实并非如此,我们之前看到过一个反例:boostedensemble的泛化误差在训练误差为零后,通过添加分类器继续提高。与直觉相反,模型的参数数量与过度拟合之间没有必然联系。也就是说,在机器学习中,更简单的假设仍然是最好的,因为简单本身就是一种优势,而不是因为它意味着准确性。11.可表示不等于可学习仅仅因为一个函数可以被表示并不意味着它可以被学习。例如,标准决策树学习器无法学习叶子多于训练示例的树。给定有限的数据、时间和记忆,标准学习器只能学习所有可能函数的一小部分,并且这些子集对于不同表示的学习器是不同的。所以这里的关键是尝试不同的学习器(并可能将它们结合起来)是值得的。12.相关并不意味着因果我们都听说过相关并不意味着因果关系,但仍然普遍认为相关意味着因果关系。通常,学习预测模型的目标是将它们用作行动指南。如果我们发现用户在超市购买啤酒时更频繁地购买尿布,那么也许将啤酒放在尿布区旁边会增加销量。但除非我们进行真正的实验,否则很难判断这是不是真的。相关性标志着潜在的因果关系,我们可以将其作为进一步研究的方向,而不是我们的最终结论。结论与任何其他学科一样,机器学习有很多“民间智慧”,很难获得但对成功至关重要。感谢多明戈斯教授今天给我们传授了一些智慧。希望本指南对您有所帮助。可以在下方评论区留言说出你的想法~相关报道:https://towardsml.com/2019/04/09/12-key-lessons-from-ml-researchers-and-practitioners/【本文章为栏目组织大数据文摘微信公众号《大数据文摘(id:BigDataDigest)》的原创文章】点此查看该作者更多好文