经典重译 | 来自华盛顿大学教授的机器学习“内功心法”


本文最初发表在 《ACM通信》2012年第10辑。做者是华盛顿大学教授,著名的机器学习专家 Pedro Domingos。做者2016年凭借畅销书《终极算法》而名声大噪,成为全球机器学习领域表明人物之一。而5年前 Domingos 教授发表的这篇“内功心法”,也是整个国外机器学习领域几乎人人必读的一篇文章。在不少大学的机器学习课程以及优达学城等在线培训体系中,都推荐学生精读此文。算法


这篇文章高屋建瓴的介绍了机器学习实践当中若干须要关注、而又不见于通常教科书的问题,堪称经验之谈,很是宝贵。 国内的机器学习爱好者屡次翻译过这篇文章,可是翻译质量参差不齐。为此小编委托高手重译此文,再次发表以飨各位小伙伴,强烈建议你们收藏,有时间的话多读几遍。数据库


本文是中译版,在AI科技大本营(rgznai100)微信公众号会话中输入“经典”,便可得到原始PDF文件。编程


做者 | Pedro Domingos微信

导读 | 孟岩网络

翻译 | AI科技大本营(rgznai100)框架


机器学习系统能够自动从数据中学习程序。这种方法比起手工编程更具吸引力。近10年,机器学习发展势头迅猛,已不只限于计算机科学,还被用于网络搜索,垃圾邮件过滤器、推荐系统、广告植入、信用评分、欺诈检测、股票交易、药物设计以及其余应用上机器学习


麦肯锡全球研究院近日发布了一篇报告,断言机器学习(即数据挖掘和预测分析)将会驱动下一次革新浪潮。市面上有好些不错的教科书适合感兴趣的从业人员和研究人员(好比,Mitchell and Witten etal.)。可是,不少在实践当中极其重要的“内功心法”,教科书里是没有的,结果就致使不少机器学习项目浪费了大量的时间,或最后没有获得想要的结果。然而,大部分的内功心法并不难讲清楚,本文试图作一个解说。ide


机器学习种类不少,但为了方便说明,我主要就集中在最成熟、使用范围最广的一个类型:分类。但我要讨论的问题适用于全部类型的机器学习。函数


分类器是输入(通常来讲)一个离散向量以及/或者连续特征值,而后输出一个单一的离散值,即类别。好比,垃圾邮件过滤器把邮件分为“垃圾邮件”和“非垃圾邮件”,输入值多是一个布尔向量x = (x1,…,xj,…,xd),若是字典里以j开头的单词出如今邮件里,那么xj = 1,若没出现,则xj = 0。学习器输入一组训练样本 (xi, yi),其中xi = (xi,1, . . . , xi, d)为可观察输入,yi为对应的输出,输出的是一个分类器。学习器就是要测试这个分类器之后输入样本xt时,是否还能得出正确的输出值yt(例如,垃圾邮件过滤器是否能把以前未见过的邮件正确分类)。学习


机器学习=表示+评价+优化


假如你有一款应用,你以为机器学习可以对其有所帮助。那么摆在你面前的第一个大难题就是可供选择的学习算法种类繁多,让人眼花缭乱,到底选哪个呢?现有的算法就有数千种,而每一年又有数百种算法相关著做出版。在这样繁多的算法中不致迷失的关键,就是明白算法的三大组成部分:


  • 表示:一个分类器必定要用计算机可以处理的形式化语言来表示。反之,选择一个学习器的表示就等价于选择一个可能具备学习能力的分类器集。这个集被称为学习器的假设空间(hypothesis space)。若是一个分类器没有在假设空间内,那么学习器就没法学习。以后我会讲一个相关问题,就是如何表示输入值,换言之,就是要用什么特征。


  • 评价:评价函数(也叫作目标函数或者打分函数)用于区分分类器的好坏。为了便于优化,经过算法生成用于内部的评价函数和优化分类器的外部评估函数并不相同。


  • 优化:最后,咱们须要一个方法来找到分数最高的分类器。优化技术对于提高学习器效率相当重要,若是评价函数得出了多个分类器,那么就由优化来决定最终的去留。一般来讲,新的学习器开始都用现成的优化器,以后会换成定制的优化器。附表为三大成分的范例。



