前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于机器学习应该知道的事(上)

关于机器学习应该知道的事(上)

作者头像
哒呵呵
发布2018-08-06 17:51:31
4850
发布2018-08-06 17:51:31
举报
文章被收录于专栏:鸿的学习笔记

这是一篇翻译,为了能有效率的读下去,特地分成两篇。因为只是作为我个人学习的记录,所以没有考虑到微信排版之类的。内容才是王道。

摘要:

机器学习算法是通过从样本集中概括(generalizing)从而找出如何执行重要任务的方法。这常常是可行而节约成本的优化(programming,数学中是有优化的含义)方法。随着更多可用的数据,更具野心的问题得以解决。因此,机器学习广泛应用于计算机科学等领域。然而,开发成功的机器学习应用程序需要大量的“黑色艺术”(black art),很难找到相应的教程。本文总结了十二个机器学习研究人员和从业者应该知道的关键的经验教训机器习。这其中包括了应该避免的陷阱,重点关注的重要问题和常见问题的答案。

1.导论

机器学习系统能够自动从数据中学习(learn)程序。这通常是人工编程的非常有吸引力的替代品,并且在最近十年中,在计算机科学中使用机器学习得到迅速传播和发展。机器学习可用于网络搜索,垃圾邮件过滤,推荐系统,广告投放,信用评分,欺诈检测,股票交易,药物设计等项目。麦肯锡全球机构断言机器学习(例如:数据挖掘或预测分析)将是下一个创新大浪潮的驱动力。虽有几本优秀的教科书,但是,许多成功地开发机器学习项目所需要的“民间知识”(folk knowledge)并不容易在他们书中找到。因此,许多机器学习项目花费的时间比所需时间长得多,却得不到理想的结果。然而,这些民间知识很多是相当容易理解的。这就是本文的目的。

存在许多不同类型的机器学习,但是处于介绍的目的,我将专注于最成熟和最广泛的算法:分类。不过,我的论述的问题适用于所有的机器学习。一个分类器(classifier)是一个输入(通常)为离散和/或连续特征值(feature),输出一个显示离散值,即分类class)的系统。例如,一个垃圾邮件过滤器将电子邮件分类为“垃圾邮件”或“非垃圾邮件”,其输入可能是一个布尔向量x = (x1,...,xj,...,xd),其中xj=1。如果字典中的第j个词出现在电子邮件中x j = 0。 一个学习者(learner)输入样本的训练集(training set of examples)(xi,xj),其中xi = (xi,1,...,xi,d)是可观察输入而yi是相应的输出,并输出一个分类。学习者的测试是这个分类器能否正确产生每一个输入xi所对应的输出yi(例如,能否正确分类垃圾邮件或非垃圾邮件)。

2.学习=表示(representation)+评估(evaluation)+优化(optimization)

假设你有一个你认为不错的机器学习应用。那你面临的第一个问题是有着各种令人困惑的学习算法可用。那么使用哪一个呢?目前有数千个可用的算法,并且每年都会有数百篇新的出版物诞生。不在这庞大的数量中迷失的关键是实现机器学习算法的只是三个成分的组合。这三个成分是:

表示:分类器必须表示成计算机可以处理的形式语言。相反,为一个学习者选择一个表示等于选择一个能够学习的分类集合。这个集合被称为学习者的假设空间(hypothesis space)。如果一个分类不在假设空间里,那么它将不能学习。我将在以后的章节中叙述的一个相关的问题是如何去表示输入,例如,我将使用什么样的特征。

评估:一个评估函数(也被称为objective function或者scoring function)需要从坏的分类中识别出好的函数。算法内部的评估函数可能与我们想去优化的分类的外部算法不一样。对于容易的优化将会在下一个章节讨论。

优化:最后,我们需要搜索在一堆语言中的最高得分的分类的方法。优化技术的选择是学习者效率的关键,并且也能帮助我们选出最优值。对于新的学习者的很常见的是选择一个通用的优化,之后再选择一个自己定制的优化。

表格1展示了三个成分中每一个常见的例子。例如,k近邻算法分类一个测试集,是通过寻找k个最相似的训练样本,预测他们中最主要的集合。超平面-

基于形成每个分类的特征组合从而预测具有最高值的组合的类。决策树在每个内部节点测试每个特征,每一个特征值都有一个分支并且每一个叶子都具有分预测。算法1展示了一个基础的决策树学习者,对于在布尔域而言,使用信息增益和贪心算法。Info(xj,y)是特征xj和分类j的互信息(信息论里一种有用的信息度量)。MakeNode(x,c0,c1)返回一个测试特征和x=0的孩子c0以及y=0的孩子。

表示

评估

优化

距离 K近邻 支持向量机超平面 朴素贝叶斯 逻辑回归决策树规则集合 命题规则 逻辑规划神经网络图模型 贝叶斯网络 条件随机场

精度/错误率查准率和查全率方差误差可能性后验概率信息增益K-L发散成本/效用边际

组合优化 贪心算法 集束搜索 分支限界算法连续优化 非限制性 梯度下降 共轭梯度 拟牛顿法 限制性 线性规划 二次规划

当然,不是所有的来自表1中的每个组件的所有组合是等同的。例如,离散表示很自然的使用组合优化,连续表示则使用连续优化。尽管如此,许多学习者同时拥有离散和连续组件,并且事实上如今不太可能学习者单独只使用一个组件。

