华盛顿大学 Pedro Domingos 教授的“A Few Useful Things to Know about Machine Learning”这篇论文总结了机器学习研究者和从业者的 12 个宝贵经验,包括须要避免的陷阱、须要关注的重点问题、常见问题的答案。但愿这些经验对机器学习爱好者有一些帮助。算法
01编程
“表征+评估+优化”构成机器的主要内容!网络
构成机器学习算法的 3 部分:架构
表征(Representation):分类器必须用计算机能够处理的形式化语言来表示。相反地,为训练模型选择一个表征就等同于选择可训练分类器的集合。这个集合称为训练模型的「假设空间」。若是分类器不在「假设空间」中,那么它就不能由训练所获得。一个相关的问题是如何表征输入,即便用哪些特征。机器学习
评估(Evaluation):须要一个评估函数来区分分类器的好坏。算法内部使用的评估函数可能与分类器优化的外部评估函数不一样,这是为了便于优化,而且是由咱们下一节所要讨论的问题致使的。函数
优化(Optimization):咱们要用一种方法搜索得分最高的分类器。优化方法的选择对于提高模型的效率很是关键。另外,若是评估函数具备一个以上的最优值,则优化方法有助于肯定最后产生的分类器。新的训练模型一开始经常使用现有的优化器,后来常会转而使用自定义的优化器。性能
02学习
“泛化能力”很关键,“测试数据”验证相当重要!测试
机器学习的主要目标是对训练集以外的样本进行泛化。由于不管有多少数据,都不太可能在测试中再次看到彻底相同的例子。在训练集上具备良好表现很容易。机器学习初学者最常犯的错误是把模型放在训练数据中进行测试,从而产生成功的错觉。若是被选择的分类器在新的数据上进行测试,通常状况,结果每每和随机猜想相差无几。因此,若是你雇佣他人创建分类器,必定要留一些数据给你本身,以便在他们给你的分类器中进行测试。相反,若是有人雇佣你创建一个分类器,请保留一部分数据对你的分类器进行最终测试。优化
03
仅有数据是不够的,知识相结合效果更好!
把泛化能力做为目标,会又另外一个后果:只有数据是不够的,不管你拥有多少数据。这是否让人沮丧。那么,咱们怎么能奢求它学到东西呢?不过,现实世界中咱们想学习的函数并不都是从数学上可能的函数中提取出来的!实际上,使用通常假设——例如平滑性、类似样本有类似分类、有限的依赖性或有限复杂度——每每能作得足够好,这也正是机器学习能如此成功的大部分缘由。正如演绎同样,概括(训练模型所作的)是一个知识杠杆——它将少许知识输入转化为大量知识输出。概括是一个比演绎更为强大的杠杆,仅需更少的知识就能产出有用的结果。不过,它仍然须要大于零的知识输入才能工做。正如任何一个杠杆同样,输入得越多,获得的也越多。
这样回想起来,训练过程当中对知识的需求没什么好惊讶的。机器学习并不是魔术,它没法作到无中生有,它所作的是触类旁通。如同全部的工程同样,编程须要作大量的工做:咱们必须从头开始构建全部的东西。训练的过程更像是耕种,其中大部分工做是天然完成的。农民将种子与养分物质结合起来,种植做物。训练模型将知识与数据结合起来,编写程序。
04
“过拟合”让机器学习效果产生错觉!
若是咱们所拥有的知识和数据不足以彻底肯定正确的分类器,分类器(或其中的一部分)就可能产生「错觉」。所得到的分类器并非基于现实,只是对数据的随机性进行编码。这个问题被称为过拟合,是机器学习中棘手的难题。若是你的训练模型所输出的分类器在训练数据上准确率是 100%,但在测试数据上准确率只有 50%,那么实际上,该分类器在两个集合上的输出准确率整体可能约为 75%,它发生了过拟合现象。
在机器学习领域,人人都知道过拟合。可是过拟合有多种形式,人们每每不能马上意识到。理解过拟合的一种方法是将泛化的偏差进行分解,分为误差和方差。误差是模型不断学习相同错误的倾向。而方差指的是无论真实信号如何,模型学习随机信号的倾向。线性模型有很高的误差,由于当两个类之间的边界不是一个超平面时,模型没法作出调整。决策树不存在这个问题,由于它们能够表征任何布尔函数。可是另外一方面,决策树可能方差很大:若是在不一样训练集上训练,生成的决策树一般差别很大,但事实上它们应该是相同的。
交叉验证能够帮助对抗过拟合,例如,经过使用交叉验证来选择决策树的最佳规模用于训练。但这不是万能的,由于若是咱们用交叉验证生成太多的参数选择,它自己就会开始产生过拟合现象。
除交叉验证以外,还有不少方法能够解决过拟合问题。最流行的是在评估函数中增长一个正则化项。举个例子,这样一来就能惩罚含更多项的分类器,从而有利于生成参数结构更简单的分类器,并减小过拟合的空间。另外一种方法是在添加新的结构以前,进行相似卡方检验的统计显著性检验,在添加新结构先后肯定类的分布是否真的具备差别。当数据很是少时,这些技术特别有用。尽管如此,你应该对某种方法完美解决了过拟合问题的说法持怀疑态度。减小过拟合(方差)很容易让分类器陷入与之相对的欠拟合偏差(误差)中去。若是要同时避免这两种状况,须要训练一个完美的分类器。在没有先验信息的状况下,没有任何一种方法总能作到最好(天下没有免费的午饭)。
05
机器学习中最大的问题就是“维度灾难”!
除了过拟合,机器学习中最大的问题就是维度灾难。这一名词是由 Bellman 在 1961 年提出的,指的是当输入维度很高时,许多在低维工做正常的算法将没法正常工做。可是在机器学习中,它的意义更广。随着样本维度(特征数量)的增长,进行正确泛化变得愈来愈难,由于固定大小的训练集对输入空间的覆盖逐渐缩减。
高维的通常问题是,来自三维世界的人类直觉一般不适用于高维空间。在高维度当中,多元高斯分布的大部分数据并不接近平均值,而是在其周围愈来愈远的「壳」中;此外,高维分布的大部分体积分布在表面,而不是体内。若是恒定数量的样本在高维超立方体中均匀分布,那么在超越某个维数的状况下,大多数样本将更接近于超立方体的一个面,而不是它们的最近邻。此外,若是咱们经过嵌入超立方体的方式逼近一个超球面,那么在高维度下,超立方体几乎全部的体积都在超球面以外。这对于机器学习来讲是个坏消息,由于一种类型的形状经常能够被另外一种形状所逼近,但在高维空间中却失效了。
创建二维或三维分类器容易;咱们能够仅经过视觉检查找出不一样类别样本之间的合理边界。可是在高维中,咱们很难理解数据的分布结构。这又反过来使设计一个好的分类器变得困难。简而言之,人们可能会认为收集更多的特征必定不产生负面做用,由于它们最多只是不提供有关分类的新信息而已。但事实上,维度灾难的影响可能大于添加特征所带来的利益。
06
“理论保证”与“实际出入”的相互关系
机器学习论文中充斥着理论保证。最多见的保证就是关于保持模型良好泛化能力的训练样本数量约束问题。首先,该问题显然是可证的。概括一般与演绎相对:经过演绎,你能够确保结论是正确的; 在概括中,全部臆想都被摒弃。或许这就是传世的古老智慧。近十年的主要突破就是认识到概括的结果是可证的这一事实,尤为在咱们愿意给出几率保证时。
必须斟酌这类约束意味着什么。这并不意味着,若是你的网络返回与某个特定训练集一致的假设,那么这个假设就可能具备很好的泛化能力。而是,给定一个足够大的训练集,你的网络极可能会返回一个泛化能力好的假设或没法获得一致的假设。这类约束也没有教咱们如何选择一个好的假设空间。它只告诉咱们,若是假设空间包含好的分类器,那么随着训练集的增大,网络训练出一个弱分类器的几率会减少。若是缩小假设空间,约束条件做用会加强,可是训练出一个强分类器的几率也会降低。
另外一种常见的理论保证是渐进性:假如输入的数据规模是无穷大的,那么网络确定会输出一个强分类器。听起来靠谱,可是因为要保证渐近性,选择某个网络而非另外一个就显得过于轻率。在实践中,咱们不多处于渐近状态。由上面讨论的误差 - 方差权衡可知,若是网络 A 在具备海量数据时比网络 B 好,则在有限数据状况下,B 每每比 A 好。
理论保证在机器学习中存在的意义不只仅是做为评判实际决策的标准,并且是理解的方法及设计算法的动力。鉴于此,它十分有用。事实上,这么多年以来,正是理论联系实际促进了机器学习的飞跃式进步。注意:学习是一个复杂的现象,它在理论上说得通,在实际工做中可行,也并不表示前者是致使后者的缘由。
07
“特征工程”是机器学习的关键
最后,有些机器学习项目大获成功,有些却失败了。这是什么形成的?最重要的影响因素就是使用的特征。若是你获取到不少独立的且与所属类别相关的特征,那么学习过程就很容易。相反,若某一个类是特征的极其复杂的函数,你的模型可能没法学习到该函数。一般来讲,原始数据格式很不适合学习,可是能够基于它来构建特征。这正是机器学习项目最重要的部分,一般也是最有趣的部分,直觉、创造力、「魔术」和技术一样重要。
初学者经常会惊讶于机器学习项目实际上花在机器学习上的时间不多。可是当你将收集、整合、清洗和预处理数据以及将数据重构成特征过程当中解决错误等杂事所消耗的时间考虑在内就不奇怪了。并且,机器学习并不仅是构建数据集跑一次模型就没事了,它一般是一个跑模型、分析结果、修改数据集/模型的迭代式过程。学习是其中最快的部分,但这取决于咱们已经能够熟练运用它!特征工程由于针对特定的领域,因此很难作,而模型架构的适用范围更普遍。可是,这两者之间并无清晰的界线,这一般能够解释那些整合了领域知识的模型具备更好的性能。
08
记住:数据量比算法还重要!
在计算机科学的大多数领域,时间和内存是两大紧缺资源。但在机器学习中,数据集俨然是第三个紧缺资源。随着时间的推移,瓶颈之争也在不断改变。在 20 世纪 80 年代,数据一般是瓶颈。而现在时间更为宝贵。咱们今天有海量的数据可用,可是却没有充足的时间去处理它,这些数据所以被搁置。这就产生了一个悖论:即便在原则上讲,大量的数据意味着能够学习到更复杂的分类器,但在实践中,咱们每每采用更简单的分类器,由于复杂的分类器意味着更长的训练时间。部分解决方案是提出能够快速学习到复杂分类器的方法,且今天在这一方向上确实取得了显著的进展。
使用更智能的算法的收益不如指望的部分缘由是,第一次取近似值时,它跟其它算法无异。当你认为表征方式之间的区别与规则、神经网络之间的区别相似时,这会让你惊讶。但事实是,命题规则能够轻易地编码进神经网络,而且其它的表征方式之间也有相似的关系。模型本质上都是经过将近邻样本分到相同的类别而实现的,关键差别在于「近邻」的含义。对于非均匀分布的数据,模型能够产生普遍不一样的边界,同时在重要的区域(具备大量训练样例的区域,所以也是大多数文本样例可能出现的区域)中产生相同的预测。这也能解释为何强大的模型多是不稳定的但仍然很准确。
通常来讲,咱们首先要考虑最简单的模型(例如,先考虑朴素贝叶斯而非 logistic 回归,先考虑 K-近邻而非支持向量机)。模型越复杂越诱人,可是它们一般很难使用,由于你须要调整不少的节点以得到好的结果,同时,它们的内部构造极其不透明。
模型能够分为两种主要类型:一种是规模固定的模型,例如线性分类器,另外一种是表征能力随数据集加强的模型,例如决策树。固定规模的模型只能利用有限的数据。规模可变的模型理论上能够拟合任何函数,只要有足够大的数据集,可是现实很骨感,总存在算法的局限性或计算成本。并且,因为维度灾难,现有的数据集可能不够。鉴于这些缘由,更智能的算法—那些充分利用数据和计算资源的算法--若是你愿意努力去调试,最终会获得好的结果。在设计模型与学习分类器之间并无十分清晰的界线;可是,任何给定的知识点均可以编码进模型或从数据中学习到。所以,模型设计每每是机器学习项目中的重要组成部分,设计者最好拥有相关专业背景。
09
“单模型”很难实现最优,“多模型集成”才是出路!
在机器学习发展的早期,你们都有各自喜好的模型,用一些先验的理由说明它的优越性。研究员对模型开发了大量的变体并从中挑选一个最优的模型。随后,系统的经验比较代表,最好的模型随应用的改变而改变,开始出现了包含许多不一样模型的系统。如今的研究开始尝试调试多个模型的不一样变体,而后挑选表现最好的那一个。但研究人员开始注意到,不选择找到的最佳变体,而是结合多个变体,却获得了更好的结果(一般会好不少),并且这没有增长工做量。
如今,模型集成已是标准方法。其中最简单的技术叫 bagging 算法,咱们仅经过重采样来生成训练数据集的随机变体,再基于这些变体分别学习分类器,并经过投票整合这些分类器的结果。此法的可行性在于它大幅减小了方差,且只微微提高了一点误差。在 boosting 算法中,训练样例有权重,并且这些权重各不相同,所以每一个新分类器都把重点放在前面的模型会出错的样例上。在 stacking 算法中,每一个单独的分类器的输出做为「高层」模型的输入,这些高层模型会以最佳方式组合这些模型。
还有不少其它的方法,就不一一列举了,可是总的趋势是规模愈来愈大的集成学习。在 Netflix 的奖金激励下,全世界的团队致力于构建最佳视频推荐系统。随着竞赛的推动,竞赛团队发现经过结合其它团队的模型能够得到最佳结果,同时这也促进团队的合并。冠军和亚军模型都是由 100 多个小模型组成的集成模型,两个集成模型相结合可进一步提升成绩。毫无疑问,未来还会出现更大的集成模型。
10
“简单”不能表明是“准确”!
奥卡姆剃刀原理指出,如无必要,勿增实体。在机器学习中,这一般意味着,给定两个具备相同训练偏差的分类器,二者中较简单的分类器可能具备最低的评估偏差。关于这一说法的佐证在文献中随处可见,但实际上有不少反例用来反驳它,「没有免费午饭」定理质疑它的真实性。
咱们在前文中也看到了一个反例:集成模型。即便训练偏差已经达到零,经过增长分类器,加强集成模型的泛化偏差仍然能够继续减小。所以,与直觉相悖,模型的参数数量与其过拟合趋势并无必然的联系。
一个巧妙的观点是将模型复杂性等同于假设空间的大小,由于较小的空间容许用较短的编码表征假设。相似理论保证部分中的界限可能被理解成较短的假设编码有更好的泛化能力。经过在有先验偏好的空间中对假设进行较短的编码,咱们能够进一步细化这一点。可是把这看做准确率和简单性之间的权衡的证实则是循环论证:咱们经过设计使偏心的假设更简单,若是它们准确率不错,那是由于偏心假设的正确,而不是由于在特定表征下假设的「简单」。
11
“可表征”并不表明“可学习”!
全部运用于非固定规模的模型表征实际上都有「任意函数均可以使用该表征来表示或无限逼近」之类的相关定理。这使得某表征方法的偏好者经常会忽略其它要素。然而,仅凭可表征性并不意味着模型能够学习。例如,叶节点多于训练样本的决策树模型就不会学习。在连续的空间中,一般使用一组固定的原语表征很简单的函数都须要无限的份量。
进一步讲,若是评估函数在假设空间有不少局部最优势(这很常见),模型可能就找不到最优的函数,即便它是可表征的。给定有限的数据、时间及存储空间,标准的模型只能学到全部可能函数集的一个很小的子集,且这个子集随所选的表征方法的不一样而不一样。所以,关键问题不在「模型是否可表示」,而「模型是否可学习」以及尝试不一样的模型(甚至是集成模型)是很重要的。
12
“相关性”并不是就是“因果关系”!
相关性并不意味着因果关系这一点被频繁提起,以致于都不值得再批评。可是,咱们讨论的某类模型可能只学习相关性,可是它们的结果一般被看做是表征因果关系。有问题吗?若是有,那么你们为什么还这么作?
一般是不对的,预测模型学习的目标是用它们做为行动的指南。当发现人们在买啤酒的时候也会买纸尿布,那么把啤酒放在纸尿布旁边或许会提升销量。但若是不实际进行实验则很难验证。机器学习一般用于处理观测数据,其中预测变量不受模型的控制,和实验数据相反(可控的)。一些学习算法也许能够经过观测数据挖掘潜在的因果关系,可是实用性不好。另外一方面,相关性只是潜在的因果关系的标识,咱们能够用它指导进一步的研究。
原文:https://medium.com/@james_aka_yale/12-useful-things-to-know-about-machine-learning-c599be92c98d
End