例如,K近邻算法经过肯定K个最类似训练样本,将出现最多的类别定为测试样本的类别。基于超平面的算法造成每一个类别特征的线性组合,并将得分最高的线性组合做为预测结果。决策树在每一个内部节点测试一个特征,一个分支表明一个特征值,枝叶是分类预测结果。


算法1 决策树概括


算法1就是布尔域决策树学习器的基本框架,使用了信息增益和贪婪搜索。信息增益(xj, y)是特征xj和类别y之间的互信息。节点制造(x,c0,c1)得出测试特征X 的节点值,把c0 做为x = 0的子类, c1 做为 x = 1的子类。固然,不是表格中一个成分的全部组合都有相赞成义。好比,离散表示一般用组合优化,而连续表示就用连续优化。然而,不少学习器既有离散成分也有连续成分,事实上,也许不久后在一些学习器上就会有全部可能的组合了!不少教材都是按照表示来安排的,这样容易忽略其余重要的部分。选择这些没什么捷径,但落实到机器学习项目上,有些部分会更重要一些。


泛化才是关键


机器学习的根本目标就是训练出超越样本的泛化模型,这是由于不管咱们有多少数据,咱们都不太可能在测试中再次看到这些具体的样本。(请注意,若是字典里有100,000个单词,垃圾邮件过滤器要就可能要描述2^100,000 多不一样输入)。训练集表现得好很容易(只要记住全部的样本就好了)。


机器学习初学者们广泛犯的一个错误就是用训练数据进行测试,结果很理想,就觉得本身成功了。当用该分类器测试新数据的时候,结果比随机猜想好不了多少。因此,若是你雇别人来建立分类器,记得要本身私藏一点数据,他们把分类器给你的时候,本身测一下。


若是你被聘请去建立一个分类器,一开始就保留些数据,等到最后完成的时候用来测试,最后基于全部的数据结果,你就知道本身的分类器怎么样了。测试数据可能会以一些潜在方式对分类器形成污染,好比,若是咱们用测试数据调超参。(机器学习算法有大量的超参,超参的调整关乎成败,因此要重点关注)。固然,留出数据会减小训练量,但交叉验证法能够缓解这个问题:随机把你的训练数据分红10个子集,每次选一个子集作训练,该子集的并集留下,做为测试集,测试结果的均值就可让咱们知道参数集表现如何。


在机器学习早期,人们对于将训练数据和测试数据分开的意义认识不深。这其中部分缘由是,若是学习器的表示有限(好比,超平面),那么训练集和测试集的偏差就不明显。可是,随着分类器灵活性增长(好比,决策树),或者有大量特征值的线性分类器,则训练与测试集的隔离是绝对必要的。


把泛化做为关键会给机器学习带来一个有趣的结果。不像其余优化问题,咱们无法访问咱们想优化的函数!咱们只能用训练错误代替测试错误,这样会有很大的问题(以后会谈到如何解决)。但好的一方面是,由于目标函数只是最终目标的代理,咱们不用彻底优化它:实际上,经过简单的贪婪搜索获得的局部优化可能会比全局最优更好。


光有数据还不够


把泛化做为关键还会带来另外一个重要的后果:无论你有多少数据,光有这些数据是不够的。好比从100万个样本中获得了100个变量的布尔函数,还有2^100 – 10^6个样本的类别是你不知道,那要怎么把这些类别弄清楚呢?在没有其余信息的状况下,不就只能靠扔硬币随机决定了。


