:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

锐眼发现 | 来自华盛顿大学教授的机器学习“内功心法”

Tech

锐眼发现 | 来自华盛顿大学教授的机器学习“内功心法”

作者:Pedro Domingos

译者:AI科技大本营(微信号「rgznai100」)

转载自:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

译者注:

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

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

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

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

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

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

分类器是输入(一般来说)一个离散向量以及/或者连续特征值,然后输出一个单一的离散值,即类别。比如,垃圾邮件过滤器把邮件分为“垃圾邮件”和“非垃圾邮件”,输入值可能是一个布尔向量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是一个很棒的开源机器学习包。

最后,祝你学的开心!

Leave a comment

随时欢迎您 联系我们