教你学Python44-机器学习的温柔指南
机器学习是人工智能中的一个子领域,该子领域构建的算法使计算机可以学习从数据执行任务,而无需进行显式编程。
得到它了?我们可以使机器学会做事!第一次听到,这让我大吃一惊。这意味着我们可以对计算机进行编程以自行学习事物!
学习能力是智力最重要的方面之一。将这种力量转化为机器,听起来是朝着使机器更加智能迈出的一大步。实际上,机器学习是当今人工智能领域取得最大进展的领域。成为当前的热门话题,并推动了拥有更多智能机器的可能性。
这篇文章将尝试向新手读者简要介绍机器学习。在使用机器学习时,我将概述重要的概念,应用程序和挑战。给出目标的正式或详尽描述不是本文的目的,而是提供一些初步的概念来吸引读者继续调查。
关于机器学习的真相
好吧,并不是所有的事物听起来都那么美,机器学习有其局限性。不过,我们不能构建智能机一样的数据从星际迷航或哈儿从2001年太空漫游。但是,我们有很多实际应用的示例,其中机器学习就像一个魅力。以下是一些实用的机器学习应用程序中最常见的类别:
图像处理
图像处理问题基本上必须分析图像以获取数据或进行一些转换。一些例子是:
-
当算法自动检测到您的面孔或朋友的面孔出现在照片中时,就像在Facebook中一样,对图像进行标记。基本上,机器学习算法会从您手动标记的照片中学习。
-
光学字符识别(OCR),当算法学习将手稿或扫描的文本文档转换为数字版本时。该算法必须学习将书写字符的图像转换为相应的数字字母。
-
自动驾驶汽车:允许汽车自行驾驶的部分机制使用图像处理。机器学习算法通过查看摄像机拍摄的每一帧,来了解道路的边缘,如果有停车标志或汽车正在驶近。
文字分析
文本分析是我们从文本中提取或分类信息的过程,例如推文,电子邮件,聊天,文档等。一些流行的示例是:
-
垃圾邮件过滤,最著名和最常用的文本分类应用程序之一(为文本分配类别)。垃圾邮件过滤器学习根据内容和主题将电子邮件分类为垃圾邮件或火腿邮件。
-
情感分析,文本分类的另一种应用,其中算法必须学会根据作者表达的心情将意见分类为肯定,中性或否定。
-
从文本中提取信息,学习提取特定的信息或数据,例如提取地址,实体,关键字等。
数据挖掘
数据挖掘是发现模式或根据数据进行预测的过程。该定义有点通用,但是可以认为它是从数据库中巨大的表中挖掘有用的信息。每行将是我们的训练实例,每列将是一个功能。我们可能有兴趣根据其余列来预测该表中的新列,或者发现将行分组的模式。例如:
-
异常检测:检测异常值,例如信用卡欺诈检测,您可以根据用户的通常购买模式来检测哪些交易异常值。
-
关联规则:例如,在超级市场或电子商务站点中,您可以通过查看一起购买哪些产品来发现客户的购买习惯。该信息可用于营销目的。
-
分组:例如,在SaaS平台中,按用户的行为或个人资料对用户进行分组。
-
预测:根据其余变量预测变量(数据库中的列)。例如,您可以通过从当前客户的资料和信用评分中学习来预测银行中新客户的信用评分。
电子游戏与机器人
电子游戏和机器人技术已成为应用机器学习的广阔领域。通常,我们有一个必须在环境(视频游戏中的虚拟环境或机器人的物理环境)中移动的代理(游戏角色或机器人)。然后,可以使用机器学习来使代理执行任务,例如在避开障碍物或敌人的环境中移动。在这些情况下使用的一种非常流行的机器学习技术是强化学习,该代理通过从环境强化中学习来学习执行任务(强化遇到障碍时是消极的,如果达到目标则是积极的)。
好的,我获得了机器学习的价值,但是它如何工作?
我十年前读到的第一本关于机器学习的书之一是汤姆·米切尔(Tom Mitchell)撰写的《机器学习》。这本书写于1997年,但一般概念在今天仍然有效。
从那本书中,我喜欢以下有关机器学习的正式定义:
如果计算机程序通过性能度量P 衡量的在任务T上的性能随着时间的推移随着经验E的提高而改善,则据说计算机程序将从经验E中学习执行任务T。
例如,必须下棋的人造游戏玩家(任务T)可以通过查看先前的下棋比赛或与导师对战来学习(体验E)。它的性能P可以通过计算对人类的获胜百分比来衡量。
让我们在另外两个示例中进行说明:
-
示例1:一个给定图像的系统,必须说巴拉克·奥巴马的脸是否出现在该图像中(泛化就像是Facebook的自动标记)。
-
示例2:给出了一条推文的系统会告诉它是正面还是负面的情绪。
-
示例3:给定某人的个人资料的系统分配一个分数,该分数代表该人支付信用贷款的可能性。
在示例1中,任务是检测何时巴拉克·奥巴马的脸出现在图像中。体验可能是一组图像,其中巴拉克·奥巴马(Barack Obama)的脸出现了,而其他图像则没有出现。性能可以用系统正确标记的新图像的百分比来衡量。
在示例2中,任务是分配推文的情感。体验可能是一组推文及其相应的情感。性能可以用我们的系统正确分类的新推文的百分比来衡量。
在示例3中,任务是分配信用评分。体验可以是一组用户配置文件及其相应的信用评分。可以将性能作为平方误差(预测分数与预期分数之间的差)进行度量。
为了使算法能够学习将输入转换为所需的输出,您必须提供所谓的训练实例或训练实例,它们在Mitchell的定义中定义为体验E。训练集是一组实例,这些实例将作为示例,机器学习算法将从中学习执行所需任务。很直观,不是吗?就像当您向小孩子展示如何投球时,您几次扔球向他展示如何做球,通过查看这些示例,他开始学习自己做球。
通常,每个训练实例都表示为一组固定的属性或特征。这些功能是表征每个实例的方式。例如,在示例1中,图像可以通过其每个像素的灰度级来表征。在示例2中,一条推文的特征可能是出现在该推文中的单词。在示例3中,信用记录可以由人员的年龄,工资,职业等表示。
在使用机器学习时,计算和选择合适的特征来表示实例是最重要的任务之一,我们将在本文的后面对此进行介绍。
机器学习算法的类别
在这一点上,我们不得不说说两大类的机器学习算法:监督学习或无监督学习算法。两种方法之间的主要区别在于我们向算法提供训练示例的方式,算法如何使用它们以及解决的问题类型。
监督学习
在监督学习的情况下,机器学习算法可以看作是必须将特定输入转换为所需输出的过程。
然后,机器学习过程必须学习如何将每个可能的输入转换为正确/所需的输出,因此每个训练示例都具有特定的输入和所需的输出。
在有关人造象棋玩家的示例中,我们的输入将是特定的棋盘状态,而输出将是该情况下的最佳运动。
根据输出的类型,我们有两种监督学习的子类型:
分类
当输出值属于离散集和有限集时,我们正在谈论分类。例2可以作为分类问题解决,其输出是一组有限的选项:正,负或中性。在这种情况下,我们的训练示例将如下所示:
回归
当输出值是一个连续的数字(例如概率)时,那么我们所说的是回归问题。示例3是一个回归,因为结果是0到1之间的数字,代表一个人偿还债务的可能性。在这种情况下,我们的训练示例将如下所示:
监督学习是机器学习算法中最受欢迎的类别。使用这种方法的缺点是,对于每个训练示例,我们都必须提供正确的输出,并且在许多情况下,这是非常昂贵的。例如,在情感分析的情况下,如果我们需要10,000个训练示例(推文),则必须用正确的情感(正面,负面或中性)标记每个推文。这将需要一群人来读取和标记每条推文(相当耗时且无聊的任务)。对于机器学习算法,这通常是一个非常常见的瓶颈:收集质量标记的训练数据。
无监督学习
第二类机器学习算法称为无监督学习。在这种情况下,训练示例仅需要作为算法的输入,而不是所需的输出。典型的用例是发现训练示例之间的隐藏结构和关系。一个典型的示例是聚类算法,在该算法中,我们学会查找相似的实例或实例组(集群)。例如:我们有一篇新闻报道,我们希望获得类似的推荐。一些聚类算法(例如K-means)仅通过查看输入就可以“学习”。
机器学习算法
好的,这是数学和逻辑开始起作用的时候。为了将输入转换为所需的输出,我们可以使用不同的模型。机器学习不是一种独特的算法,也许您听说过支持向量机,朴素贝叶斯,决策树或深度学习。那些是尝试解决相同问题的不同机器学习算法:学习将每个输入转换为正确的输出。
那些不同的机器学习算法使用不同的范例或技术来执行学习过程,并表示他们所学知识。
但是在继续讨论每种算法之前,一个共同的原则是,机器学习算法会尝试进行概括。也就是说,他们试图用最简单的理论(一种称为Occam剃刀的原理)来解释某些东西。每种机器学习算法,无论使用哪种范例,都将尝试创建最简单的假设(做出最少假设的假设)来解释大多数训练示例。
机器学习算法很多,但让我们简要地介绍三种最受欢迎的算法:
-
支持向量机:该模型试图在高维空间中构建一组超平面,从而尝试通过获取不同类别的最近实例之间的最大距离来分离不同类别的实例。这个概念直观上很简单,但是模型可能非常复杂且强大。实际上,对于某些领域,它是当今您可以使用的最好的机器学习算法之一。
-
概率模型:这些模型通常尝试通过用概率分布对问题进行建模来预测正确的响应。此类中最流行的算法也许是朴素贝叶斯分类器,它使用贝叶斯定理以及特征之间的强独立性假设。除了是简单但功能强大的模型之外,它们的优点之一是它们不仅返回预测,而且还返回确定性,这可能非常有用。
-
深度学习:基于众所周知的人工神经网络模型,是机器学习的新趋势。神经网络有一种连接主义的方法,它们试图(以非常简单的方式)模仿大脑的工作方式。基本上,它们由庞大的相互连接的神经元集(处理的基本单位)组成,并以不同的层次组织。简而言之,深度学习已经开发出了具有更深层次的新结构,并改进了学习算法,不仅可以尝试学习,还可以构建具有较高抽象水平的结构,以自动表示最重要的功能。
处理机器学习时的重要方面
同样,机器学习听起来像是一个美丽的概念,确实如此,但是其中涉及的某些过程并不是那么自动。实际上,在设计解决方案时,通常需要很多手动步骤。然而,它们对于获得体面的结果非常重要。其中一些方面是:
我应该使用哪种类型的机器学习算法?
有监督还是无监督?
您是否已标记数据?也就是说,输入及其相应的输出?在这种情况下,您可以应用监督学习算法。如果没有,也许无监督算法可以解决该问题。
分类,回归还是聚类?
这主要取决于您要解决的问题。如果要标记数据(在一组离散选项中分配标记),则分类可能是正确的选项。另一方面,如果您需要分配一个数字(例如分数),则回归可能是您的最佳选择。也许您需要根据用户在电子商务站点中正在浏览的内容向他们推荐类似的产品,在这种情况下,群集可能是您的最佳选择。
深度学习,SVM,朴素贝叶斯,决策树...哪个是最好的?
对我来说,答案是:没有一个。显然,深度学习和支持向量机已经证明它们在不同的应用程序中功能最强大,用途最广泛。但是要考虑到,根据特定的应用程序,某些机器学习算法可能比其他算法更好。只要看看他们的个人长处并尝试一下即可!
特征工程
特征工程是我们提取并选择最重要的特征以表示我们的训练实例和机器学习算法要处理的实例的过程。这个过程是机器学习最重要的方面之一(有时没有足够的信誉和重要性)。
请注意:如果您不为算法提供高质量的功能,则无论您是否使用最佳的机器学习算法,结果都会很糟糕。这就像试图在完全黑暗的环境中学习用眼睛阅读一样,无论您多么聪明,都无法做到这一点。
特征提取
为了向机器学习算法提供数据,通常必须将原始数据转换为算法可以“理解”的内容。该过程称为特征提取。通常,我们谈论的是将原始数据转换为特征向量。
在示例1中,我们如何向机器学习算法提供图像?
好吧,一种直接的方法是将图像转换为矢量,其中每个分量都是图像中每个像素的灰度值。因此,每个组件或特征将是介于0到255之间的数字,0是黑色,255是白色,范围是1到254之间,可能是灰色阴影。
这种方法可能有效,但如果我们提供更高级别的功能,也许会更好:
-
图像是否包含人的脸部?
-
什么是肤色?
-
眼睛是什么颜色?
-
脸上有头发吗?
-
…
这些是高级功能,不仅为每个像素的灰度级提供了更多的知识(算法的计算可以由其他机器学习算法完成!)。通过提供更高级别的功能,我们正在“帮助”机器学习算法提供更好的信息,以学习确定我或他人的脸部是否出现在图像中。
如果我们提供更好的特征提取:
-
我们将有更多的机会让我们的算法学习执行所需的任务。
-
我们可能需要更少的培训示例来学习。
-
结果,我们可以大大减少训练模型所需的时间。
功能选择
有时候(不是说很多),我们选择用来提供算法的功能可能没有用。例如,当尝试标记推文的情感时,我们可以将推文的长度添加为功能,写推文的时间等。这些功能可能有用或没有用,并且有自动方法找出其中最有用的。直观上,特征选择算法使用技术对每个特征进行评分,并根据该评分仅返回最有价值的特征。
要记住的另一重要事项是:避免使用庞大的功能集。可能会尝试将所有可能的特征添加到模型中,然后让算法学习。但这不是一个好主意,因为我们添加了更多的功能来表示我们的实例,所以空间的尺寸增加了,使其更加稀疏。凭直觉,随着我们获得更多功能,我们必须获得许多实例来代表相当数量的组合。这是一个非常普遍的问题,称为维数的诅咒,随着模型的复杂性增加,所需的训练示例数量呈指数增长,并且相信我,这是一个问题。
培训实例
因此,您必须向机器学习算法提供训练示例。根据您要解决的问题,我们可能在讲数百,数千,数百万或数十亿个培训示例。此外,保持示例的质量非常重要,如果将错误的示例提供给算法,获得良好结果的机会就会降低。
大量收集高质量数据来训练机器学习算法通常是一件昂贵的事情。除非您已经标记了数据,否则您可能必须自己手动标记数据或付钱给其他人这样做。尝试解决的一些工具是众包平台,您可以在其中找到工作所需的劳动力。同时引导是一种方法,力图使标记用自己的机器学习模型,以帮助您更有效。
有关训练示例的一般规则是:您可以收集的训练数据越多,获得的效果就越好。
测试示例和性能指标
在训练了机器学习算法之后,我们必须测试其性能。这是非常重要的,否则您将不知道您的模型是否真的学到了任何东西!
这个概念很简单,我们使用一个测试集,即训练集中未包含的一组实例。基本上,我们将每个测试示例输入到我们的模型中,看看它是否按预期运行。在监督学习分类的情况下,我们只需输入每个测试实例,然后检查输出是否符合我们的预期。如果我们的模型在95%的测试示例上返回正确的输出,则表示模型的准确性为95%。
重要的是要记住,实例的训练和测试集必须是不相交的,这是测试模型的泛化和预测能力的唯一方法。通过测量训练数据的准确性,您可能会得到很好的结果,但是在单独的测试集中进行测量时,结果会很差。该问题称为过拟合,即算法过拟合训练示例,并且预测能力较差。通常,避免这种情况的方法是尝试使用功能较少的简单模型,简化模型并使用更大,更具代表性的训练集。
准确性是最基本的指标,您还应该查看诸如Precision和Recall之类的其他指标,它们将告诉您算法在每个班级上的表现(在监督学习分类中使用时)。混淆矩阵是查看我们的分类算法在哪里“混淆”预测的好工具。
对于回归和聚类问题,您可以使用其他指标集来查看算法是否运行良好。
性能
在现实世界的应用程序中,如果必须在生产中部署解决方案,则必须构建一个强大而高性能的解决方案。对于机器学习应用程序,这可能是一项复杂的任务。首先,您必须选择机器学习框架,这并不容易,因为并非所有编程语言都具有强大的工具。Python和Scikit-learn是建立强大的机器学习框架的编程语言的典范。
选择了框架后,可能会出现性能问题。根据数据量,复杂性和设计的算法,运行训练过程可能需要大量的计算能力和内存。您可能必须进行多次培训,直到获得不错的成绩。此外,通常您可能需要重新训练模型以涵盖新实例并不断提高其准确性。
为了训练庞大的模型并在使用时获得快速的结果,我们通常谈论的是各种GB的RAM和多核计算机来并行化处理。
这些大多是实际问题,但是如果您想在生产中部署真正的机器学习解决方案,那么这些问题绝对重要。
最后的话
就是这样,简要介绍了什么是机器学习。这里没有涉及很多其他现实世界的应用程序,还有很多其他机器学习算法和概念需要讨论,但是我们让读者自己进行研究。
机器学习功能强大而又艰巨,本文所描述的困难和需要考虑的方面只是冰山一角。
通常需要一定的计算机科学背景,尤其是机器学习才能获得不错的结果。人们对最终解决之前要解决的许多困难感到非常失望。
这就是我们创建MonkeyLearn的原因,以使对应用于文本分析的机器学习技术的访问*化。为了避免重新发明*,并使每个软件开发人员或企业家都能快速获得实际结果。对于最终用户而言,这些是我们面临的主要挑战,从机器学习的复杂性到实际的可伸缩性问题,以至于仅使用即插即用的机器学习,这些问题都是最终用户的抽象。
喜欢点下关注,你的关注是我写作的最大支持