早在200多年前,著名的哲学家大卫·休谟就提出人的认识是有限的,但直到今天,不少机器学习犯错的根源就是没有意识到这件事。每一个学习器必定要包含数据没有提供的知识和假设,这样才能将数据泛化。Wolpert在他著名的“没有免费午饭”理论中肯定了这一律念。根据这个概念,随机猜想会战胜学习了全部函数的学习器。


这听上去让人很沮丧。那咱们怎样才能学习呢?幸运的是,咱们在现实世界中学的函数并不是均匀的来自全部可能的数学函数!实际上,一些泛泛的假设——像平滑,样本类似则类别类似,依赖性有限、复杂度有限等等——就足够了,这就是机器学习可以成功的很大一部分缘由。和推理同样,概括(学习器要作的)就是一个知识杠杆:输入少许知识输出大量知识。概括比推理更强大,输入知识更少,却获得有用的结果。


固然,和全部的杠杆同样,输入的越多,获得的就越多。选择表示的关键是看哪一种知识更容易表达。好比,若是咱们懂得大量使样本类似的知识,那么例子导向方法是一个不错的选择。若是咱们有几率相关性的知识,那么就用图形模型。若是咱们知道每一个类别要用那种预测,那么“若是……那么……”规则会是个最好的选择。好的学习器仅仅固化假设是不够的,还要容许咱们可以明确表述它们,任意改变它们,而且可以自动把它们用于学习中(好比,用一阶逻辑或者程序)。


综上,在机器学习中须要知识没什么可惊讶的。机器学习不是魔术,不能无中生有,而是由少变多。编程须要咱们一切都从零作起。机器学习更像是种地,让大天然来作大部分工做。农民把肥料和种子混在一块儿长出庄稼。而学习器和数据知识合在一块儿就长出了程序。


过拟合有好几副面孔


要是咱们的知识和数据不足以让咱们获得一个好的分类器呢?那么咱们极可能就臆造一个分类器,把数据中的各类随机抖动都当真了。这个问题就叫作过拟合,是机器学习中常出现的问题。当你的学习器输出的分类器在训练集上准确率达100%,而测试集仅50%,而事实上二者的准确率都应为75%,这个时候就发生了过拟合。


每一个了解机器学习的人都知道过拟合,但其表现方式不尽相同。发现过拟合的办法之一就是把泛化偏差分解为误差和方差。误差是学习器持续学习一种错误东西,而方差是指学习器作出的决断与输入信号无关,是随机的。


图1. 飞镖的误差和方差


如图1所示,用飞镖作类比。一个线性学习器误差很高,由于两个类别之间的交界不是超平面时,学习器就不能进行概括。决策树不会发生这个问题,由于它们能够表示任何布尔函数,可是它们会出现很高的方差,由一样的现象引出的问题,在不一样的数据集上训练,决策树模型会获得彻底不一样的结果,而理论上来讲,它们应该是同样的。


相同的问题也出如今优化方式的选择上:在选择优化算法时,束搜索比贪婪搜索有更低的偏置,但有更高的方差,由于它用到了更多的假设。所以,与咱们的直觉相反,真正优秀的分类器不必定要比差的分类器表现更好。


图2. 那怕真分类器是规则集,朴素贝叶斯也比决策树学习器要好


如图2所示,即便真正的分类器是规则集,在训练样本不到1000个的时候,朴素贝叶斯分类器比决策树分类器精确度更高。哪怕贝叶斯假设错误,界面是线性,准确率仍是很高!这样的状况在机器学习中很常见:较强的错误假设会比较弱的正确假设表现更好,这是由于后者须要更多的数据来避免过拟合。


交叉验证能够避免过拟合,好比,经过它来选择合适大小的决策树进行学习。但这也不是万能的,若是咱们用来制造过多的参数选择,交叉验证就会自行开始过拟合。


除了交叉验证以外,还有其余各类方式来预防过拟合。


其中最经常使用的方法是在评价函数中加入正则项。这样能够对于过于复杂的模型进行处罚,于是系统更容易产生结构简单的模型。


