Useful Things To Know About Machine Learning (机器学习中一些有用的知识)
Useful Things To Know About Machine Learning
原文作者:Jason Brownlee
原文地址:https://machinelearningmastery.com/useful-things-to-know-about-machine-learning/
译者微博:@从流域到海域
译者博客:blog.csdn.net/solo95
本文同样刊载于腾讯云+:https://cloud.tencent.com/developer/article/1039545
机器学习中一些有用的知识
你想要了解一些在已经开发成功的机器学习应用程序中有用的技巧和窍门吗?
这是华盛顿大学教授佩德罗·多明戈斯(Pedro Domingos)在2012年发表的题为“A Few Useful Things to Know about Machine Learning(PDF)”的期刊文章的主题。
这是一个开篇具有极大吸引力的有趣文章:
developing successful machine learning applications requires a substantial amount of “black art” that is hard to find in textbooks
译:开发成功的机器学习应用程序需要大量难以在教科书中找到的“黑色艺术”
本文总结了他的文章中概述的机器学习研究人员和从业人员所学到的12个关键的经验和教训。
机器学习中有用的东西
照片由jeffreyw提供,保留某些权利。
1.学习=表示+评估+优化(Learning = representation + evaluation + optimization)
在面对机器学习算法的时候,不要因为可能使用的数百种机器学习算法而迷失在杂草丛中。
关注三个关键组件:
表示。您选择的类定义了解决方案将要采用的表示(representation),所有可学习的分类器的空间称为假设空间。例子包括实例,超平面,决策树,规则集和神经网络。
评估。评估函数,你将用它来把一个好的分类器和一个坏的分类器区分开来。这可能是算法内部使用的损失函数。例子包括精确度、平方差,可能性和信息获增益。
优化。搜索一个好的分类器的方法。这就是内部算法如何在评估函数的上下文中将假设空间遍历到能够进行准确预测的最终的分类器。例子包括组合优化和连续优化及其子集。
2.泛化才是最重要的
The fundamental goal of machine learning is to generalize beyond the examples in the training set.
机器学习的根本目的是在训练集范例之外进行泛化。
我们必须期望不会再遇到与训练集中的样本相同的样本。仅仅在训练集上评估模型的准确性,几乎不能用于了解该模型对不可见数据的有用性。
注意不要用测试数据污染训练过程。在训练数据集上使用交叉验证,并为最终验证创建一个保留的数据集。
We have to use training error as a surrogate for test error, and this is fraught with danger.
我们必须用训练错误作为测试错误的代名词,这是充满危险的。
3.仅靠数据是不够的
仅有数据是不够的,这跟你有多少数据无关。
Every learner must embody some knowledge or assumptions beyond the data it’s given in order to generalize beyond it.
每个学习者都必须收录一些超出所给数据的知识或假设,以便在它之外做出泛化。
我们必须做出假设。这些(假设)造成了偏差(bias),但却让我们避免了没有免费午餐的陷阱,也没有对我们正在工作的问题做出任何假设。
我们在分类器中做出的简单假设需要很长时间,比如:
- 误差函数的平滑性
- 相似的例子有相似的类
- 有限的依赖关系
- 有限的复杂性
泛化(indution)(机器学习方法所使用的学习类型)将少量的数据转化为大量的输出知识。它比推演(dedution)更有力量。泛化需要少量的知识作为输入,我们必须高效地使用它。
例如:
- 如果在我们的领域中有很多关于”到底是什么使得例子具有相似性”的大量知识,我们就可以使用实例方法。
- 如果我们有关于概率依赖(probabilistic dependencies )的知识,我们可以使用图形模型。
- 如果我们知道每个类型需要什么样的先决条件,我们可以使用规则集。
Machine learning is not magic; it can’t get something from nothing. What it does is get more from less.
机器学习不是魔术; 它不能从无到有。它所做的是从更少的东西中获得更多东西。
4.过拟合(Overfitting)有许多面孔
我们必须要警惕学习训练数据中的随机波动。这称为过拟合,当训练数据的准确度较高而测试数据集的准确度较低时可以被识别。
泛化误差(Generalization error)可以分解为偏差(bias)和方差(variance):
偏差(Bias)是学习者学习错误的倾向。线性学习者有很高的偏差(bias),因为它仅限于使用超平面来进行类。
方差(Variance)是学习者忽略真实信号来学习随机事物的倾向。决策树具有很高的方差,因为它们受训练数据中的细节影响很大。
有时候,有效的错误假设(读取偏差)可能比弱的真实假设更好,这就解释了为什么具有强独立性假设的朴素贝叶斯可以比C4.5这样的强大的决策树做得更好,因为它需要更多的数据来避免过拟合。
交叉验证有帮助,但是如果我们经常检查并最终过拟合整个训练数据集,可能会导致问题。
规范化可以通过惩罚更复杂的分类器来提供帮助。
统计显着性检验可以帮助确定变化是否是有意义的变化。
It’s easy to avoid overfitting (variance) by falling into the opposite error of underfitting (bias). Simultaneously avoiding both requires learning a perfect classifier, and short of knowing it in advance there is no single technique that will always do best (no free lunch).
通过落入相反的欠拟合错误(偏差),可以很容易避免过拟合(方差)。同时避免这两种情况都)需要学习一个完美的分类器,而且事先并不知道(它),没有任何一种技术总能做到最好(没有免费的午餐)。
更多信息,请参阅维基百科条目Bias-variance tradeoff。
5.高维度上的泛化错误( Intuition fails in high dimensions)
机器学习中的第二大问题是维度的诅咒。
多明戈斯(Domingos)把它描述得很好:
Generalizing correctly becomes exponentially harder as the dimensionality (number of features) of the examples grows, because a fixed-size training set covers a dwindling fraction of the input space.
随着示例的维度(特征数量的增长),正确地泛化变得越来越难,因为固定大小的训练集覆盖了输入空间的逐渐减小的一部分。
基于相似性的推理在高维空间中迅速崩溃。在高维度上,所有的例子看起来都一样。我们的直觉也打破了,比如试图理解多元高斯分布的均值。
这个问题的反作用效果被称为“ 不均匀的祝福 ”(我认为是Domingos的术语)。这是指现实世界的观察结果往往不是统一的分布,而是以有用和有意义的方式进行分组或聚集。
6.理论上的保证并不是真的像他们看起来那样
理论上的保证应该用大量的材料来进行。
例子包括:
算法所需的样本数量,以确保良好的泛化。
给定无限的数据,该算法也能保证输出正确的分类器。
如果你不是从理论上的机器学习背景而来的,这个课程可能看起来很深奥。Domongos总结得很好:
The main role of theoretical guarantees in machine learning is not as a criterion for practical decisions, but as a source of understanding and driving force for algorithm design.
理论保证在机器学习中的主要作用不是作为实际决策的标准,而是作为算法设计的理解和推动力来源。
7.特征工程是关键(Feature engineering is the key)
造成机器学习项目失败或者成功最大差异的因素是其所使用的特征(feature)。
当所有的特征与类(class)相关时,学习是容易的,但更多的时候,类是特征的复杂功能。
machine learning is not a one-shot process of building a data set and running a learner, but rather an iterative process of running the learner, analyzing the results, modifying the data and/or the learner, and repeating
机器学习不是建立数据集和运行学习者的一次性过程,而是运行学习者,分析结果,修改数据和/或学习者以及如此往复。
原始数据通常不包含用于学习算法的足够的结构,必须从可用的数据构造特征以更好地将结构展示给算法。因为这样的特征工程通常是针对特定领域的。
一种方法是生成大量的特征并选择与类最相关的特征。这可以很好地工作,但是其中一个陷阱是忽略了对输出变量有用的内部特征非线性关系(intra-feature non-linear relationships)的可能性。
有关特征工程的更多信息,请参阅文章: Discover Feature Engineering, How to Engineer Features and How to Get Good at It
8.更多的数据能打败更聪明的算法
当你已经达到极限,但仍然需要更好的结果时,你有两个选择:
设计一个更好的学习算法
收集更多的数据(更多的观察和/或更多的特征)
获得更好结果的最快途径往往是收集更多的数据。
As a rule of thumb, a dumb algorithm with lots and lots of data beats a clever one with modest amounts of it.
作为一个经验法则,一个有很多大量数据的愚蠢算法,就能打败一个只有少量数据的聪明算法。
计算机科学受时间和内存的限制,机器学习增加了第三个约束,即训练数据。
今天我们通常拥有比我们可以使用的更多的数据。复杂的分类器可能需要很长时间来训练或在某个规模上不能很好地工作。这意味着在实践中需要更经常地使用更简单的分类器。此外,在规模上,大多数分类器会实现非常相似的结果。
All learners essentially work by grouping nearby examples into the same class; the key difference is in the meaning of “nearby.”
所有学习者本质上都是通过将附近的例子分组到同一个类来工作。关键的区别在于“附近”所表示的含义。
通常,在更复杂的算法之前要先使用更简单的算法。根据算法使用的参数或术语的数量来查看其复杂性。
9.学习多个模型,而不只是一个
不要选择一个最喜欢的算法,并优化它到你的问题上。尝试大量不同的算法,然后将它们组合在一起以获得最佳结果。
In the early days of machine learning, everyone had their favorite learner, together with some a priori reasons to believe in its superiority.
在机器学习的早期,每个人都有自己最喜欢的学习者,并有一些先验的理由相信它的优越性。
考虑采取三种最流行的集合方法:
- 装袋(Bagging):生成不同的训练数据样本,在每个样本上准备一个学习者,并与使用投票的预测相结合。
- 提升(Boosting):在训练过程中通过实例本身的难度来加权(weight)训练实例,特别关注其难度以对事例进行分类。
- 堆叠(Stacking):使用更高级别的分类器来学习如何最好地结合其他分类器以进行预测。
10.简单并不意味着准确性
选择具有相同训练错误的两个分类器中更简单的一个是一个很好的经验法则。然而简单的分类器在测试数据集上并不总是最精确的。
一个可能更有趣的观点是考虑每个分类器假设空间大小的复杂性。这是每个算法产生的可能的分类器的空间。较大的空间可能会被较少采样,并且所得到分类器可能不太适合训练数据。
The conclusion is that simpler hypotheses should be preferred because simplicity is a virtue in its own right, not because of a hypothetical connection with accuracy.
结论是,简单的假设应该是优先选择的,因为简单本身就是一种美德,而不是因为与准确性的假设联系。
11.可表示并不意味着可学习(Representable does not imply learnable)
与挑选最喜爱的算法相关的是,从业者会陷入挑选最喜爱的表示的陷阱中,并用普适近似的理论要求来证明它(例如,它可以用来近似任意目标函数)。
Given finite data, time and memory, standard learners can learn only a tiny subset of all possible functions, and these subsets are different for learners with different representations.
给定有限的数据,时间和内存,标准学习者只能学习所有可能函数的一小部分,这些子集对于有着不同表示的学习者来说是不同的。
请注重目标函数是否可以学习的问题,而不是是否可以表示。
12.相关并不意味着因果关系
分类器只能学习相关性。他们从本质来说是具有统计性质的。
预测模型所做的预测旨在帮助人们在只有历史观察数据的复杂领域做出决策,并且不可能进行受控实验。
有趣的是,相关性可以作为因果关系的一个指南,可以作为调查的一个出发点。
概要
在这篇文章中,我们看了多明戈斯2012年论文中概述的机器学习研究人员和从业人员所学到的12个经验教训。
这些教训再次是:
- 学习=表示+评估+优化
- 泛化才是最重要的
- 只有数据是不够的
- 过拟合有许多面孔
- 高维度上的泛化错误
- 理论上的保证并不是真的像他们看起来那样
- 特征工程是关键(Feature engineering is the key)
- 更多的数据能打败一个更聪明的算法
- 学习多个模型,而不只是一个
- 简单并不意味着准确性
- 可表示的并不意味着可以学习
- 相关并不意味着因果关系
您可以下载PDF格式原文“机器学习中一些有用的知识 ”。
Domingos也是题为“机器学习” 的一个在线机器学习课程的作者,大概是在华盛顿大学录制的。所有的课程视频都可以通过点击“预览讲座”按钮免费观看。
最后,Domingos有一本新书名为“ The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World ”。我购买的那一本将会在今天送到。