许多教程是通过表示来组织的,并且很容易忽略其他成分也是很重要的。对于选择成分不是一个简单的活,但是下一个章节将会触及到一些关键主题。正如我们下面所看到的,在机器学习项目中的一些选择可能比选择学习者更为重要。

3.一般计算

机器学习的基本目标是为了生成超越训练集给出的样本。这是因为,无论我们有多少数据,我们都不太可能在测试时再次看到这些确切的示例。(注意,如果字典中有100,000个词,上述垃圾邮件过滤器有2100,000种可能的不同输入。)在训练集上做得很好很简单(只是记住示例)。机器学习初学者最常见的错误是测试训练数据和成功的错觉。如果所选择的分类器之后再对对新数据进行测试,它通常不比随机猜测更好。所以,如果你聘请某人建立一个分类器,一定要保留一些数据给自己和测试他们给你的分类器。相反,如果你被雇用来构建一个分类器,从一开始设置一些数据,只在最后用它来测试你选择的分类器,然后之后再在整个数据上学习你的分类器。

算法1 learnDT(TrainSet)

if all examples in TrainSet have the same class y∗ then return MakeLeaf(y∗) if no feature xj has InfoGain(xj,y) > 0 then y∗← Most frequent class in TrainSet return MakeLeaf(y∗)x∗← argmaxxj InfoGain(xj,y)TS0 ← Examples in TrainSet with x∗ = 0 TS1 ← Examples in TrainSet with x∗ = 1return MakeNode(x∗, LearnDT(TS0), LearnDT(TS1))

测试数据对你的分类器的污染可能以未知的方式发生,例如,如果您使用测试数据来调整参数并进行大量调整。(机器学习算法有很多的旋钮,成功往往来自于不断的调试他们,所以这是一个真正的重点。)当然,提取出数据减少了可用于训练的样本量。这可以通过进行交叉验证来缓解:将训练数据随机划分为(例如)十个子集,保留每个子集,对其余训练进行训练,对每个学习的分类器对未看到的示例进行测试,以及对结果求平均值从而发现特定参数设置的效果如何。

在机器学习的早期,没有得到广泛赞同的是因为需要一直保持训练和测试数据分离。 部分是因为,如果学习者具有非常有限的表示(例如,超平面),训练和测试误差之间的差异可能不大。但是对于非常灵活的分类器(例如,决策树),或者甚至具有许多特征的线性分类器,严格分离是强制性的。

注意,泛化目标是机器学习的一个有趣的后果。与大多数其他优化问题不同,我们无法处理我们想要优化的函数!我们必须使用训练错误作为测试错误的替代,这是充满危险的。 将在下面的章节中讨论如何处理它。积极的一面,由于目标函数只是真正目标的代表,我们可能不需要完全优化它; 实际上,通过简单贪婪搜索返回的局部最优可能优于全局最优。

4.单独的数据是不够的

泛化目标会导致另一个重要后果:数据本身是不够的,无论你有多少。考虑从百万样本中学习一个(例如)具有100个变量的布尔函数。将会有2100 - 106个你不知道类的例子。如何理解这些类是什么?在没有进一步的信息,没有办法这样做猜知一枚硬币的正反面。 这个观察是由哲学家大卫·休谟在200多年前首次提出的(在某种程度上是不同的形式),但即使在今天,机器学习中的许多错误都源自未能理解它。每个学习者必须给出一些超出数据的知识或假设,以超越泛化它。这被Wolpert在他著名的“没有免费午餐”定理中正式化,根据该定理,没有学习者可以对所有可能的功能进行随机猜测。

这似乎是一个令人沮丧的消息。 我们怎么能希望学到什么呢? 幸运的是,我们想要在现实世界中学习的函数并不是从所有数学上可能的函数集合中统一绘制的!事实上,非常一般的假设(如平滑度、相同的样本具有相同类、有限的依赖性或有限的复杂性)通常足以做得很好,这是机器学习如此成功的大部分原因。就像推理,归纳(学习者所做的)是一个知识杠杆:它将少量的输入知识转化为大量的输出知识。归纳是一个比推理更强大的杠杆,需要更少的输入知识来产生有用的结果,但它仍然需要超过零输入知识来工作。和任何杠杆一样,我们投入的越多,我们就越能走出去。

这样做的推论是,选择一个表示的关键标准之一是哪种知识更容易表达。例如,如果我们有很多关于什么使样本在我们的域中相似的知识,基于实例的方法可能是一个不错的选择。如果我们有关于概率独立的知识,图模型是好的选择。如果我们知道每个类需要什么样的前提条件,“如果......那么...”规则可能是最好的选择。在这方面最有用的学习者是那些不仅仅是具有硬连接的假设,而是允许我们明确地陈述它们,广泛地改变它们,并且将它们自动地结合到学习中(例如,使用一阶逻辑或语法)。

回想起来,在学习中知识的需要不应该是令人惊讶的。机器学习不是魔术; 它不能从一无所获。它做的是从更少的得到更多。编程,像所有的工程,是很多工作:我们必须从头开始构建一切。学习更像是农业,让自然做大部分的工作。 农民将种子与营养素结合生长作物。学习者将知识与数据结合以改进程序。

--未完待续

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档