另一种方式是在加入新的结构以前经过卡方验证来检验统计显著性,以此来判断加入此结构是否有助于提高效果。当数据不足时,这些方法很是有用。然而,若是有谁生成某种方法能够彻底“解决”过拟合问题,你应当持怀疑态度。由于很容易就从过拟合变成欠拟合。想要同时作到避免过拟合和欠拟合须要设计出完美的分类器,然而根据“天下没有免费的午饭”原理,在没有足够知识的前提下,没有任何一个分类器可以在各类状况下都表现最好。


一个关于过拟合的误解是,认为它是噪声形成的,好比说训练样本的标签标错了。这确实会让过拟合加剧,由于这会让学习器产生出变换反复的决策面,以知足这些样本的标定。可是在没有噪声的状况下, 也可能发生严重的过拟合。例如,假设咱们有一个布尔型分类器须要把训练集中的正样本找出来(换句话说,分类器以析取范式的方式,将训练集中样本的特征结合起来)。这个分类器将训练集中的样本正确分类,而将测试集中的正样本所有错误分类,不管训练集中有没有噪声。


多重假设检验与过拟合十分相关。标准的统计检验一次只能检验一种假设,而学习器能够同时检验百万种。结果是,看上去很重要的假设也许实际上并无多重要。例如,若是有一家信托基金公司连续十年业绩领先于业内,你会以为它很厉害,可是若是仔细一想,若是每一年任何一家公司都会有50%的几率领先,那么它就有可能很幸运地连续十年领先。这个问题能够经过加入一系列的假设,作显著性测试来判断,但一样会带来欠拟合的问题。一种更加有效的方式是控制错误接受的比例,也称为错误发现率。


高维度直觉失误


除了过拟合以外,机器学习最大的问题就是维度灾难了,这个说法是1961年Bellman提出来的,不少算法在低维度表现不错,可是一旦输入值为高维度就应付不了了。但在机器学习中,这个说法还有更多含义。随着样本的维度(特征值)增长,泛化的难度也按指数递增,由于大小固定的训练集在输入空间只占不多一部分。那怕1万亿个样本,维度为100的训练集也只占了输入空间10^-18的部分。这就是为何机器学习如此必要而复杂。


更严重的是,机器学习算法依赖(显式或者隐式)的类似性推理在高维度会崩溃。想象一个K近邻分类器把汉明距离做为类似性度量,假设类别就只是x1 ∧ x2,没有其余特征,这很简单。但若是还有98个不相关的特征x3,..., x100,那么它们的噪音就会淹没x1和x2之间的信号,最近邻分类会有效地作出随机预测。


更使人困扰的是,若是100个特征都相关,那么近邻算法也会出现问题,这是由于在高维度全部样本都很类似。假如,全部的样本都分布在规则网格内,有个测试样本Xt,若是网格是d维度,Xt的2d邻近样本和它距离都相同,因此随着维度增长,愈来愈多的样本成为了xt的近邻样本,近邻样本的选择就变得随机了。


这仅仅是高维度带来的一个问题:咱们的本能来自三维世界,无法应用于高维度世界。在高维度世界,多元高斯分布大部分的质量不是靠近均值,而是在其周围距离不断增长的“壳”里。高维度的橘子的质量主要就集中在果皮上,而不是果肉里。若是一个数量恒定的样本均匀地分布在一个高维度超立方体中,大部分样本应该靠近超立方体的表面而不是近邻。若是咱们把超球体刻进超立方体中来近似超球体,在高维度中,几乎超立方体全部的量都在超球体的外面。这对机器学习来讲是个坏消息,由于一种类别的形态经常靠其余形态来近似。


在一维和二维建分类器很容易,咱们经过肉眼观察就能够在不一样类别样本之间找到合理界面。(若是人能看到高维度那机器学习也没什么必要了。)可是一到高维度,咱们就很难理解发生了什么。这也给设计分类器带来了难度。有人会以为特征越多越好,大不了就是没什么新信息嘛。


