什么是机器学习的权威定义之旅?
在这篇文章中,我想解决一个非常简单的问题:什么是机器学习?
你可能对机器学习感兴趣或者了解一点。如果有一天你和朋友或同事谈论机器学习,那么可能有人会问你“什么是机器学习?”。那么,本文的目标就是告诉你一些参考性的定义,以及一个现成的、有趣的、容易记忆的定义。我们将从了解该领域权威书籍中机器学习的标准定义开始,以一个程序员对机器学习的定义和被问到什么是机器学习时的一个现成笑话结束。权威定义先从阅读大学四门课程常用的机器学习参考书说起。这些都是我们的权威定义,为我们更深入的思考这个课题奠定了基础。我选择这四本书是为了强调这一领域的一些有用且多样的观点。经验告诉我们,这个领域确实包括很多方法,所以选择一个合适的角度是取得进步的关键。米切尔定义的机器学习(Machine Learning)汤姆·米切尔(Tom Mitchell)在其著作《机器学习》(中文版:计算机科学系列:机器学习)的序言中给出了一个定义:“机器学习的学科关注的是计算机程序如何随着经验的积累自动提高其性能。”我喜欢这个简单明了的定义,这是我们在帖子最后得到的程序员定义的基础。注意计算机程序的引用和提到的“自动改进”这个词。写程序提升自己就是挑衅!他在介绍中反复提到一个简短的形式系统:“对于某一类任务T和性能度量P,如果一个计算机程序在T上用P度量的性能是用经验E自我提高的,那么我们说这个计算机程序是在从经验E中学习”不要让术语的定义把你吓跑了,它是一个非常有用的形式系统。我们使用这个正式的系统作为模板,在一个表格的顶部列出经验E、任务T和绩效指标P,并列出不太模糊的复杂问题。它可以作为一种设计工具,帮助我们清楚地思考收集什么数据(E),做出什么决定(T)以及如何评估结果(P)。这就是为什么我们把它作为一个标准定义。请记住它。《统计学习的要素:数据挖掘、影响和预测》是由三位斯坦福统计学家撰写的,它将自己描述为组织探索其领域的统计框架。它在序言中写道:“许多领域都产生大量数据,统计学家的工作就是让所有这些数据变得有意义:提取重要的模式和趋势,理解“数据在说什么”。我们称之为从数据中学习。”我所理解的统计学家的工作是使用统计工具在一个有语境的环境中解读数据。作者似乎想把所有的机器学习领域都作为辅助工具。有趣的是,他们选择在书名中加入“数据挖掘”。统计学家从数据中学习,但软件也可以,我们从软件学到的东西中学习,从各种机器学习方法做出的决策和获得的结果中学习。毕晓普在《模式识别与机器学习》的序言中写道:“模式识别起源于工程学,而机器学习起源于计算机科学。然而,这些领域可以被视为同一领域的两个方面。”看完这些,你会有这样的印象,毕晓普是从工程的角度来到这个领域的,后来也采用了同样的方法来研究和使用计算机科学。这是我们应该遵循的成熟方法。更广义地说,无论一种方法声称在什么领域,如果它能通过对数据的学习,使我们获得更接近的洞察或结果,从而更好地满足我们的需求,那么我们称之为机器学习。算法角度Marshland在《机器学习:算法视角》中采用了Mitchell对机器学习的定义。在序言中,他提供了一个有力的解释,促使他写了这本书:“机器学习最有趣的特点之一是,它介于几个不同的理论学科之间,主要是计算机科学、统计学、数学和工程学。机器学习通常作为人工智能的一部分进行研究,这将它牢牢地置于计算机科学中。理解这些算法为什么能够有效工作,需要一定程度的统计学和数学头脑,而这一点在计算机专业的本科生中往往是缺乏的。”这是深刻而有益的。首先,他强调了这一领域的多学科性质。虽然我们从上面的定义中得到了这样的感受,但他为我们进一步强调了这一点。机器学习来源于各种信息科学。其次,他强调了过分坚持一个给定角度的危险。特别是,算法工程师避免了方法的数学内部操作原理的情况。毫无疑问,在相反的情况下,统计人员同样受到限制,以避免实施和部署的实际问题。Wayne illustrated 2010九月,Drew Conway创建了一个漂亮的维恩图,我发现这个图非常有帮助。他在解释中评论说,机器学习是黑客技术、数学和统计知识的总和。数据科学维恩图。对德鲁·康威的署名是非商业性的知识署名。他还将危险区域描述为黑客技术和专业知识的总和。在这里,他的意思是那些知道足够多的人是危险的。他们可以访问和构建数据,理解字段,运行方法并给出结果,但他们不理解结果的意义。我想这就是马斯兰德可能暗示的。程序员定义
现在让我们来谈谈程序员需要做些什么来将所有这些问题分解成具体的细节。首先,我们来看一下抗拒我们分解和程序解决的复杂问题。这就构成了机器学习的驱动力。然后,我们需要找到一个适合程序员的定义,一个每当其他程序员问我们什么是机器学习时,我们都可以使用的定义。
复杂的问题作为一名程序员,你最终会遇到许多类型的问题,这些问题顽固地抵制逻辑和过程的解决方案。我的意思是,对于很多种类的问题,坐下来写所有解决问题所需的条件语句既不可行也不划算。我听到你们程序员的大脑在喊“亵渎”。这是真的。以每天识别垃圾邮件的问题为例。每当引入机器学习,都是一直在用的例子。当一封邮件到来时,你将如何编写一个程序来过滤垃圾邮件,并决定是将其放入垃圾桶还是收件箱?你可能会开始收集一些例子,并深入研究它们。您将寻找垃圾邮件和非垃圾邮件特有的模式,您还将考虑抽象这些模式,以便您的启发式学习可以应用于未来的新案例。你会忽略那些永远不会被看到的怪异邮件,你将能够轻松提高准确率,并针对边境情况制定特殊程序。你会反复浏览邮件,抽象出新的模式来改进你所做的决定。有一种机器学习算法,所有这些事情都是由程序员而不是计算机来完成的。这种人工导出的硬编码系统,将和程序员一样,具备从数据中提取规则并实现的能力。这是可以做到的,但是会耗费太多的资源,而且会是一个持续不断的噩梦。机器学习在上面的例子中,我确信程序员大脑中你决心寻求自动化的那部分可以看到机会来自动化和优化从例子中提取模式的过程。机器学习方法就是这样一个自动化的过程。在垃圾邮件/非垃圾邮件的例子中,经验E是我们收集的邮件,任务T是一个决策问题(也叫分类),需要标记每封邮件是否是垃圾邮件,并放入正确的文件夹中。我们的性能指标将是0%-100%的百分比,类似于准确性(正确决策的数量除以决策总数乘以100)。准备这样一个决策程序的过程通常称为训练,收集到的例子称为训练集。程序是一个模型,一个把非垃圾邮件和垃圾邮件分开的问题的模型。作为程序员,我们喜欢这个术语。模型有特定的状态,需要维护。培训是一个只执行一次的过程,可以根据需要重新运行。分类是一项需要完成的任务。这些对我们都是有意义的。我们可以看到上面定义中使用的术语并不太适合程序员。从技术上讲,我们写的程序都是自动操作,所以说机器学习是自动学习是没有意义的。一个现成的笑话好吧,让我们看看能否用这些片段来构建一个程序员对机器学习的定义。机器学习是一个基于数据模型的训练过程,最终得出一个面向性能指标的决策。“训练一个模型”代表训练实例,“模型”代表通过经验学习获得的状态,“诱导一个决策”代表基于输入做出决策的能力,未来的决策需要一个看不见的预期输入。最后,“面向性能度量”指的是准备好的模型的目标需求和方向特征。我不是诗人。能不能给机器学习的程序员一个更准确简洁的定义?请留下你的评论。