关于机器学习实战,那些教科书里学不到的12个“民间智慧”
作者:媒体转发 时间:2019-05-13 16:48

大数据文摘出品
来源:towardsml
编译:刘佳玮、王缘缘、Walker
机器学习算法被认为能够通过学习数据来弄清楚如何执行重要任务。
这意味着数据量越大,这些算法就可以解决更加复杂的问题。然而,开发成功的机器学习应用程序需要一定的“民间技巧”,这在教科书或机器学习入门课程中很难找到。
Pedro Domingos教授的一篇很好的研究论文,该论文汇集了机器学习研究人员和从业者的经验教训。
https://homes.cs.washington.edu/~pedrod/
要避免的陷阱,要关注的重要问题以及一些常见问题的答案。准备好去了解了吗?
1. 学习=表示+评估+优化
你有一个应用程序,你认为机器学习可能是一个很好的选择。现在,在机器学习领域,每年都会有大量的机器学习算法可供选择,有数百种机器学习算法问世。应该使用哪一个?

在这个巨大的空间中不迷失的关键是要明白所有机器学习算法的都由三个核心要素组成:
表示:输入数据,即要使用的特征,学习器和分类器必须以计算机可以理解的语言表示。学习器可以学习的分类器集称为学习器的假设空间。如果分类器不在假设空间中,则无法进行学习。
澄清说明:分类器与学习器的含义是什么?假设你有训练数据,并使用你构建另一个程序(模型)的程序处理这些数据,例如决策树。学习器是从输入数据构建决策树模型的程序,而决策树模型是分类器(能够为每个输入数据实例提供预测输出的东西)。
评估:需要评估函数来区分好的分类和坏的分类。算法内部使用的评估函数可能与我们希望分类器优化的外部评估度量不同(为了便于优化,并且与后面讨论的问题有关)
优化:最后,我们需要一种方法来在分类器中进行搜索,以便我们可以选择最佳的分类器。学习器效率的关键是选择优化技术。通常从使用现成的优化器开始。如果需要,以后你可以用自己的设计替换它们。
下表显示了这三个组件中每个组件的一些常见示例。

2. 泛化才有用
机器学习的基本目标是概括超出训练集中的例子。因为,无论我们拥有多少数据,我们都不太可能在测试时再次看到这些确切的示例。在训练集上做得很好很容易。初学者中最常见的错误是测试训练数据并得到成功的假象。如果所选分类器随后在新数据上进行测试,则通常不会比随机猜测更好。因此,从一开始就设置一些数据,并且仅使用它来测试最终选择的分类器,然后在整个数据上学习最终分类器。
当然,保留数据会减少可用于训练的样本数。这可以通过交叉验证来缓解:比如,将你的训练数据随机分成十个子集,在训练其余部分时保持每个子集,在其未使用的示例上测试每个学习的分类器,并对结果求平均值,来看特定参数设置的效果如何。
3. 只有数据还不够
当泛化是目标时,我们会遇到另一个主要后果:仅凭数据是不够的,无论你拥有多少数据。假设我们想学习一百万个例子中100个变量的布尔函数(0/1分类)。这意味着2 ^100-10^6个例子,你不知道它们的类。如果手头没有更多信息,这怎么能优于随机猜测呢?
似乎我们陷入了困境。幸运的是,我们想要在现实世界中学习的特性并不是从所有数学上可能的函数集中统一绘制的!实际上,非常一般的假设——就像具有相似类的类似示例——是机器学习如此成功的一个重要原因。
这意味着专业知识和对数据的理解对于做出正确的假设非常重要。对学习知识的需求应该不足为奇。机器学习并不神奇,它无法从无到有。它的作用是从更少的东西中获得更多。与所有工程一样,编程需要做很多工作:我们必须从头开始构建所有东西。学习更像是农业,让大自然完成大部分工作。农民将种子与营养物质结合起来种植农作物。学习者将知识与数据相结合以优化程序。
4. 过拟合的多面性