但实际上,由于维度灾难,弊会大于利。不过好在有种效应叫作“非均匀性祝福”会部分消除这种诅咒。在大部分应用中,样本不是均匀分布在示例空间内,而是集中或者靠近低维流形。好比,K近邻算法特别适用于手写数字识别,那怕数字图像每像素上就有一个维度。由于数字图像的空间比图像空间小不少。学习器能够隐式地利用这种较低的有效维度,或算法来显式地减小使用的维度(好比,Tenenbaum)。


理论保证不必定有用


机器学习论文里尽是各类理论保证,最多见的一种就是限制样本数量来保证泛化成功。你怎么看呢?首先,它们有多是真的。概括通常来讲和推理是对立的:在推理中,你能够保证全部结论是正确的,但在概括就正好相反。这是几个世纪以来的一个老观念了。近十多年来的一个重大进步就是咱们意识到能够保证概括的结果,尤为是若是咱们想解决几率保证。


论证方式很简单。若是真错误率大于ε,咱们就认为这是个坏分类器。因此坏分类器的可能性是和n 随机一致,独立训练样本小于(1 − ε)n。把b做为坏分类器在学习器假设空间H中的数量。经过一致限,使得它们中至少一个的可能性持续低于b(1 − ε)n。假设学习器老是会获得一个一致的分类器,而坏分类器出现的几率就小于|H|(1 − ε)n 而咱们默认b ≤ |H|。因此若是咱们但愿可能性小于δ,让n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就够了。


但不幸的是,咱们对这种保证要持保留态度,由于经过这种方式获得的边界会很是松散。上述边界一个很是棒的特征就是样本需求数量以|H| 和 1/δ的对数增加。大部分假设空间都是按多个d特征值呈双指数的,这样咱们就还须要一些d的指数样本。例如,有一个布尔变量的布尔函数。若是这里有e个不一样样本,那么就有2e不一样的函数。那么有2d 个不一样的函数,那么函数总量就为22d。就算假设空间只有指数的,边界仍是很是松散,由于一致限很悲观。例如,有100个布尔特征,而假设空间是决策树,有10层,为了保证上述边界δ = ε = 1%,咱们须要50万个样本。但实际上只要一小部分就能够知足学习了。


另外,咱们还要警戒这样的边界意味着什么。它不是说,若是你的学习器获得一个与训练集一致的假设,就意味着假设成功,而是说明训练集够大的话,你的学习器要么获得一个好的假设,要么就是无法找到一个一致的假设。这个边界也没有告诉咱们怎么选择一个好的假设空间,只告诉了咱们,若是一个假设空间包含了真分类器,那么学习器输出坏分类器的几率就会随训练集的减小而降低。若是咱们压缩假设空间,那么边界会提升,前提是其包含的真分类器也压缩了(有些状况真分类器不在假设空间内,但该理论一样适用。)


另一种理论保证是渐近:给无穷的数据,保证学习器输出正确的分类器。这是一种确认,但可能会致使咱们轻率地下决定去选择某一种分类器。事实上,咱们不多会遇到渐近区。是由于以前我所讨论的误差-方差权衡问题,若是学习器A 在无限数据上比B 好,那么B在有限数据上必定比A好。


理论保证不是实际操做的准则,而是算法设计理解和驱动的源泉


就这方面来看,理论保证仍是颇有用的;实际上,理论和实践之间密切的相互做用是机器学习这些年能取得巨大成就的主要缘由。但机器学习是一个复杂的现象,不能由于学习器有了理论证实,在现实中运做,就说着前者是后者的缘由。


特征工程是关键


有的机器学习项目成功了,有的没有,是什么缘由呢?最重要的缘由就是其使用的特征。若是你有多个独立特征且每一个都和类别相关,那么你的机器学习就很容易成功。另外一方面,若是类别都是复杂的特征函数,那么就不容易学习。


一般,原始数据不是很好学习,可是你能够从数据中建构特征。这经常是机器学习项目中最费功夫的地方,也是最有趣的部分,在这部分直觉、创造力、“歪门邪道”和技术的东西一样重要。


初学者每每会很惊讶,在一个机器学习项目中,真正用在作机器学习这部分的时间不多,大部分都花在了数据收集、整合、清理和预处理,以及反复的特征设计。另外,机器学习不是建完数据库,运行学习器,一次就搞定的事情,而是要不断地运行学习器,分析结果,调整数据或者学习器,而后反复的一个迭代的过程。学习一般是这里面花时间最少的一部分。特征工程很复杂由于它是域特定的,而学习器则很大程度上是通用的。然而,这二者之间没有没有明显分界。这也就是为何好的学习器是和知识相结合的。


固然,机器学习的圣杯之一就是使愈来愈多的特征工程过程自动化。如今经常使用的一种方法就是自动生成大量的候选特征,而后经过信息增益来选择最好的。可是要记住单独特征互相也许无关,但合并在一块儿就会关系了。例如,若是这个分类是输入特征为k的XOR,每一个特征都没有类别相关信息,另外一方面,运行大量特征的学习器来寻找哪些在合并时有用会花费大量的时间,致使过拟合。因此,说到底在特征工程上,还得靠人的能力。


数据多比算法聪明更好


假设你建了最好的特征集,可是你拿到的分类器并不彻底准确。你要怎么办呢?


有两种选择:设计一个更好的算法,或者收集更多的数据(更多样本、更多原始特征,受制于高维诅咒)机器学习研究者经常更关心前者,但实际上收集数据这个办法更容易成功。根据经验,一个通常的算法,若是数据多,会优于数据较少的高深算法。(毕竟,机器学习就是让数据来干活的。)


但这就会带来另外一个问题:可扩展性


在大部分电脑科学中,两大受限资源是时间和内存。而在机器学习中,还有第三个:训练数据。不一样时期的技术瓶颈就在这三大限制中变换。20世纪80年代,数据是瓶颈,而今天,是时间。大量的数据是有的,可是没有足够的时间去处理。这就会致使一个悖论:理论上数据越多意味着能够学习更复杂的分类器,但实际上,最后仍是用的更简单的分类器,由于复杂分类器学习时间更长。一个解决方法是想出更快的方式来学习复杂的分类器,在这方面也的确有显著的成果(好比,Hulten and Domingos)。


使用高深的算法没有预期那么理想的缘由是,大部分算法都差很少。若是你认为规则集神经网不一样的话,你可能会对此感到很惊讶。但实际上,命题规则很容易编为神经网络,其余表示之间也有相似关系。全部学习器都是把近邻样本放进一个类别,而关键是什么叫“近邻”。在数据分布不均时,学习器尽管产生不一样界面,却依然能够作出相同预测(训练样本多的,一般测试样本也会大量出现)。这也能解释为何好的学习器不稳定,但仍是很准确。图3为二维展现,在高维度效果越明显。


图3所示,不一样边界会产生相同预测(+和-是两个类别的训练样本)


因此规则就是首先使用简单的学习器(好比,先用贝叶斯而非罗辑回归,先用K近邻算法而不是支持向量机)。越复杂的学习器越吸引人,但用起来却很难,由于它们须要调节的按钮太多才能获得想要的结果,也由于它们的内部不够透明。


学习器能够分红两大类:一是表示有固定大小的,好比线性分类器,还有表示随数据增长的,好比决策树(后者有时被称作非参数学习器。但很不幸,它们经常比参数学习器学的参数更多。)大小固定的学习器只能从大量数据中获益(注意一下图2中贝叶斯算法的渐近线约在70%左右)。


大小变化的学习器理论上只要数据足够,能够学习任何函数,但实际上不行,由于算法有限(好比,贪婪搜索会陷入局部最优)或者计算开销不足。并且,由于高维诅咒,现有数据可能不够。基于这些缘由,高深算法—充分利用数据和计算资源的—最后经常会成功。设计学习器和学习分类器之间没有太大差异,任何知识能够在编码进学习器中或从数据中学习。因此机器学习项目的学习器设计最后成为最重要的部分,从业者们须要具有必定的专业知识。


到最后,最大的瓶颈再也不是数据或者CPU周期,而是。不少论文中,学习器基本都在精准度和计算预算方面作比较。人为努力和洞察力很难测量,但每每更重要。这会帮助学习器建立人们能够理解的输出(好比,规则集)。充分利用机器学习的机构已经准备好基础设施使用各类学习器、数据资源和简单有效的学习问题来进行实验,而且在那些机构中机器学习专家和应用领域专家合做密切。


学习更多的模型


在机器学习的早期,每一个人都有本身喜欢的学习器,相信它的优越性。咱们花了大量的时间来尝试其变体,而后选择最好的一个。后来系统实证比较发现学习器的好坏是随应用不一样而改变的,因此搭载不一样学习器的系统就开始出现了。人们就开始努力尝试多个学习器的变体,而后仍是选择最好的那个。但后来研究者们发现,若是把多个学习器合在一块儿,结果会更好,使用者也不费什么功夫。


如今建立这样的集成模型已经成为一种标准了。最简单的一种技术,叫作bagging.咱们经过重采样的方式生成随机训练集,每一个训练集学习一个分类器,最后经过投票合成结果。这样的方式能成功的缘由在于其大大减小方差的同时,只稍提升了误差。在boosting中,训练样本有权重,而这些权重各不相同,因此每一个新的分类器都会关注以前分类器分错的样本。在stacking中,独立分类器输出变成了“更高级”学习器的输入,而且stacking在想办法进行最优组合.

现存的技术有不少,集成越作越大已经成为了一种趋势。


在Netflix prize大赛上,来自全世界的团队互相竞争,建立最好的视频推荐系统(http://netflixprize.com)。随着比赛的进程,团队发现经过合并其余团队的学习器能够获得最好的结果,而后团队之间互相合并,愈来愈大。冠、亚军都是上百个学习器的集成。固然,咱们在将来还会看到更大的集成。


模型集合不该和贝叶斯模型平均(BMA)—理论上最优的学习方法—相混淆。在BMA中,新样本的预测是经过在假设空间中取全部分类器各个预测的平均值,由分类器解释训练数据的表现,和咱们对其的期待来权衡。除了表面类似,其实集成和BMA很是不一样。集成改变了假设空间(好比,从单个决策树变成了全部决策树的线性集合),能够呈现出各类形式。BMA根据固定公式将权重分配给原始空间的假设。BMA权重和bagging或者boosting产生的权重彻底不一样:后者很是平均,而前者很是倾斜,直到某单一最高权重分类器占主导地位使得BMA选择它。这样产生的结果就是,集成模型是机器学习包中关键的一部分,而BMA却没人选择。


简单不意味着准确


奥卡姆剃刀原理说:如无必要,勿增实体。在机器学习中,这经常意味着,若是两个分类器有一样的训练错误,简单的那个训练器测试错误率会更低。这种说法经常在文学中很常见,但实际上有不少反例,“免费午饭”定理就能够对此进行反驳。


咱们在前面就看到了一个反例:模型集合。即便训练偏差达到0以后,经过增长分类器也能够提高加强集成的泛化偏差。另外一个反例就是支持向量机,能够有效地拥有无限量的参数而不会过分拟合。相反,函数符号(sin(ax))能够区分任意大的,任意标记的x轴上的点,即便它只有一个参数。所以,和直觉相反,模型的参数量和过分拟合之间没有必然联系。


更复杂的视图反而使复杂度与假设空间的大小相等,由于较小的空间容许用更短的代码表示假设。理论保证部分的界限可能被视为代表较短的假设泛化得更好。这能够经过将更短的代码分配给咱们有一些先验偏好的空间中的假设来进一步改进。可是将其视为在准确性与简单性之间权衡的“证实”是循环推理:咱们假设咱们更倾向于设计简单,若是它们是准确的,那是由于咱们的偏好是准确的,而不是由于咱们选择的表示中的假设是“简单”的。


这还会产生的另外一个复杂状况是没有学习器会完全搜索假设空间。假设空间更大的学习器如较少的假设比从较小空间中尝试更多假设的学习器过拟合的可能性低。正如Pearl所指出,真正影响训练和测试偏差的是选择假设的过程,而假设空间的大小只是对此的一个粗略指导。Domingos调查了奥卡姆剃刀在机器学习问题上的主要论点和证据。结论是,更简单的假设应该是首选的,由于简单自己就是一种美德,而不是由于与准确性的假设联系。这也多是奥卡姆的本意。


可表示不意味着可学习


基本上全部学习器的表示都和“全部函数均可以被表示,或者以无限接近的方式近似表示。”这样的理论相关。为了证实这个定理,表示的拥护者们经常会忽视其余东西。然而,函数能够被表示并不意味着能够被学习。好比,决策树学习器不能学习超过训练集的叶子节点。


在连续空间中,即便用固定基元集表示那怕最简单的函数也经常须要无穷的部分。若是假设空间有评价函数的局部最优,实际上也经常出现,那么即便能够被表示,学习器也许也找不到真正的函数。有了有限的数据、时间和内存,标准学习器只能学习全部函数的小部分子集,而这些子集对表示不一样的学习器是不一样的。因此关键问题不是“能不能被表示?”由于答案经常不重要,而是“能不能被学习?”这个问题值得去尝试不一样的学习器(或者合并它们)。


对于某些函数,有些表示在会比其余函数指数上更紧凑。结果就是,它们能够须要成指数减小的数据来学习函数。有些学习器是经过简单基本函数的线性合成造成的。好比,支持向量机围绕一些训练样本(支持向量)造成内核合成。经过这种方式造成n位的奇偶校验性须要2n的基本函数,可是使用一个表示须要多层(就是在输入和输出之间有好几步),奇偶校验性能够编码在线性大小的分类器里。寻找这种深度表示是如今机器学习的重要前沿。


相关并不是因果


相关性不是因果性这个观点可能经常被提到,不太值得在这里赘述。可是,只能用来学习相关性的学习器产生的结果经常被用来表示因果关系,这样错了吗?若是错了,为何人们这么作呢?


学习预测模型就是用它们做为行动导向。若是咱们发现啤酒和尿布经常是一并购买,那么也许把啤酒放在尿布旁边会增长销量。(这是数据挖掘世界的一个著名例子。)但没有实验,也很难断定是否正确。机器学习经常用来观测数据,预测变量经常不受学习器的控制,而实验数据受控。有些学习算法能够从观察数据中提取信息,可是这样的应用仍是很是有限。另外一方面,相关性是潜在因果联系的标志,因此咱们把相关性做为进一步调查的导向(好比,尝试想弄清楚因果链是什么)。


不少研究者认为因果性是一种虚设。例如,在物理定律中就没有因果概念。因果性是否是真的存在是一个很深奥的哲学问题,眼下也没有答案。但在机器学习上仍是有两点很实在,首先,无论咱们是否是把它们称做“因果”,咱们是要为行为作预测,而不是仅仅将观测变量相联系。第二,若是你能够得到实验数据(好比,随机将游客分到了一个网站的不一样版本中),那么要必定不遗余力。


结论


和全部的学科同样,机器学习很大量的“内功心法”难以得到.可是对成功很重要。本文总结了一些突出项目。固然,这也只是传统机器学习的补充。点击http://www. cs.washington.edu/homes/pedrod/class观看完整的在线机器学习课程。在http://www.videolectures.net 你会找到机器学习课程的宝藏,还有,Weka是一个很棒的开源机器学习包。


最后,祝你学的开心!

相关文章
相关标签/搜索