微软 Azure 机器学习(一)
原文:
annas-archive.org/md5/a97d8454fc892c5e06976d6083fbe5df
译者:飞龙
协议:CC BY-NC-SA 4.0
前言
你现在阅读这篇文章,可能是因为你意识到机器学习和高级分析,如预测分析的重要性。尽管全世界对拥有这些技能的人才的需求日益增加,但真正具备足够技能的数据科学家却非常稀缺,他们能够开发涉及机器学习和高级分析的应用程序,并从可用数据中创造真正的价值。
这种稀缺的原因在于,机器学习和数据挖掘领域曾经是博士和数学、统计学、编程等学科专家的领域。找到这样的独角兽真的很难。再次强调,预测分析这样的任务在历史上一直非常困难,即使是专家,即使他们没有遇到太多困难,也不觉得容易。这意味着新入行者需要多年的经验才能开始上手。
在这个现代时代,预测分析正处在工业化的边缘,因为它是维持和促进企业增长的关键。尽管“独角兽”数据科学家的稀缺似乎没有结束,但组织现在正在寻找解决方案来克服这个问题。领先的 IT 研究公司 Gartner 建议,在未来的日子里,将出现一种新的专业人才,被称为公民数据科学家。他们的出现可能会带来如此大的变化,以至于他们可能会以 5:1 的比例超过独角兽数据科学家。
你现在可能想知道,这些公民数据科学家是谁,他们从哪里来?他们是现有的开发者,来自商业分析师社区的人,以及可能的新毕业生,他们熟悉数据,对高级分析充满热情,并决心拓展自己,深入数据科学概念。他们将使数据科学民主化,并使高级分析的工业化成为可能。
所有这些都在发生,并将继续发生,原因只有一个:新工具和平台的到来,使得高级分析变得如此简单,并将数据科学视为一种商品。虽然这为这些供应商带来了巨大的机会,但也为正在采用这些技术的组织和专业人士带来了好消息。毫无疑问,Azure 机器学习在这一领域处于领先地位,并且微软战略性地向组织提供这项服务。
微软公司企业副总裁、Azure 机器学习负责人约瑟夫·西罗什(Joseph Sirosh)在 CITEworld 上发表的文章中描述了 Azure 机器学习:“这是构建预测模型并部署它们最快的方式。如果你打算在云上构建解决方案并创建应用程序,那么现在几乎不存在这样的工具。这样,你可以从数据中构建智能应用程序,然后作为 API 发布,这样你就可以轻松地将它们连接到任何企业应用程序——甚至是从移动端。我们正在使其足够简单,以至于高中生也能使用它。”
本书试图扩展这一愿景;由简单性驱动,它设定了尽快开始使用 Microsoft Azure Machine Learning 所需技能的目标。本书假设除了高中数学之外没有其他先决条件!
本书涵盖内容
第一章, 简介,为本书设定了背景,并介绍了机器学习、预测分析和 Azure ML 的整体概念。它通过其生命周期描述了一个预测分析项目。
准备就绪:进行背景工作
第二章, ML Studio 内部结构,详细解释了 ML Studio——Azure ML 的开发环境。
第三章, 数据探索和可视化,使您熟悉本章第一部分与数据探索和可视化相关的概念,然后使用 ML Studio 进行演示。
第四章, 在 ML Studio 中获取数据,描述了在 ML Studio 内部可用的不同数据输入和输出选项。
第五章, 数据准备,使您熟悉 ML Studio 中数据准备的不同选项,例如数据清洗、转换、特征选择等。
准备就绪:构建和部署预测模型
第六章, 回归模型,使您熟悉可用的不同回归算法,并通过逐步教程演示了不同回归模型的构建。
第七章, 分类模型,使您熟悉可用的不同分类算法,并通过逐步教程演示了不同分类模型的构建。
第八章, 聚类,解释了聚类,然后使用 ML Studio 和 K-means 聚类算法构建了一个模型。
第九章, 推荐系统,向您介绍推荐系统的概念以及 ML Studio 中可供您构建自己的推荐系统的选项。然后通过一个简单的示例引导您构建推荐系统。
第十章, 使用 R 和 Python 扩展功能,向您介绍如何使用 R 和 Python 脚本在 ML Studio 中集成您的代码。
第十一章, 将模型发布为 Web 服务,探讨了如何轻松地将模型发布到实验中,并使其作为 Web 服务 API 供他人使用。
将所学应用于实际问题
第十二章,案例研究练习 I,将一个分类问题作为案例研究练习提出。
第十三章,案例研究练习 II,将一个回归问题作为案例研究练习提出。
你需要这本书什么
为了与本书一起学习和实践概念,你需要以下内容:
-
在 Azure 上有一个账户(理想情况下)和一个订阅。即使没有订阅,你也可以免费使用 Azure ML 服务几天。
-
需要一个浏览器,例如 Internet Explorer,IE 10 或更高版本。
-
最后,当然需要一个互联网连接!
本书面向谁
本书旨在帮助那些想学习如何使用 Azure 机器学习的人。也许你已经对机器学习有些了解,但从未使用过 Azure 的 ML Studio,或者你可能是一个完全的新手。无论哪种情况,这本书都能让你快速上手。不需要任何高级数学、统计学或编程知识;高中数学就足够了!
惯例
在本书中,你会找到许多不同的文本样式,用于区分不同类型的信息。以下是一些这些样式的示例及其含义的解释。
文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称的显示方式如下:“这意味着azureml_main
入口点函数可以直接导入这些模块。”
代码块设置如下:
def azureml_main(dataframe1 = None, dataframe2 = None): #Get all the columns cols = dataframe1.columns.tolist() #Select columns with name starting with letter \'m\' dataframe1=dataframe1[[col for col in cols if col.startswith(\'m\')]] #Return the modified dataset return dataframe1
新术语和重要词汇以粗体显示。屏幕上看到的单词,例如在菜单或对话框中,在文本中显示如下:“基于过滤器的特征选择模块可以识别数据集中最重要的特征。”
注意
警告或重要注意事项以如下框的形式出现。
小贴士
小贴士和技巧看起来像这样。
读者反馈
我们始终欢迎读者的反馈。告诉我们你对这本书的看法——你喜欢什么或不喜欢什么。读者反馈对我们很重要,因为它帮助我们开发出你真正能从中受益的标题。
要向我们发送一般反馈,只需发送电子邮件至,并在邮件主题中提及本书的标题。
如果你在一个领域有专业知识,并且你对撰写或为本书做出贡献感兴趣,请参阅我们的作者指南www.packtpub.com/authors。
客户支持
现在你已经是 Packt 图书的骄傲拥有者,我们有一些事情可以帮助你从购买中获得最大收益。
下载本书的颜色图片
我们还为您提供了一个包含本书中使用的截图/图表的颜色图像的 PDF 文件。这些颜色图像将帮助您更好地理解输出的变化。您可以从www.packtpub.com/sites/default/files/downloads/Microsoft_Azure_Machine_Learning_ColorImages.pdf
下载此文件。
错误更正
尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在我们的某本书中发现错误——可能是文本或代码中的错误——如果您能向我们报告这一点,我们将不胜感激。通过这样做,您可以避免其他读者感到沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请通过访问www.packtpub.com/submit-errata
,选择您的书籍,点击错误提交表单链接,并输入您的错误详情来报告它们。一旦您的错误得到验证,您的提交将被接受,错误将被上传到我们的网站或添加到该标题的错误部分下的现有错误列表中。
要查看之前提交的错误更正,请访问www.packtpub.com/books/content/support
,并在搜索字段中输入书籍名称。所需信息将出现在错误更正部分下。
盗版
互联网上版权材料的盗版是一个持续存在的问题,涉及所有媒体。在 Packt,我们非常重视我们版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法副本,请立即向我们提供位置地址或网站名称,以便我们可以寻求补救措施。
请通过与我们联系,并提供疑似盗版材料的链接。
我们感谢您的帮助,保护我们的作者和提供有价值内容的能力。
询问
如果您对本书的任何方面有问题,您可以通过联系我们,我们将尽力解决问题。
第一章. 简介
欢迎来到预测分析和机器学习的世界!Azure Machine Learning使您能够通过应用机器学习进行预测分析。传统上,这一直是专家的领域。使用机器学习开发和部署预测建模解决方案从未简单易行,即使是对于专家来说也是如此。微软似乎已经通过这个新的基于云的服务消除了大部分痛苦,它允许您以最简单、最快的方式开发和部署预测解决方案。即使是初学者也会觉得它既简单又容易理解。
本章在为本书的其余部分设定背景的同时,将从宏观的角度介绍相关主题。
预测分析简介
预测分析是分析的一个细分领域,它涉及对未知事件的预测,这些事件可能在未来发生,也可能不会发生。一个例子是在航班起飞前预测航班是否会延误。您不应该误解预测分析只处理未来事件。它可以涉及任何相关事件,例如,在交易已经发生后,您需要预测一笔特定的信用卡交易是否为欺诈。在这种情况下,事件已经发生。同样,如果您被给出一些土壤的特性,并且需要预测土壤的某个其他化学特性,那么您实际上是在预测一个已经存在的事物。
预测分析利用了数学、统计学、数据挖掘和机器学习的技术和工具,其中机器学习在其中扮演着非常重要的角色。在一个典型的预测分析项目中,您通常会以迭代的方式经历不同的阶段,如下面的图所示;
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_01_01.jpg
问题定义和范围
在开始之前,您需要了解;业务需求是什么,他们寻求的解决方案是什么?这可能会引导您找到一个位于预测分析中的解决方案。然后,您需要将业务问题转化为分析问题,例如,业务可能对提高现有客户的目录销售额感兴趣。因此,您的问题可能被转化为预测一个客户在知道他们的人口统计信息(如年龄、性别、收入、位置等)的情况下会购买多少个商品,或者根据他们过去几年的购买历史预测商品的价格。在定义问题时,您还需要定义项目的范围;否则,可能会导致一个永无止境的过程。
数据收集
解决方案从数据收集开始。在某些情况下,数据可能已经在企业存储或云中,你只需要利用它。在其他情况下,你可能需要从不同的来源收集数据。这也可能要求你在数据收集过程中做一些ETL(提取、转换和加载)工作。
数据探索和准备
在你拥有所有需要的数据后,你可以继续深入理解它。你通过数据探索和可视化来实现这一点。这还可能涉及一些统计分析。
现实世界中的数据通常很杂乱。你应该始终检查数据质量以及它是否符合你的目的。你必须处理缺失值、不适当的数据等问题。再次强调,数据可能不会以你需要的格式出现,以便进行预测。因此,你可能需要进行一些预处理,以获得所需的数据形状。通常,人们称之为数据清洗。在此之后,你可以选择或提取那些能引导你进行预测的确切特征。
模型开发
数据准备完成后,你选择算法并构建模型进行预测。这正是机器学习算法大显身手的地方。从准备好的数据中选取一部分用于训练模型,然后你可以选择用另一部分或剩余的数据来测试你的模型,以评估其性能。在评估性能时,你可以尝试不同的算法,并选择表现最好的一个。
模型部署
如果是单次分析,你可能不会费心部署你的训练模型。然而,通常情况下,模型做出的预测可能会被用于其他地方。例如,对于一家电子商务公司,预测模型可能会向访问网站的潜在客户推荐产品。在另一个例子中,在你构建了一个预测年度销售量的模型之后,不同地区的不同销售部门可能需要使用它来做出他们所在区域的预测。在这种情况下,你必须部署你的训练模型作为网络服务或以其他类型的生产方式,以便其他人可以通过自定义应用程序、Microsoft Excel或类似工具来使用它。
对于大多数实际案例,这些阶段永远不会孤立存在,总是以迭代的方式进行工作。
本书概述了数据探索和准备中可用的不同常见选项,重点关注模型开发和部署。实际上,模型开发和部署是 Azure 机器学习的核心服务,而数据探索和准备的选项有限。你可以使用其他 Azure 服务,如HDInsight、Azure SQL 数据库等,或者使用其外的编程语言来完成同样的工作。
机器学习
萨缪尔·亚瑟,被认为是机器学习的之父,将其定义为一种研究领域,它赋予计算机在没有明确编程的情况下学习的能力。为了简化,机器学习是一个科学学科,它探索了从数据中学习算法的构建和研究。这些算法通过从示例输入中构建模型来操作,并使用该模型进行预测或决策,而不是严格遵循静态的程序指令。
为了说明,假设你有一个包含足够多的人的年龄、教育、性别和年收入信息的数据集。假设你对预测某人的收入感兴趣。因此,你将通过选择机器学习算法并使用数据集来训练模型来构建模型。在你训练好模型之后,如果你提供年龄、教育和性别数据,它就可以预测新人的收入。为了进一步解释,你没有明确编程,例如,如果一个男性的年龄大于 50 岁,并且他是否有硕士学位,那么他每年可能会赚 10 万美元。然而,你所做的是只是选择了一个通用算法,并给它提供了数据,这样它就可以发现不同变量或特征(在这里,年龄、性别和教育)与目标变量收入之间的所有关系。因此,算法从数据中学习并因此得到训练。现在,有了训练好的算法,如果你知道其他变量,你就可以预测某人的收入。
上述示例是一个典型的机器学习问题,其中存在一个目标变量或类别;在这里,那就是收入。因此,算法从训练数据或示例中学习,然后在训练之后,算法对新案例或数据点进行预测。这种学习被称为监督式机器学习。它的工作原理如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_01_02.jpg
另一种机器学习类型不存在目标变量或训练数据或示例的概念,因此这里的预测也是不同类型的。再次考虑包含足够多的人的年龄、性别、教育和收入数据的相同数据集。你必须运行一个有针对性的营销活动,所以你必须将人们分成三个群体。在这种情况下,你可以在数据集上使用不同类型的通用机器学习算法,该算法会自动将人们分成三个组或聚类。这种机器学习被称为无监督式机器学习。
还有另一种机器学习类型会做出推荐;记得亚马逊如何推荐书籍或 Netflix 如何推荐电影——这可能会让你惊讶于他们如何神奇地了解用户的喜好或选择。
尽管机器学习并不局限于这三种类型,但为了本书的范围,我们将将其限制在这三种类型之内。
再次强调,本书的范围以及当然的 Azure 机器学习将机器学习的应用仅限于预测分析领域。你应该意识到机器学习并不局限于这一点。机器学习的根源在于人工智能,并推动了各种应用的发展,其中一些你每天都在使用,例如,Bing 或 Google 这样的网络搜索引擎就是由机器学习驱动的,同样还有个人数字助理,如微软的 Cortana 和苹果的 Siri。如今,无人驾驶汽车也成为了新闻焦点,它们使用了机器学习。因此,这样的应用是数不胜数的。
机器学习问题的类型
以下是一些通过机器学习解决的问题的常见类型。
分类
分类是机器学习问题的一种,其中输入被分为两个或更多类别,学习器产生一个模型,将未知输入分配到这些类别或标签中的一个(或多个标签分类)。这通常以监督方式处理。垃圾邮件检测是分类的一个例子,其中输入或示例是电子邮件(或其他)消息,类别是“垃圾邮件”和“非垃圾邮件”,预测新电子邮件是否为垃圾邮件或非垃圾邮件的模型基于示例数据。
回归
回归问题涉及预测目标变量对于给定数据集中一个或多个特征或相关变量的数值或连续值。一个简单的例子可以是,你有过去 5 年内你所在地区不同房产支付的历史价格数据。在这里,支付的价格是目标变量,而房产的不同属性,如总建筑面积;房产类型,如公寓或半独立式房屋;等等,是不同的特征或变量。回归问题可能是预测市场上新上市房产的价格。
聚类
聚类是一种无监督学习问题,它作用于没有标签或类变量的数据集。这类算法将所有数据分组到不同的簇中,例如 1、2 和 3,这些簇在之前是未知的。聚类问题在本质上与分类问题不同。分类问题是一个监督学习问题,其中你的类别或目标变量是已知的,用于训练数据集,而在聚类中,没有标签和训练数据的概念。它作用于所有数据,并将它们分组到不同的簇中。
因此,简单来说,如果你有一个数据集,并且有一个类别/标签或目标变量作为分类变量,你必须根据给定的数据集(例如)预测新数据集的目标变量,那么这是一个分类问题。如果你只是得到一个没有标签或目标变量的数据集,并且你必须将它们分成n个簇,那么这是一个聚类案例。
常见的机器学习技术/算法
以下是一些非常流行的机器学习算法:
线性回归
线性回归可能是最流行且经典的用于回归问题的统计技术,用于从一个或多个变量或特征中预测连续值。此算法使用线性函数,并优化最适合训练数据的系数。如果你只有一个变量,那么你可以将此模型视为最佳拟合数据的直线。对于更多特征,此算法优化最佳超平面以拟合训练数据。
逻辑回归
逻辑回归是一种用于分类问题的统计技术。它建立了依赖变量或类别标签与独立变量(特征)之间的关系,然后对分类的依赖变量或类别标签进行预测。你可以将这个算法视为分类问题的线性回归。
基于决策树的集成模型
决策树是一系列问题或决策及其可能后果的集合,这些内容以分层的方式排列。虽然简单的决策树并不十分强大,但由平均结果组成的树集合可以非常有效。这些是集成模型,它们的不同之处在于决策是如何采样或选择的。随机森林或决策森林以及提升决策树是两种非常流行且强大的算法。基于决策树的算法可以用于分类和回归问题。
神经网络和深度学习
神经网络算法灵感来源于人类大脑的工作方式。它构建了一个计算单元、神经元或节点的网络。在一个典型的网络中,有三个节点层:首先,输入层,中间层或隐藏层,最后是输出层。神经网络算法可以用于分类和回归问题。
一种特殊的神经网络算法,其中除了输入层和输出层之外,还有超过三个层,以及超过一个隐藏层,被称为深度学习算法。这些算法因为其显著的结果而越来越受欢迎。
虽然 Azure 机器学习能够进行深度学习(卷积神经网络——本书撰写时的深度学习模型的一种),但本书不包括它。
Azure 机器学习简介
微软 Azure 机器学习或简称 Azure ML 是一个完整的云服务。它可以通过浏览器 Internet Explorer (IE) 10 或其后续版本访问。这意味着你不需要购买任何硬件或软件,也不需要担心部署和维护。
因此,它是一个完全托管的云服务,使分析师、数据科学家和开发者能够将预测分析构建到他们的应用程序中或作为独立分析。它以最简单的方式将机器学习变成了一种服务,并允许你通过拖放来可视化构建模型。Azure ML 帮助你深入了解大量数据集,通过将其他大数据集(如处理 Azure 服务的 HDInsight [Hadoop])集成到机器学习中,带来了云的所有好处。
Azure ML 由一套相当不错的机器学习算法提供支持。微软声称这些是最先进的算法,来自微软研究院,其中一些实际上为旗舰产品提供动力,例如 Bing 搜索、Xbox、Cortana 等等。
ML Studio
Azure 机器学习工作室或简称 ML Studio 是 Azure ML 的开发环境。它是完全基于浏览器的,因此可以通过现代浏览器(如 IE 10 或其后续版本)访问。它还提供了一个协作环境,你可以在这里与他人分享你的工作。
ML Studio 提供了一个可视化的工作空间,可以轻松且交互式地构建、测试和迭代预测模型。你可以在其中创建工作空间并创建实验。你可以将 ML Studio 中的实验视为一个项目,在这个项目中,你将数据集和分析模块拖放到一个交互式画布上,将它们连接起来形成一个预测模型。通常,你会迭代模型的设计,编辑实验,如果需要的话保存副本,然后再次运行它。当你准备好时,你可以将你的实验作为 Web 服务发布,这样其他人或其他应用程序就可以访问它。
当你的需求不能通过拖放模块在视觉上满足时,ML Studio 允许你通过在 R 或 Python 脚本中编写代码来扩展你的实验。它还提供了一个模块,允许你使用 SQL 查询来玩转数据。
摘要
你刚刚完成了第一章,这不仅介绍了预测分析、机器学习和 Azure ML,还为本书的其余部分设定了背景。你从探索预测分析开始,了解了典型预测分析任务的各个阶段。然后,通过获取一些相关知识,你对机器学习有了高层次的理解。你还了解了机器学习解决的一些常见问题类型和一些流行的算法。之后,你对 Azure ML 和 ML Studio 有了非常高级的概述。
下一章全部关于 ML Studio。它向您介绍了 Azure ML 的开发环境,并对 ML Studio 的不同组件进行了概述。
第二章 ML Studio 内部结构
在处理预测分析模型时,您通常遵循不同的步骤,例如从一个或多个来源拉取数据,探索和准备数据,或者应用不同的算法以获得所需的输出。然后,您对其进行测试并改进。通常,这是一个迭代的过程。一旦您对模型满意,您就会找到方法使其可以部署到生产环境中,其他人或应用程序可以消费或使用您开发出的模型。
要执行前面的任务,您需要一个具有正确工具的环境。ML Studio 为您提供开发和应用预测模型所需的一切。
在您了解如何创建 Microsoft 账户和 Azure ML 工作区之后,您将开始探索 ML Studio。然后,您将了解 ML Studio 的不同部分,并学习如何创建一个实验。您还可以简要了解如何在 ML Studio 中协作地处理其他项目。本章旨在让您熟悉环境,而无需进行任何实际工作,这是接下来几章的内容。
ML Studio 简介
ML Studio 为您提供了一个交互式可视化工作区,可以轻松构建、测试和迭代预测分析模型。
您可以将数据集和分析模块拖放到一个交互式画布上,将它们连接起来形成一个实验,然后将它提交给 ML Studio 以运行或执行。要迭代模型设计,您编辑实验,如果需要的话保存一个副本,然后再次提交。
对于此操作,不需要编程;通过视觉连接数据集和模块来构建您的预测分析模型就足够了。然而,如果您需要比 ML Studio 中默认可用的视觉功能更多的功能,您可以编写R或Python代码来获得所需的结果。R 或 Python 编程并不是使用 ML Studio 的绝对必须。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_01.jpg
https://azure.microsoft.com/en-gb/documentation/articles/machine-learning-what-is-ml-studio/
在您开始使用 ML Studio 之前,您需要为 Microsoft Azure 获取一个订阅并登录到 ML Studio。以下部分将引导您完成这个过程,如果您不熟悉它的话。
开始使用 Microsoft Azure
涉及到Microsoft Azure的细节超出了本书的范围。然而,以下小节详细介绍了通过创建账户和开始订阅来开始使用它的步骤。
Microsoft 账户和订阅
如果您还没有 Microsoft 账户,您需要通过访问www.microsoft.com/account
来创建一个。这个 URL 可能会在未来发生变化,如果这样的话,您只需在网上搜索Microsoft Account来找到正确的 URL。
在撰写此书时,如果你是首次注册,Microsoft 为你提供一个月的免费试用和 200 美元的信用额度,用于在 Azure 上购买服务,如果你只是需要跟随本书中的示例并仅使用 ML Studio,这已经足够了。
一旦你成功登录,你可以访问manage.windowsazure.com/
以找到通过 Azure 提供的服务。
创建和管理 ML 工作区
你可以在 Azure 服务面板的左侧滚动,并点击机器学习。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_02.jpg
要在机器学习中创建一个项目,请按照以下步骤操作:
-
再次点击创建一个 ML 工作区选项。
-
在快速创建页面,输入你的工作区信息。
备注
注意,工作区所有者选项是你的 Microsoft 账户(
name@outlook.com
)或组织账户。 -
点击创建一个 ML 工作区选项。
-
在创建 ML 工作区后,你将在机器学习页面上看到它列出来,如下面的截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_03.jpg
你可以创建多个工作区,并从该区域管理它们。点击已创建的工作区,它将带你去其仪表板页面,在那里你还可以找到配置它的选项。然后,点击在工作室中打开链接进入 ML Studio。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_04.jpg
你也可以直接使用studio.azureml.net/home
进入 ML Studio。
在 ML Studio 内部
你通常会到达包含指向不同资源链接的 ML Studio 主页,包括文档和快速入门视频。
除了 ML Studio 主页外,你还会在屏幕左侧找到以下标签页:
-
实验:这些是已经创建、运行并保存的实验
-
Web 服务:这是你已发布的实验列表
-
数据集:这是所有已上传或从实验中保存的数据集的集合,包括所有样本数据集
-
训练模型:这是所有训练模型的列表
-
设置:这是一系列你可以用来配置你的账户和资源的设置
实验
您可以将实验视为在 ML Studio 中执行的任何分析——它可以是简单的,例如简单的统计分析,也可以是复杂的预测分析。ML Studio 中的实验是按层次连接的模块集合。模块是一个封装了 ML Studio 中提供的机器学习库并执行机器学习场景中常见任务的单元。上传到 ML Studio 后的数据集也可以作为模块用于实验。您只需将模块拖放到实验画布上,并将一个模块的输出端口可视地连接到另一个模块的输入端口,即可构建您模型的流程。模块可能有一个或多个输入端口,或者根本没有输入端口。然而,它必须至少有一个输出端口。您可以将模块视为一个可能接受输入并为每个输出端口生成数据集的块。
您可以在一个工作区中创建多个实验。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_05.jpg
创建和编辑实验
要创建一个新的实验,请点击屏幕左侧底部的**+ NEW按钮,然后选择空白实验**。将出现一个新的实验。
当您创建一个新的实验时,您将看到以下视图。界面包括模块面板、实验画布、属性面板以及屏幕顶部、底部和远左侧的各种菜单和控制。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_06.jpg
在编辑实验时,屏幕看起来类似于以下屏幕截图。点击模块将显示实验画布右侧的属性面板中的参数——您可以在该面板中查看和修改参数。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_18.jpg
要检查屏幕上出现的各种选项,请按照以下步骤操作:
-
点击屏幕上的图标以返回列表或设置。
-
扩展拖放。
-
点击**<**图标以折叠数据集和模块面板,如图所示的前一个屏幕截图。
-
点击**>**图标以折叠属性面板,如图所示的前一个屏幕截图。
-
在属性面板中修改所选模块的属性。
-
查看所选数据集或模块的描述。
-
点击这些按钮以保存、运行和发布实验。
要缩放和移动实验画布,您可以使用页面底部的控件。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_08.jpg
左侧的滑动条可以放大和缩小实验画布。您可以点击**-和+**按钮或使用鼠标滑动条左右移动。
点击1:1按钮将实验恢复到实际大小;您也可以在键盘上输入9来实现。1:1按钮右侧的按钮将实验缩放到适合画布;您也可以在键盘上输入0来实现。
运行实验
当你点击实验画布下方的运行按钮时,实验将被提交到 ML Studio 进行执行。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_09.jpg
提交实验后,你可以点击实验画布下方的刷新按钮,以更新每个模块在实验执行过程中的状态。模块上的状态图标表示模块的状态信息(数据集不显示状态指示器)。让我们看一下以下表格:
当所有模块都显示绿色勾选标记,表示所有模块都成功执行,或者当某个模块显示红色 X,表示它已失败时,实验即完成。如果模块失败,实验将终止,实验中的其他模块可能不会执行。
一旦模块执行完毕,你就可以查看任何模块的结果。为此,右键单击模块的输出端口,并选择可视化选项。你可以查看模块的输出或将输出保存为数据集以在其他实验中使用。如果你保存它,那么它将作为保存的数据集在 ML Studio 中可用。
如果模块失败,你可以检查日志。这些日志对于包含在向微软提交的错误报告中可能很有帮助。选择模块时,可以在属性面板中找到输出和错误日志的链接。你也可以通过右键单击模块并选择查看日志选项来访问它们。
实验运行后,你可以修改它并再次运行。编辑实验后,你可以点击实验画布下方的保存按钮来保存你的工作,或者你可以点击另存为选项以不同名称保存实验的副本。当你准备好再次运行实验时,点击运行选项。你保存或运行的每个实验副本都将列在 ML Studio 默认视图中的实验列表中。
创建和运行实验 – 自己动手做
现在你已经对实验有了足够的了解,让我们创建并运行一个简单的实验:
-
通过点击屏幕左侧底部的**+ 新建按钮,然后选择黑色实验**选项来创建一个新的实验。
-
在新实验的画布上,将新项目命名为Ch-2。
-
将屏幕左侧的已保存数据集模块展开,并将名为成人人口普查收入二分类数据集的第一个数据集拖动到画布中心。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_11.jpg
-
收起已保存数据集模块并展开统计函数模块。然后,将描述性统计模块拖动到画布上。
-
将成人人口普查收入二分类数据集模块的输出端口连接到描述性统计模块的输入端口。
-
点击屏幕底部的运行按钮。它应该没有错误标记,以绿色勾号标记描述性统计模块,如下面的截图所示:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_12.jpg
实验运行后,它将自动保存。现在您可以退出工作空间了。在此阶段,我们并不关心调查实验的结果,您将在随后的章节中学习。
工作空间作为协作环境
工作空间允许通过将数据、模块和实验汇集在单一位置以供共同使用,使团队能够共同处理常见项目。工作空间让用户能够安全地共享想法和资源。您可以成为多个工作空间的成员,并且可以轻松地在它们之间切换。
作为工作空间的所有者,您可以通过点击屏幕左侧的设置图标,然后从顶部选项卡中选择用户来邀请其他人加入工作空间。您可以通过添加他们的 Microsoft 账户来邀请其他人加入工作空间。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_02_13.jpg
一旦您成功添加了其他用户,他们可以像您作为所有者一样使用相同的工作空间,除非您赋予他们所有权权限,否则他们不能邀请其他人。
一个用户可以是一个或多个工作空间的所有者或用户。
注意
注意,工作空间可以被多个用户共享和拥有,但账单仅向创建工作空间的用户收取。
摘要
实际上,ML Studio 是Microsoft Azure 机器学习!如果您正在进行预测分析,ML Studio 提供了一个平台,用于开发、测试和部署的一切——只需通过鼠标点击即可实现。
在本章中,您从创建 Microsoft 账户和创建 ML 工作空间开始。然后,您从内部探索了 ML Studio。您继续在 ML Studio 中创建一个简单的实验,并快速探索了 ML Studio 如何作为一个协作环境与其他人一起工作。
现在您已经了解了 ML Studio,在下一章中,您将学习如何使用 ML Studio 进行数据探索和数据可视化。
第三章:数据探索与可视化
在你对数据集进行分析并从中找到结果之前,你需要了解数据。你可以通过数据探索和可视化来实现这一点。ML Studio 提供了一个非常基本的选项来做这件事,但提供了最基本的信息。要使用这个工具并了解数据,你需要熟悉一些基本概念,例如数据集中的平均值、标准差、变量或特征,以及基本的绘图技术,如直方图、箱线图、散点图等。本章的第一部分将使你熟悉这些概念,然后你将发现如何在 ML Studio 中使用这些概念来应用于一个示例数据集。如果你是从业者或熟悉统计学,可以自由跳过基本概念部分,直接进入下一部分。
基本概念
以下是一个非常简单的数据集,包含四个特征或变量:姓名、年龄、性别和每月收入(美元$)。数据集也可以称为一组观测值。在大多数地方,包括本书中,术语“特征”和“变量”是互换使用的。让我们看一下以下表格:
数据集中的行或记录在机器学习环境中也被称为示例。这个数据集中有 10 个示例。在这里,姓名列代表观测单位——被数据描述的单位,人们对其进行分析。因此,你可以说人员 A具有以下特征:20 岁,男,2000 美元。
一个特征可以是数值型或分类型。数值型特征包含数值,例如在这个例子中的年龄和每月收入($)。你可以对数值型特征应用数学运算。分类型特征通常包含一组类别的字符串值。例如,性别可以是两个类别,如这个数据集所示——男或女。在某些情况下,分类型特征也可以假设数值,例如,你可能喜欢用数字0来表示男,用数字1来表示女。因此,特征性别将具有 0 和 1 的值,但它仍然是一个分类型特征或变量。
平均值
平均值是数字的平均值。计算很简单:将所有数字加起来,然后除以数字的数量。换句话说,它是总和除以计数。
例如,五个数值:5、18、37、20 和 85 的平均值是:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_26.jpg
现在让我们更正式一些,你可以将样本的平均值,即算术平均值,表示为:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_04.jpg
它是样本值的总和除以样本中的项目数:µ
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_05.jpg
现在,你可以找出数据集中年龄的平均值(参考表 3.1)。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_06.jpg
中位数
中位数是在排序后的数字列表中的中间数。如果你有这些数字:5, 18, 37, 20, 和 85。要找到中位数,按升序排列它们:5, 18, 20, 37, 和 85。正如你可以看到的,中间的数字位于第 3 位,这里有 5 个数字。这里的中位数是 20。
在一个计数为偶数的数字集中,例如 10,中位数将是中间两个数的平均值,所以位于第 5 和第 6 的位置。
现在,你可以找出数据集中年龄变量的中位数是什么(参考表 3.1)。按以下顺序排列它们:
20, 27, 29, 31, 33, 36, 42, 45, 55, 和 59
这里中位数可以这样计算:(33 + 36)/2 = 69/2 = 34.5。
标准差和方差
标准差是方差的平方根。通常用希腊字母 sigma,σ表示,方差表示为σ2。你现在可能想知道,方差,或σ2,是如何计算的。它是从平均值到平方差的平均值。以下图表提供了计算方差和标准差的数学公式:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_07.jpghttps://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_08.jpg
如果你计算数据集中年龄变量的标准差(参考表 3.1),你会发现答案是 12.4637。
方差和标准差解释了数据是如何围绕平均值分布的。当方差较大时,表明数据在平均值周围分布得更广。标准差显示了平均值,平均来说,一个值与平均值相差多少。因此,在数据集(参考表 3.1)中,每个值平均与平均值相差 12.4637,而平均值是 37.7。
将所有数据集合并,ML 工作室可以展示以下统计信息:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_01.jpg
注意,这里的Min表示最小值,Max表示最大值。因此,最大月收入是 7200,最小年龄是 20。Unique Values变量显示了该特征有多少唯一值,例如,对于Gender,有两个:男性和女性。Missing Values变量标识了值不存在于特征中的案例数量。尽管它被包括在这里,但观察单位(在此称为Name)在分析期间不包括。
理解直方图
直方图通过不同高度的条形图直观地显示了数据的分布。你可以考虑数据集(参考表 3.1),并想知道年龄是如何分布的。你可以将所有年龄分成两组或两个区间。让我们看一下以下表格:
因此,你将得到年龄的直方图,有两个区间,如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_02.jpg
同样,月收入(参见表 3.1)的直方图,有五个区间,看起来可能如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_03.jpg
箱线和须图
箱线图是另一种图形化展示数据分布的方法。它显示了数据的三个四分位数,分别是 Q1、Q2 和 Q3,分别位于箱子的底部、中部和顶部。考虑表 3.1 中的数据集,四分位数将如下所示:
-
Q1 = 25th percentile = 29.5
-
Q2 = 中位数(50th percentile)= 34.5
-
Q3 = 75th percentile = 44.25
根据这些值,可以计算出 IQR(四分位距)为Q3 – Q1,以及下边界或下须可以计算为Q1 – 1.5 * IQR。
如果最小值大于Q1 – 1.5 * IQR,则下边界或下须 = 最小值。因此,在我们的例子中,我们考虑下边界或下须 = 20。
上边界或上须 = Q3 + 1.5 * IQR
如果最大值小于Q3 + 1.5 * IQR,则上边界或上须 = 最大值。在我们的例子中,我们考虑上边界或上须 = 59。
让我们看一下以下图表:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_09.jpg
在箱线和须图中,如果任何四分位数之间的距离较短,则数据在该区域聚集;如果距离较长,则表示该区域的数据分布更广。在前面的图中,Q2 是最短的,这意味着该四分位数的数据点更紧凑,而 Q4 较长,表示该区域的数据点分布更广。
异常值
任何落在上下须之外的值都称为异常值。在图表中,这些以简单的点表示,如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_21.jpg
散点图
散点图是两组变量图形表示。数据以点集的形式显示在二维空间中,一个变量投影在x轴上,另一个在y轴上。以下是一个散点图,其中年龄在x轴上,月收入在y轴上(参见表 3.1 中的数据集):
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_10.jpg
为了说明,我们已将x轴的一个点标记为55,将y轴的一个点标记为6500。因此,这代表了二维空间中年龄和月收入的价值。如果你从该点垂直画一条垂线到x轴,它会触及 55;如果你从y轴的点水平画一条垂线,它会触及 6500。
散点图直观地显示了两组数据之间的关系。
ML Studio 中的数据探索
现在,是时候应用这些概念,并使用 ML Studio 开始数据探索和可视化了。你将使用一些默认提供的样本数据集,并进行一些基本的探索。
可视化汽车价格数据集
汽车价格数据(原始)模块在已保存数据集下的左侧模块调色板中可用。这个数据集是关于汽车的数据,根据它们的制造商和型号区分,包括价格和特征,如气缸数、MPG 以及保险风险评分,这是精算师所知的符号化。如果符号化的值为*+3*,这表示汽车有风险;如果值为*-3*,则表示汽车可能非常安全。
在模块调色板中展开已保存数据集部分。将**汽车价格数据(原始)**模块拖到画布上。要获取数据的可视化图表,请按照以下步骤操作:
-
右键单击输出端口。
-
点击可视化。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_11.jpg
可视化窗口将以弹出窗口的形式显示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_13.jpg
你可以在可视化窗口中找到以下信息:
-
总共有 205 行和 26 列。
-
它显示了数据的前 100 行。
-
在统计区域,当你点击任何列时,它会在屏幕右侧显示基本统计信息:平均值、中位数、最小值、最大标准差值、唯一值的数量和缺失值的数量。它还显示了所选列的特征类型。
-
在可视化区域,屏幕底部右侧是所选特征图表区域。点击特征列上的任何位置,以查看该列的图表。
直方图
任何特征,无论是数值还是字符串,都可以以直方图的形式显示。这是屏幕上默认出现的图表。在可视化窗口中,点击驱动轮列,你可以找到以下直方图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_14.jpg
当你点击一个数值变量,例如价格,你会找到以下图表:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_15.jpg
在前面的图表中,价格值以科学记数法显示,但如果你将鼠标悬停在任何一项上,你可以在工具提示中看到实际值。例如,如果你将鼠标悬停在1.3e+4上,你会看到值13174.4。
在图表中,箱线图的大小设置为默认值 10。然而,你可以更改它,以便更好地理解图表。在之前的图表中,将箱线图更改为20,然后在键盘上按Tab键以找到更改后的图表。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_16.jpg
当存在较大值范围时,有时会使用对数刻度,以便更好地表示。点击价格对数刻度复选框,以找到以下修改后的图表:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_18.jpg
箱线图
虽然直方图可以从数值和字符串变量中创建,但箱线图只能从数值变量中创建。当您在视图部分单击箱线图的小图标时,您可以在可视化窗口的顶部列中看到所有可以表示为箱线和须线图的列。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_20.jpg
现在,单击价格列,并注意箱线图中的异常值,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_22.jpg
比较特征
您可以选择一个特征并与另一个特征进行比较。如果两个特征都是数值型(并且未标记为标签),则比较将显示为散点图。如果任一特征是非数值型(字符串),则比较将显示为箱线图。
单击价格部分,然后在图表区域中选择比较到下拉列表中的make。注意图中不同制造商的价格分布。make列包含不同制造商的名称。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_23.jpg
现在,您可以尝试比较两个数值特征。选择价格列,然后将其与normalized-losses进行比较。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_24.jpg
一个快照
您可以通过单击图表右上角的快照图标来创建图表的快照。这将创建当前图表的图像,并将其显示在图表的右侧,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_03_25.jpg
您可以创建任意数量的快照——它们将依次显示在图表的右侧。要关闭快照,请单击图像右上角的X符号。
亲自动手
能源效率回归数据模块是 ML Studio 中默认可用的另一个示例数据集,位于已保存数据集部分。使用数据集进行以下操作:
-
可视化数据集
-
查找行数和列数
-
查找所有数值和字符串特征
-
查找基本统计信息,例如平均值、标准差、缺失值等
-
为加热负荷特征绘制直方图
-
为冷却负荷特征绘制箱线图
-
将加热负荷特征与冷却负荷特征进行比较,并观察散点图
摘要
您刚刚完成了一个重要的章节。您从探索统计学的基本概念开始,例如平均值、标准差,以及基本可视化技术,例如直方图、箱线和须线图以及散点图。然后,您通过在 ML Studio 中可视化数据集来探索数据集。在 ML Studio 的可视化弹出窗口中,您找到了数据集的基本统计报告。然后,您使用直方图和箱线图在图表中绘制了特征。您还能够在一个图表中比较两个特征。
当你需要进行任何数据分析时,你需要数据和需要从不同来源导入数据。在下一章中,你将探索你可以将数据导入 ML Studio 的不同方法,以及从 ML Studio 导出数据的方法。
第四章 在 ML Studio 中获取数据
对于任何数据分析,您都需要数据作为输入。数据分析生成结果作为数据集,需要存储以供将来使用。ML Studio允许您以多种不同的格式导入和导出数据。您可以使用Reader
模块从外部源导入 ML Studio 中的数据集,您可以使用Writer
模块导出数据集。您还可以分别下载和上传不同格式的数据集到您的 PC。
ML Studio 支持多种数据格式。内部数据格式,数据表(DotNetTable),主要用于在实验内部模块之间移动数据。当您从外部源将数据导入 ML Studio 时,目前支持的数据格式有 ARFF、CSV、Hive Table、SVMLight、Text 和 TSV。让我们看看以下术语列表:
-
ARFF: 这是Weka定义的机器学习数据格式。属性-关系文件格式(ARFF)文件是一个 ASCII 文本文件,它描述了一组共享属性的一组实例。
-
CSV: 这是一个文本文件,其中数据以表格格式存储,不同记录由一行分隔,值(列)由逗号分隔。
-
TSV: 这是一个类似于 CSV 的文本文件,其中数据以表格格式存储,不同记录由一行分隔,值(列)由制表符分隔。
-
Hive Table: 这是通过Hive可访问的Hadoop数据表。
-
SVMLight: 这包含了SVMLight软件的文件格式训练示例。
-
文本: 这是一个纯文本文件。
在 ML Studio 中获取数据
ML Studio 允许您从不同的来源导入数据。您可以从您的 PC 上传文件,或者通过Data Reader
模块从外部源导入数据。
从 PC 上传数据
您可以按照以下步骤从您的 PC 上传数据集到 ML Studio:
-
前往 ML Studio 创建实验或前往现有的实验。
-
点击页面左下角的**+NEW图标,然后点击DATASET**,然后点击FROM LOCAL FILE。
-
在您点击图标后,将显示Upload a new dataset对话框。
-
点击浏览选择您想要上传的文件。
-
除非您正在上传现有数据集的新版本,否则不要选择This is the new version of an existing dataset复选框。
-
为数据集指定一个名称。这将在您构建实验时帮助您识别数据集。数据集名称必须是唯一的——您不应该在保存的Dataset选项中有两个具有相同名称的数据集。如果您正在上传现有数据集的新版本,那么您需要选择您要上传新版本的数据集名称。
-
指定您要上传的数据类型。
-
您可以可选地提供数据的描述。
-
然后,点击弹出窗口右下角的 OK 按钮(勾选标记)以开始上传。
在上传过程中,您将看到一条消息,表明您的文件正在上传。上传时间将取决于您数据的大小以及您与服务器的连接速度。
成功上传后,数据集将作为模块出现在模块调色板的左侧 已保存数据集 | 我的数据集 下,就像任何样本数据集一样。您可以在实验中使用它,并通过将其拖动到实验画布上来查看它。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_08.jpg
您还可以点击左侧 WEB 服务 选项下方的 数据集 链接,以查找所有已上传的数据集。如果您想删除任何数据集,请点击它,然后在网页底部的面板中点击 删除。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_09.jpg
输入数据模块
ML 工作室包含 输入数据 模块,它允许您通过手动输入来手动输入一小组数据,并允许您快速轻松地构建数据集。这可以快速测试某些内容。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_07.jpg
在前面的示例中,数据以 CSV 格式输入,数据集通过勾选 HasHeader 选项标记,因此具有标题。成功运行实验后,您可以通过右键单击模块的输出端口并选择 可视化 来查看输入的数据集。
数据读取器模块
通常,您需要从外部来源导入数据。您可以通过在 数据输入和输出 选项下可用的 读取器 模块来完成此操作。读取器
模块从来源,如网络、Azure SQL 数据库、Azure 表、Hive 表或 Windows Azure Blob 存储加载 CSV、TSV 和 ARFF 数据文件。模块的输出端口返回从给定数据源下载的结果数据集,其他连接的模块可以消费它。
从网络获取数据
您可以通过 HTTP/HTTPS/FTP/FTPS 从 ML 工作室导入来自网络 URL 的数据集,尽管您需要将 读取器
模块的数据源选择为 HTTP。以下部分将指导您如何将公共数据集导入 ML 工作室。
获取公共数据集 – 自己动手做
UCI 机器学习仓库包含不同的数据集,并免费提供给任何感兴趣的人。此 URL 包含一个包含森林火灾数据集的 CSV 文件:archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv
。
要将文件导入 ML 工作室,请按照以下步骤操作:
-
前往 ML 工作室。点击 +新建 按钮,选择 实验。
-
从模块调色板中找到 读取器 模块,并将其拖动到实验画布上。
-
模块属性面板显示在屏幕上。选择数据源为 HTTP。
-
指定一个完整的 URL:
archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv
。 -
将数据格式指定为 CSV。
-
通过勾选复选框 CSV 或 TSV 有标题行来指示文件包含列标题。这意味着文件的第一行将被视为标题行。
-
运行实验。成功执行后,你可以在模块上找到一个绿色的勾选标记。
-
要查看输出数据,右键单击 读取器模块的输出端口并选择 可视化。这将在新浏览器窗口中打开结果:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_01.jpg
从 Azure 获取数据
ML Studio 允许你从以下 Azure 服务传输数据:
-
Windows Azure BLOB 存储:这使你能够从 Windows Azure BLOB 存储中读取 BLOB(文件)。如果你使用 ARFF 格式进行存储,则列使用标题元数据映射。如果你使用 TSV 或 CSV 格式,则映射通过采样列数据推断。
-
Windows Azure 表存储:这使你能够从灵活的 NoSQL 存储中读取数据。内置和声明的数据属性类型直接映射到元数据(时间戳、整数等)。
-
SQL Azure 表:这使你能够从 SQL Azure 数据库中读取选定的表数据。由于这是结构化数据,元数据映射是自动的。
数据格式转换
有时,你可能需要将数据集转换为 ML Studio 支持的格式。有五个数据格式转换模块可用。所有这些模块都接受数据集作为输入,通过它们的输入端口将其转换为相应的格式。以下都是这些模块,它们的名称具有自解释性:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_04.jpg
从 ML Studio 获取数据
你还可以从 ML Studio 导出数据到其他数据目的地,你可以将其导出到你的 PC,或者将其保存到 ML Studio 本身作为已保存的数据集项。
在 PC 上保存数据集
如果你想要从 ML Studio 中的模块输出下载数据集到你的 PC,请按照以下步骤操作:
-
右键单击你想将其保存为数据集的模块的输出端口。请注意,你不能下载数据表格式的输出数据集。在这种情况下,你必须将其转换为 CSV 或 TSV 格式才能下载。参考以下截图查看此操作:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_02.jpg
-
点击 下载,文件将被下载到你的 PC 上。
在 ML Studio 中保存结果
有时候,你可能希望从实验中获取一个结果并将其保存到 ML Studio 以供以后使用。为此:
-
右键单击你想将其保存为数据集的模块的输出端口。
-
点击 另存为数据集选项:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_05.jpg
-
当提示时,输入一个可以让你轻松识别数据集的名字。
-
如果你想要覆盖现有的数据集并选择现有数据集的名称,请勾选复选框(这是现有数据集的新版本),否则请保持未勾选。
保存后,数据集将在实验中使用,并出现在数据集列表中。
写入模块
你可以使用写入器模块将数据集写入 Windows Azure BLOB 存储、Azure 表、Azure SQL 数据库或 HDFS(这是一个部署在任何地方但可访问的 Hadoop 集群)作为 Hive 查询。此模块接受数据目的地作为第一个参数,然后根据所选目的地接受其他所需参数。将数据集写入 Azure Blob Storage 的写入器模块可能看起来像以下这样:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_04_10.jpg
摘要
我们从探索 ML Studio 支持的不同数据格式开始。然后我们探讨了如何从外部源导入数据以及如何将数据集导出到外部源。我们使用了读取器模块来导入数据,以及写入器模块来导出数据。你还了解了输入数据模块,它允许你通过手动输入数据来构建一个小数据集。
在你将数据从源导入 ML Studio 后,在应用机器学习算法之前,通常需要对其进行某种形式的准备。此外,某些机器学习算法需要数据的前处理。在下一章中,我们将探讨 ML Studio 提供的不同数据准备选项。
第五章:数据准备
在实际场景中,大多数时候你会发现,用于预测分析的数据不适合这个目的。这主要是由于两个原因:
-
在现实世界中,数据总是杂乱的。它通常有很多不希望出现的项目,如缺失值、重复记录、不同格式的数据、散布在各个地方的数据等等。
-
很常见,数据要么需要以适当的格式提供,要么需要一些预处理,以便在我们应用机器学习算法进行预测分析之前准备好。
因此,你需要准备你的数据或转换你的数据,使其适合所需的分析。ML Studio 提供了不同的数据准备选项,在本章中,你将探索为一些常见场景预处理数据的方法,以及当必要的模块在 ML Studio 中不可用时的数据准备方式。本章旨在使你熟悉这些选项,为你提供一个关于这些选项实际应用的概述,这些选项你将在随后的章节中找到。
数据操作
你可能需要操作数据以将其转换为所需的格式。以下是一些常用的场景和可用的模块。
清理缺失数据
清理缺失数据和缺失值可能是你在数据分析之前需要解决的最常见问题。当存在缺失值时,某些算法可能无法工作,或者你可能无法得到期望的结果。因此,你需要通过用一些逻辑值替换它们,或者删除现有的行或列来消除缺失值。
ML Studio 提供了一个名为清理缺失数据的模块,用于解决这个确切问题。它允许你删除具有缺失值的行或列,或者允许你用以下之一替换行和列中的值:平均值、中位数、众数、自定义值、使用主成分分析(PCA)的概率形式或链式方程多重插补(MICE)的值。MICE 是一种统计技术,它使用适当的算法在用默认值初始化缺失条目后更新每一列。这些更新会重复多次,并由迭代次数
参数指定。默认选项是用自定义值替换行和列的值,你可以指定一个占位符值,例如0
或NA
,该值应用于所有缺失值。你应该小心,你指定的值与列的数据类型相匹配。
模块的第一个输出是清理后的数据集,第二个输出是要传递给模块以清理新数据的转换。你可以在模块调色板中的数据转换 | 操作下找到清理缺失数据模块。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_01.jpg
在最后一个参数中,如果您勾选了生成缺失值指示列的复选框,那么它将为每个包含缺失值的列添加一个新列,并且对于它找到的每个缺失值行,都会进行相同的指示。
移除重复行
您使用移除重复行模块根据您指定的列列表从输入数据集中移除重复行。如果所有包含的列的值都相等,则认为两行是重复的。此模块还接受一个输入,即保留第一个重复行复选框,作为指示符,指定是否保留一组重复的第一行并丢弃其他行,或者保留遇到的最后一个重复行并丢弃其余行。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_14.jpg
项目列
当您需要在数据集中选择特定列进行分析时,可以使用项目列模块。根据您的需求,您可以通过排除所有列并包含几个列来实现这一点。或者,您可以从包含所有列开始,然后排除几个列。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_02.jpg
前面的截图说明了项目列模块是如何从给定的数据集中排除一个列的。同时请注意,如果您喜欢,可以勾选顶部的复选框,以保持选择中重复行和列的顺序。
元数据编辑器模块
元数据编辑器模块允许您更改数据集中一个或多个列的元数据。对于给定的数据集,您可以更改以下内容:
-
您可以更改列的数据类型;例如,从字符串更改为整数
-
您可以将列的类型更改为分类或非分类;例如,一个列可能包含用户 ID,它们是整数,但您可能认为它们是分类的
-
您可以更改列的考虑方式,将其视为特征或标签;例如,如果一个数据集有一个包含您感兴趣进行预测的群体收入的列,您可能希望将其视为标签或目标变量
-
您可以更改列的名称
让我们看看以下截图,它解释了元数据编辑器模块提供的各种功能:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_03.jpg
添加列模块
添加列模块接受两个数据集作为输入,并通过组合两个数据集的所有列来连接它们,以创建一个单一的数据集。结果数据集将包含两个输入数据集列的总和。
要将两个数据集的列添加到单一数据集中,您需要记住以下几点:
-
每个数据集中的列必须具有相同数量的行。
-
当您使用添加列选项时,将连接每个数据集中的所有列。如果您只想添加列的子集,请使用结果集上的项目列模块来创建包含您想要的列的数据集。
-
如果有两个具有相同名称的列,则将从右侧输入的列名称添加一个数字后缀。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_04.jpg
添加行模块
添加行模块接受两个数据集作为输入,并通过在第一个数据集之后附加第二个数据集的行来连接它们。
要将两个数据集的行添加到单个数据集中,您需要记住以下事项:
- 两个数据集必须具有相同数量的列
结果数据集将包含两个输入数据集行数的总和:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_05.jpg
Join模块
Join模块允许您合并两个数据集。如果您熟悉 RDBMS,那么您可能会发现它与类似 SQL 的连接操作相似;然而,使用它不需要 SQL 知识。您可以执行以下类型的连接操作:
-
内连接:这是一个典型的连接操作。只有当键列的值匹配时,它才返回组合行。
-
左外连接:此操作返回左侧表中的所有行的连接行。当左侧表中的某一行在右侧表中没有匹配行时,返回的行包含来自右侧表的所有列的缺失值。
-
全外连接:此操作返回两个数据集的连接行,首先是内连接操作的结果,然后附加不匹配的行。
-
左半连接:当键列(复数)的值匹配时,它仅返回左侧表中的行。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_06.jpg
数据拆分
很常见,您需要拆分您的数据集;最常见的是,您需要将给定的数据集拆分为用于分析的训练集和测试集。ML Studio 为此目的提供了一个拆分模块。它允许您根据指定的分数将数据集拆分为两个数据集。因此,如果您选择0.8,则输出第一个数据集,包含输入数据集的 80%,其余 20%作为第二个输出。您还可以选择随机拆分数据。如果您需要在每次运行时都获得相同的结果,则可以指定一个非 0 的随机种子值。您可以在数据转换 | 样本下找到拆分模块,然后在模块调色板中拆分它:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_07.jpg
注意,最后一个参数分层拆分默认为False,只有当您进行分层拆分时才将其设置为True,这意味着它首先分组,然后从每个组(层)中随机选择行。在这种情况下,您需要根据分层键列指定分组依据。
您还可以指定不同的拆分模式作为参数,而不是指定默认的拆分行数,例如:
-
推荐拆分:当您需要将数据拆分以在推荐模型中使用作为训练和测试数据时,可以选择此选项。
-
正则表达式:你可以使用此选项指定正则表达式,将数据集分成两行集——匹配表达式的行和所有剩余的行。正则表达式仅应用于数据集中的指定列。此拆分选项对于各种预预处理和过滤任务很有帮助。例如,你可以通过将以下正则表达式应用于字符串列 text Social 来过滤包含文本 Social 的所有行。
-
相对表达式:你可以使用此选项创建作为数值列过滤器的关联表达式;例如,以下表达式选择所有列值大于 2000 的行,如ColumnName>2000。
自己动手做
开始一个新的实验,并将来自保存的数据集组下的成人人口普查收入二分类数据集拖到模块调色板中。然后,执行以下操作:
-
可视化数据集并找出所有具有缺失值的列
-
使用清理缺失数据模块用 0 替换缺失值
-
在之前使用的元数据编辑器模块的结果数据集中,选择除收入外的所有列,并将它们识别为特征字段
-
在之前使用的分割模块的结果数据集中,使用相同的模块将数据集分成 80% 和 20%
-
运行实验并从分割模块的输出端口可视化数据集
你的实验可能看起来像以下这样:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_13.jpg
应用 SQL 转换模块
应用 SQL 转换模块允许你在输入数据集上运行 SQL 查询并获取所需的结果。你可以在模块调色板中的数据转换 | 操作下找到它。该模块可以接受一个、两个或三个数据集作为输入。来自输入 1 的数据集可以引用为t1。同样,你可以将来自输入 2 和输入 3 的数据集分别引用为t2和t3。在模块属性中,应用 SQL 转换模块只接受一个参数作为 SQL 查询。它支持的 SQL 语法基于 SQLite 标准。
在以下示例中,该模块从两个数据集中获取数据,将它们连接起来,并选择较少的列。它还通过应用聚合函数 AVG 生成计算列。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_15.jpg
如果你已经熟悉 SQL,你可能会觉得这个模块在数据转换方面非常实用。
高级数据预处理
ML Studio 还提供了高级数据处理选项。以下是一些简要讨论的常见选项。
移除异常值
异常值是与数据中的其他数据点明显不同的数据点。如果您的数据集中存在异常值,它们可能会通过扭曲您的预测模型而导致不可靠的数据预测。在许多情况下,剪裁或删除异常值是一个好主意。
ML Studio 附带剪裁值模块,该模块检测异常值,并允许您使用阈值、平均值、中位数或缺失值剪裁或替换值。默认情况下,它应用于所有数值列,但您可以选择一个或多个列。您可以通过导航到数据转换|缩放然后减少在模块调色板中找到它。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_08.jpg
数据归一化
通常,数据集中的不同列具有不同的尺度;例如,您可能有一个包含两个列的数据集:年龄,其值范围从 15 到 95,以及年收入,其值范围从$30,000 到$300,000。在某些情况下,这可能会成为问题,因为某些机器算法要求数据具有相同的尺度。
ML Studio 附带归一化数据模块,该模块将数学函数应用于数值数据,使数据集的值符合一个共同的尺度;例如,将所有数值列的值转换为介于 0 到 1 之间。默认情况下,该模块应用于所有数值列,但您可以选择一个或多个列。您还可以从以下数学函数中选择:
-
Z 分数
-
最小-最大
-
逻辑回归
-
对数正态
-
Tanhhttps://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_09.jpg
应用数学运算模块
有时,您可能需要将数学运算应用于数据集作为数据准备的一部分。在 ML Studio 中,您可以使用应用数学运算模块,该模块接受数据集作为输入,并返回一个数据表,其中所选列的元素已通过指定的数学运算进行转换。对于一元运算,如 Abs(x),运算应用于每个元素。对于二元运算,如 Subtract(x, y),需要选择两列,并在列之间的元素对上计算结果。它提供了一系列分组在不同类别下的数学函数。默认情况下,它应用于所有数值列,但您可以选择一个或多个列。您可以在模块调色板中的统计函数模块下找到它。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_10.jpg
特征选择
数据集中的不是所有特征或列都具有相同的预测能力。有时数据中包含许多冗余或不相关的特征。冗余特征不比当前选定的特征提供更多信息,而不相关的特征在任何上下文中都不提供有用信息。因此,在应用预测分析之前,从数据集中去除冗余或不相关的特征是理想的。
ML Studio 附带以下两个用于特征选择的模块,它们接受一个输入数据集和一个带有过滤列或特征的输出数据集。
基于过滤的特征选择模块
基于过滤的特征选择模块使用不同的统计测试来确定具有最高预测能力的特征子集。您可以在模块调色板中的特征选择下找到它。它接受一个包含两个或更多特征列的数据集作为输入。第一个输出是一个包含前 N 个预测能力强的特征(列)的数据集。第二个输出是一个包含分配给所选列的分数(标量)的数据集。此模块根据您选择的以下启发式选项从数据集中选择重要特征:
-
皮尔逊相关选项
-
互信息选项
-
Kendall 相关选项
-
Spearman 相关选项
-
卡方选项
-
费舍尔评分选项
-
基于计数的选项
皮尔逊相关系数是基于过滤的特征选择模块的默认选项。它与数值、逻辑和分类字符串列一起工作。请注意,所有启发式或评分方法并不适用于所有类型的数据。因此,您选择的评分方法部分取决于您拥有的数据类型。有关这些评分方法的更多详细信息,您可以参考产品文档。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_11.jpg
费舍尔线性判别分析模块
费舍尔 线性判别分析模块找到一组特征线性组合,该组合表征或区分两个或多个对象或事件类别。得到的组合通常用于在分类前后进行降维。您可以在模块调色板中的特征选择下找到它。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_05_12.jpg
超出现成模块的数据准备
虽然 ML Studio 附带了许多数据预处理模块,但您可能会遇到可用模块无法满足您需求的情况。在这些时候,您可能需要用 R 或 Python 编写代码,在 ML Studio 中运行它们,并将这部分作为您的实验的一部分。您可以在第十章 使用 R 和 Python 进行扩展中找到有关如何编写代码和扩展 ML Studio 的更多信息。
目前建议,如果您的数据大小在几 GB 以内,您应该在 ML Studio 内部进行任何数据准备。如果您处理的数据更多,那么您应该在 ML Studio 外部准备数据,例如使用 SQL 数据库或使用大数据技术,如微软基于云的 Hadoop 服务HDInsight。然后,您应该在 ML Studio 内部消费准备好的数据进行预测分析。
摘要
在任何数据分析任务中,数据准备占据了您大部分的时间。在本章中,您了解了 ML Studio 中不同的数据准备选项,从探索数据准备的重要性开始。然后,您熟悉了一些非常常见的数据转换任务,例如处理缺失值、重复值、合并两个数据集的行或列、类似 SQL 的数据集连接、在数据集中选择列以及分割数据集。您还学习了如何应用 SQL 查询来转换数据集。您还探索了通过应用数学函数、归一化和特征选择来转换数据集的一些高级选项。
在下一章中,你可以开始应用机器学习算法,特别是 ML Studio 附带回归算法。
第六章。回归模型
最后,我们将开始介绍机器学习算法。您之前了解到,主要存在两种监督机器学习算法,回归就是其中之一。在您开始使用 ML Studio 中可用的不同回归算法和技术之前,我们将尝试更多地了解回归分析和为什么它被使用。
理解回归算法
假设您居住在一个地区,并且您拥有以下数据集,其中包含该地区出售的不同物业的所有交易以及物业详情。让我们看一下以下表格:
在这里,D 表示独立式,S 表示半独立式,T 表示排屋式,F 表示公寓/联排别墅。
现在,一个面积为 1,800 平方英尺的公寓将上市。您需要预测其出售的价格。这是一个回归问题,因为您需要预测目标变量的一个数值。在这里,物业价格是目标变量,物业类型和面积是两个特征或依赖变量。在机器学习中,目标变量也被称为标签。
您需要提出一个模型,该模型将接受物业类型和面积的价值,并输出价格。将模型视为一个数学函数 f(物业类型, 面积) = 预测价格。
物业实际出售的价格可能与预测价格相同,也可能不同。实际价格与预测价格之间的差异是误差。在构建预测模型时,您应尝试最小化误差,以便预测值尽可能接近实际值。
在扩展前面的例子中,您假设已经构建了一个模型,并使用以下公式预测了一个 1800 平方英尺公寓的价值:
f(F, 1800) = $400,000
因此,$400,000 是预测值,假设该物业以$410,000 的实际价格出售。那么,误差将是 误差 = $410,000 - $400,000 = $10,000。
训练、评分和评估
在进行预测之前,您需要使用示例数据或训练数据集训练一个算法,其中目标值或标签是已知的。在训练模型后,您可以使用训练好的模型进行预测。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_15.jpg
继续前面的例子,训练好的模型可以被视为数学函数 f
来进行预测。
通常,当你需要从一个给定的数据集中构建模型时,你需要将数据集分成两个集合,一个作为训练数据集,另一个作为测试数据集。使用训练数据训练模型后,你使用测试数据集来查看模型的表现,即它有多少错误。
模型训练完成后,你可以使用测试数据来进行预测或评分。在评分过程中,使用特征值,然后预测目标值。此时,你不确定你的模型表现如何。你需要评估它以了解其性能。在评估过程中,你将评分值和实际值进行比较,这被称为你已经将数据集分为训练集和测试集。
继续使用之前的示例,在评分过程中,你发现一个 1800 平方英尺公寓的预测价格为$400,000,而在评估过程中,你发现误差为$10,000。
总体来说,在实验过程中,你可以遵循以下步骤:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_16.jpg
ML Studio 提供了不同的统计方法来衡量回归模型的误差和性能。它还附带了一套算法,可以用来对数据集进行实验。
测试和训练数据集
通常,你使用训练数据集来训练算法,并使用测试数据集来验证或测试模型。在实践中,大多数情况下,你只会得到一个数据集。因此,你可能需要将给定的数据集分成两部分,一部分作为训练集,另一部分作为测试集。通常,训练集包含更大的部分,而测试集包含较小的部分,例如 70-30 或 80-20。理想情况下,在分割原始数据集时,应该随机分割。ML Studio 中的分割模块很好地解决了这个问题。
评估
将前一个数据集的示例(参见表 6.1)视为训练数据集,以下内容作为测试数据集:
将第一行的实际价格和预测/评分价格分别视为y1和f1。因此,在前面的表中,我们可以看出y1 = 400,000和f1 = 410,000。
同样,我们可以看出第二行y2 = 220,000和f2 = 210,000。
ML Studio 提供了以下统计方法来衡量模型的表现。
平均绝对误差
平均绝对误差(MAE)是用来衡量预测或预测结果与最终结果接近程度的量。它是实际值与预测值之间绝对差值的平均值。让我们看看下面的图表:
它具有与原始数据相同的单位,并且只能比较误差以相同单位度量的模型。
均方根误差
均方 根误差 (RMSE) 是通过对所有误差平方的平均值的平方根来计算的(即预测值与实际值之间的差异)。让我们看一下以下图示:
它只能比较误差以相同单位度量的模型。
相对绝对误差
相对绝对 误差 (RAE) 是相对于实际值平均值与实际值绝对差平均值绝对误差的平均值。让我们看一下以下图示:
它可以比较误差以不同单位度量的模型。
相对均方误差
相对 均方误差 (RSE) 是预测值与实际值平方差的平均值相对于实际值平方差平均值、实际值平均值的平均值。
它可以比较误差以不同单位度量的模型。
确定系数
确定系数 R2 总结了回归模型的解释力。如果回归模型完美无缺,尽管不切实际,R2 的值将是 1。
确定系数也可以解释为数据中符合模型的比例。例如,如果 R2 = 0.7950,那么 79% 的 y 的总变化可以通过特征与 y 之间的线性关系来解释,y 是响应变量(或目标变量)。
因此,对于您的模型,R2值越接近 1,越好。对于所有其他错误统计量,值越小,越好。
线性回归
线性回归是 ML Studio 中可用的回归算法之一。它试图将一条线拟合到数据集。这是一个流行的算法,可能是最古老的回归算法之一。我们将使用它来训练模型,对可用的样本数据集之一进行预测:汽车价格数据(原始)。这个数据集是关于汽车,根据它们的制造商和型号以及其他特征区分的。它还包括价格。有关数据集的更多信息,可以在archive.ics.uci.edu/ml/datasets/Automobile
找到。
我们将使用价格作为标签或目标变量。因此,给定汽车特征,您需要预测汽车的价格。
前往 ML Studio 创建一个新的实验。然后,在屏幕左侧的模块调色板中展开已保存的数据集。将**汽车价格数据(原始)**模块拖动到画布上。
然后,在模块调色板中展开数据转换,然后展开样本和分割,将分割模块拖动到画布上。将第一个输出数据集的行分数参数设置为0.8,并将其他设置为默认值。您正在分割数据集,以便 80%的数据用于训练,其余 20%用于测试。
在准备好训练数据和测试数据后,将训练模块拖动到画布上。在屏幕左侧模块调色板中的搜索框中输入train
,当训练模块出现时,将其拖动到画布上。然后,将分割模块的第一个输出连接到训练模块的第二个输入。现在,您需要选择数据集的列,该列将成为您的目标变量,或者您将训练一个模型进行预测。在我们的例子中,价格是您将要预测的目标变量或标签。
通过单击选择训练模块,展开屏幕右侧的属性面板,并单击启动列选择器选项。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_01.jpg
然后,将出现一个弹出窗口以选择列。在屏幕右侧的文本框中输入price
,并单击复选框以选择该列。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_02.jpg
同样,将线性回归模块拖动到画布上。在屏幕左侧模块调色板中的搜索框中输入linear
,当模块出现时,将其拖动到画布上。
然后,选择线性回归模块,并将属性值保留为默认设置。将随机数种子选项设置为0。随机数种子选项用于生成随机数,以便产生可重复的结果。
现在,将线性回归模块的输出连接到训练模块的第一个输入端口。它应该看起来类似于以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_03.jpg
接下来,将评分模型和评估模型模块拖动到画布上。
评分模型将使用训练好的算法为测试数据集生成预测价格值。因此,它需要两个输入:首先,训练好的模型;其次,测试数据集。它生成包含预测值的评分数据集。评估模型接受评分数据集并生成评估矩阵。它还可以接受两个评分数据集,这样你可以并排比较两个模型。
将训练模型的输出连接到评分模型的第一个输入,将分割模块的第二个输出连接到第二个输入。然后,将评分模型的输出连接到评估模型的第一个输入。
完整的模型可能看起来如下。现在,点击运行按钮来运行实验。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_04.jpg
运行完成后,当你看到所有模块框上都有绿色的勾号时,你可以查看评估矩阵以了解你的模型表现如何。为此,右键单击评估模型的输出,并点击它以选择可视化选项。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_05.jpg
下一个弹出窗口显示评估结果图,如下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_06.jpg
如你所见,确定系数为0.941703,这是一个不错的数值,模型似乎表现良好。
如果你注意到了,你使用普通最小二乘法训练了这个线性回归模型。你也可以使用带有适当参数的在线梯度下降,例如学习率和迭代次数(周期)。当处理大型数据集时,这种方法非常有用,因为它具有良好的可扩展性。然而,当数据集只有几千个数据点时,使用普通最小二乘法可能更适合你,因为它简单且易于训练(只需选择少量参数)。
为了保持简单,在本章的前后示例中,我们在没有进行初始数据准备的情况下开始建模,例如去除缺失值或选择正确的列或特征集。在实践中,你应该在用数据集进行训练之前始终进行初始数据准备。再次强调,某些算法需要数据以适当的格式存在才能生成期望的结果。
为学习者优化参数——扫描参数模块
要成功训练一个模型,你需要为算法找到正确的一组属性值。大多数情况下,这并不是一项容易的任务。首先,你需要对算法及其背后的数学有一个清晰的理解。其次,你必须多次运行实验,尝试算法参数的多种组合。有时,这可能会非常耗时且令人沮丧。
例如,在上述相同的前一个例子中,L2 正则化权重的正确值应该是什么?它用于减少模型的过拟合。当模型在训练数据集上表现良好,但在任何新数据集上表现不佳时,模型就会过拟合。通过减少过拟合,你可以泛化模型。然而,这里的问题是,你必须手动调整这个 L2 正则化权重,这可以通过尝试不同的值、多次运行实验并在每次运行中评估其性能来完成。
ML Studio 提供了一个名为参数扫描模块的解决方案。你不需要使用训练模型模块,而是可以使用训练模型模块来生成一个使用正确的参数或属性值优化的训练模型。以下截图描述了其输入和输出:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_07.jpg
你需要指定一个参数扫描模式作为此模块的参数。你有两种方式来指定扫描模式的参数,如下所示:
-
完整网格:此选项在不知道最佳参数设置可能是什么,并希望尝试许多参数的情况下很有用。它遍历系统预定义的网格,尝试不同的组合,并确定最佳学习器。
-
随机扫描:或者,你也可以选择此选项,并指定模块要执行的最大运行次数。它将在有限的样本运行范围内随机选择参数值。当你想使用你选择的指标来提高模型性能并节省计算资源时,建议使用此选项。
你还需要选择一个目标或标签列,并指定一个用于衡量回归性能的指标值,这可以是五个评估矩阵之一,例如,均方根误差。在处理回归问题时,你可能可以忽略分类的参数设置。
决策森林回归
决策森林,或如人们广泛所知的随机森林,是一个非常流行的算法。内部,它构建了许多决策树,然后将它们作为森林进行集成。每个决策树生成一个预测,在森林中,每棵树的预测值被平均。即使在有噪声数据的情况下,它也能很好地工作。
然而,要训练一个决策森林,你需要设置正确的参数,例如决策树的数量。现在,我们将使用Sweep Parameters模块来训练一个决策森林并优化其参数。
与前一个案例一样,创建一个新的实验并为它命名。然后,执行相同的步骤,并将屏幕左侧的模块调色板中的Saved Datasets展开。将**Automobile price data (Raw)**模块拖到画布上。
然后,在模块调色板中展开Data Transformation和Sample and Split,并将Split模块拖到画布上。将第一个输出数据集的行Fraction参数设置为0.8,其他保持默认值。你正在分割数据集,以便 80%的数据用于训练,其余 20%用于测试。
在屏幕左侧的模块调色板中的搜索框中输入Sweep
,当Sweep Parameters模块出现时,将其拖到画布上。然后,将Split模块的第一个输出连接到Sweep Parameters模块的第二个输入,将Split模块的第二个输出连接到Sweep Parameters模块的第三个输入。
现在,你需要设置数据集的列,这是你的目标或标签列,你将训练一个模型来进行预测。在我们的案例中,price是目标变量或标签,你将对其进行预测。同时,将扫描模式设置为Entire grid,将回归性能度量指标设置为确定系数。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_08.jpg
同样,将Decision Forest Regression模块拖到画布上。在屏幕左侧的模块调色板中的搜索框中输入Decision Forest
,当模块出现时,将其拖到画布上。将Resampling method属性设置为Bagging,其余保持默认值,如以下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_09.jpg
然后,将Decision Forest Regression模块的唯一输出连接到Sweep Parameters模块的第一个输入。
接下来,将Score Model和Evaluate Model拖到画布上。将Sweep Parameters模块的第二个输出连接到Score Model的第一个输入,将Split模块的第二个输出连接到Score Model的第二个输入。然后,将Score Model的输出连接到Evaluate Model的第一个输入。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_10.jpg
现在,运行实验,完成后,可视化Evaluate Model的输出以了解模型的性能。
如果你想知道通过Sweep Parameters模块获得的Decision Forest Regression模块的最佳参数,那么右键单击Sweep Parameter模块的输出端口,然后点击Visualize。在前一个例子中,它看起来如下:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_11.jpg
训练神经网络回归 – 自己动手做
神经网络是一种受人类大脑计算模型启发的机器学习算法。对于回归,ML Studio 提供了神经网络回归模块。你可以使用 Sweep Parameters 模块来训练它。首先,尝试在没有 Sweep Parameters 模块(使用 Train 模块)的情况下使用神经网络回归的默认参数进行训练,然后使用 Sweep Parameters 模块进行训练。注意模型性能的改进。
使用评估模型比较模型
使用Evaluate Model,你还可以在同一个实验中并排比较两个模型。模块的两个输入端口可以接受来自两个 Score 模块的输出,并生成评估矩阵来比较模块接受的两个输入的输出。如下截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_12.jpg
比较模型 – 神经网络和提升决策树
Boosted Decision Tree Regression模块是 ML Studio 附带的其他回归算法之一。它是一个类似于决策森林的集成模型,但有一些不同。
在这里,我们将使用Boosted Decision Tree Regression和Neural Network Regression模块进行相同的实验,并使用Evaluate Model来比较两者。在两种情况下,我们将使用Sweep Parameters模块来训练算法。
创建一个新的实验,并拖动相同的样本数据集——**Automobile price data (Raw)**模块。然后,使用相同的训练数据集(80%)进行两种算法的训练,并使用其他 20%进行评分。构建的模型可能看起来如下:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_13.jpg
虽然连接直观且简单,但两种情况下的Sweep Parameters模块的连接可能令人困惑。请注意,带有红色圆圈的输入来自标记有红色圆圈的Split模块的相同输出。因此,两个Sweep Parameters模块接受相同的训练数据,但使用不同的算法进行训练。此外,请注意带有蓝色圆圈的输入端口来自标记有蓝色圆圈的Split模块的相同输出端口。
在实验成功运行后,所有框都将有一个绿色的勾号。然后,右键单击Evaluate Model的输出端口,以找到两种算法的比较指标。让我们看一下以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_06_14.jpg
上一张截图的第一行显示了连接到评估模型的第一个输入的模型的指标,在这种情况下,它显示了神经网络回归模块,第二行用于第二个模型:提升决策树回归模块。您知道,对于性能更好的模型,错误值应尽可能小,确定系数应尽可能接近 1,这意味着它越高越好。正如您将发现的,对于这个数据集的每个评估统计量,提升决策树的表现都优于神经网络,例如,确定系数为0.963765,而0.444975。同样,与其它模型相比,提升决策树的相对绝对误差要小得多。如果您必须在这两个模型之间做出选择,那么在这种情况下,您自然会选择提升决策树。因为我们没有设置随机数种子,所以您的结果(图表)可能会有所不同;然而,总体上,这并没有任何区别。
在这里,您只比较了两个模型。在实践中,您应该尽可能多地比较同一问题上的模型,以找出其中表现最好的模型。
其他回归算法
Azure ML 随带了一系列流行的回归算法。本节简要描述了(在本书编写时)我们尚未讨论的其他算法:
-
贝叶斯线性回归模型:此模型使用贝叶斯推理进行回归。只要您正确设置正则化参数,这可能并不难训练,例如,可能适合的值有 0.1、0.2 等。
-
有序回归模型:当您需要为具有自然排序或排名标签或目标值的数据集训练模型时,您会使用此模型。
-
泊松回归:这是一种特殊的回归分析方法。它通常用于模型计数,例如,对与飞机航班相关的感冒和流感病例数进行建模,或估计与事件或促销相关的电话数量等。
没有免费的午餐
无免费午餐定理与机器学习相关,它通常表述了任何机器学习模型的局限性。根据该定理,没有一种模型适合解决所有问题。因此,在一个领域内适合解决一个问题的模型可能对另一个问题并不适用。所以在实践中,每当你解决问题时,你需要尝试不同的模型,并对你自己的数据集进行实验以选择最佳模型。这在监督学习中尤其如此;你可以在 ML Studio 中使用评估模型模块来评估不同复杂度的多个模型的预测准确性,以找到最佳模型。一个表现良好的模型也可能由多个算法训练,例如,ML Studio 中的线性回归可以通过普通最小二乘法或在线梯度下降法进行训练。
摘要
你通过理解回归预测分析开始了这一章,并探讨了训练、测试和评估回归模型的概念。然后你继续在 ML Studio 中构建不同的回归模型实验,例如线性回归、决策森林、神经网络和提升决策树。你学习了如何在训练后评分和评估模型。你还学习了如何使用 Sweep Parameters 模块优化学习算法的不同参数。无免费午餐定理教导我们不要依赖任何特定的算法来解决所有问题,所以在 ML Studio 中,你应该在最终确定单个模型之前,训练和评估不同模型的性能。
在下一章中,你将探索另一种无监督学习类型,称为分类,你将探索 ML Studio 中可用的不同算法。
第七章. 分类模型
分类是另一种监督机器学习方法。在本章中,在深入了解使用 ML Studio 构建分类模型之前,您将首先了解分类算法的基本知识以及如何评估模型。然后,您将使用不同的算法和不同的数据集构建模型。
理解分类
假设您得到了以下假设数据集,其中包含患者的数据:他们体内肿瘤的大小、他们的年龄以及一个类别,表示他们是否受到癌症的影响,1 表示阳性(受癌症影响)和 0 表示阴性(不受癌症影响):
在这里,患者被分类为受癌症影响或不受影响。一位新患者以 17 岁的年龄出现,并被诊断出患有大小为 149 的肿瘤。现在,您需要根据以前的数据预测这位新患者的分类。这就是分类,您需要预测因变量的类别;这里它是0或1——您也可以将其视为真或假。
对于回归问题,您预测一个数字,例如房价或数值。在分类问题中,您预测一个分类值,尽管它可能用数字表示,如0或1。
您不应混淆回归和分类问题。考虑一个需要预测房价的情况,不是作为一个数字,而是作为类别,如大于 10 万美元或小于 10 万美元。在这种情况下,尽管您正在预测房价,但实际上您正在预测房价的类别或类别,因此这是一个分类问题。
您通过使用给定的训练数据训练算法来构建分类模型。在训练数据集中,类别或目标变量已经已知。
评估指标
假设您已经构建了一个模型,并使用表 7.1 中的数据集作为训练数据训练了一个分类算法。现在,您正在使用以下表格作为测试数据。如您所见,最后一列显示了预测的类别。
真阳性
这是实际类别为正且被预测为正的次数。例如,患者实际上受到癌症的影响,模型也预测为阳性。
在我们前面的例子中,有一个实例,其中实际类别 = 1和预测类别 = 1。因此,这里的TP = 1。
假阳性
这是实际类别为负且被预测为正的次数。例如,患者实际上没有受到癌症的影响,但模型预测为阳性。
在我们前面的例子中,有两个实例,其中实际类别 = 0和预测类别 = 1。所以在这里,FP = 2。
真阴性
这是实际类别为负且被预测为负的次数。例如,患者实际上没有受到癌症的影响,而模型也预测为阴性。
在我们前面的例子中,有一个实例,其中实际类别 = 0和预测类别 = 0。所以在这里,TN = 1。
假阴性
这是实际类别为正但被预测为负的次数。例如,患者实际上受到癌症的影响,但模型预测为阴性。
在我们前面的例子中,有一个实例,其中实际类别 = 1和预测类别 = 0。所以在这里,FN = 1。
下表显示了矩阵中的TP、TN、FP和FN:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_27.jpg
准确度
这是真实预测与总预测数之比。而真实预测是TP + TN,总预测数是测试数据集的大小,也就是TP + TN + FP + FN。因此,准确度可以用以下公式表示:
准确度 = (TP + TN) / (TP + TN + FP + FN)
所以在我们的例子中,准确度 = (1 + 1) / (1 + 1 + 2 + 1) = 2/5 = .4。
准确度也可以表示为预测正确的百分比。所以,在我们的例子中,准确度是 40%。
注意
注意,前面的数字只是为了说明计算方法。在实践中,当你构建模型时,它应该有超过 50%的准确度;否则,模型就不太好,因为即使是随机试验也会有 50%的准确度。
精确度
阳性预测值或精确度是模型正确识别的正例的比例。精确度可以用以下公式表示:
精确度 = TP / (TP + FP)
所以在我们的例子中,精确度 = 1 / (1+1) = 1/2 = .5。
召回率
灵敏度或召回率是正确识别的实际正例的比例。召回率的公式是:
召回率 = TP / (TP + FN)
所以在我们的例子中,召回率 = 1 / (1 +2) = 1/3 = .33。
F1 分数
F1 分数可以用以下公式定义:
F1 = 2TP / (2TP + FP + FN)
F1 分数也可以用精确度(P)和召回率(R)来定义,如下所示:
F1 = 2PR/(P+R)
所以在我们的例子中,F1 = (1 * 2) / {(1 * 2) + 2 + 1 } = 2/ (2 + 2 +1) = 2/5 =.4。
阈值
阈值是值,高于此值属于第一类,所有其他值属于第二类。例如,如果阈值是0.5,那么任何得分超过或等于0.5的患者被识别为患病;否则,患者被识别为健康。你可以把阈值看作概率。为了说明,如果有 80%或0.8的几率今天可能会下雨,那么你可以预测今天会下雨。同样,如果小于0.8,那么你可以预测不会下雨。所以你的预测将取决于这里的阈值。
理解 ROC 和 AUC
接收者操作特征(ROC)图是一个二维图,其中真实阳性率(TP)绘制在y轴上,而假阳性率(FP)绘制在 x 轴上。ROC 图描述了收益(真实阳性)和成本(假阳性)之间的相对权衡。
曲线下面积(AUC)是单位正方形下 ROC 曲线下的面积部分;其值始终在0和1之间,其中1是最佳情况或所有预测都正确。然而,由于随机猜测产生了从*(0, 0)到(1, 1)*的对角线,其面积为0.5,没有现实中的分类器应该有小于0.5的 AUC。AUC 通常用作分类模型质量的衡量标准。
在以下图中,蓝色曲线表示 ROC,红色涂色的区域表示 AUC。黄色涂色的对角线代表随机猜测:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_23.jpg
考虑矩阵的动机
当选择模型算法时,你将不得不依赖于之前定义的指标。通常,一个指标可能不足以做出决定。首先,你可能查看准确率,但有时它可能具有误导性。考虑这样一个案例,你正在为一个罕见疾病做出预测,实际上,99%是阴性病例,1%是阳性病例。如果你的分类模型预测所有病例为真正的阴性,那么准确率仍然是 99%。在这种情况下,F1 分数可能是有用的,因为它会给你一个清晰的画面。AUC 也可能是有用的。
考虑另一种场景。让我们继续我们的疾病预测示例。假设您正在预测一个患者是否患有癌症。如果您将一个假病例(患者实际上未受疾病影响)预测为真,那么这是一个假阳性病例。在实际场景中,在这样一个预测之后,患者将进行进一步的医学检查,手动声明未受癌症影响。然而,如果您将一个预测为真的病例(患者实际上受疾病影响)预测为假,那么这是一个假阴性病例。在实际场景中,在这样一个预测之后,患者被允许自由离开并允许不带药物回家。这可能是危险的,因为患者可能会失去生命。您可能永远不会喜欢做出这样的预测。在这种情况下,就像这个故事一样,您可能会降低阈值值以减少释放任何真阳性病例的机会。因此,这将导致更高的召回率和更低的精确度。
在前一个场景相反的情况下,比如说您有一个用于预测在线交易欺诈的分类模型。在这里,将一个案例预测为欺诈(实际上不是——一个假阳性案例)可能会导致客户满意度下降。因此,在这种情况下,您可能会提高阈值值,这将导致更高的精确度和更低的召回率。
如您从前面的定义中可能发现的,F1 分数是一种平衡的测量方法,它涉及精确度和召回率。
当您不太担心精确度和召回率,或者您对它们不太确定时,您可以直接遵循 AUC(越高越好)的值。许多人认为 AUC 是衡量分类模型性能的最佳方式。AUC 还提供了一个图形表示。然而,始终注意记录多个指标是一个好主意。
训练、评分和评估模块
与您在上一章中看到的回归问题一样,对于分类问题,您可以从一个算法开始,并用数据对其进行训练。然后,您可以使用测试数据评分,并评估模型的性能。
在屏幕上导航到训练|评分|评估选项。
训练、评分和评估模块与你在回归中使用的相同。训练模块需要目标(类别)变量的名称。评估模块为分类生成评估指标。
如果你想通过参数扫描调整算法的参数,你可以使用相同的扫描参数模块。
是否对糖尿病进行分类
皮马印第安人糖尿病二分类数据集模块作为样本数据集存在于 ML Studio 中。它包含属于皮马印第安人血统的相同年龄的女性患者的所有数据。数据包括医疗数据,如葡萄糖和胰岛素水平,以及患者的生活方式因素。数据集中的列如下:
-
怀孕次数
-
口服葡萄糖耐量测试 2 小时血浆葡萄糖浓度
-
舒张压(毫米汞柱)
-
三头肌皮肤褶皱厚度(毫米)
-
2 小时血清胰岛素(微单位/毫升)
-
体质指数(体重(千克)/身高(米)的平方)
-
糖尿病家系函数
-
年龄(年)
-
类别变量(0 或 1)
最后一列是目标变量或类别变量,其值为 0 或 1,其中 1 表示阳性或受糖尿病影响,0 表示患者未受影响。
你必须构建模型来预测患者是否患有糖尿病或测试结果为阳性。
双类贝叶斯点机
双类贝叶斯点机是一种易于训练且功能强大的线性分类器。我们将使用它来构建我们的第一个分类模型。
开始一个新的实验。在屏幕左侧的模块调色板中,展开保存的数据集选项,向下滚动,并将皮马印第安人糖尿病二分类数据集模块拖放到画布上。或者,您也可以在搜索框中键入pima
以定位模块,然后将其拖动。
右键单击其输出端口,然后单击可视化选项以探索数据集。您会注意到它现在有 768 行和 9 列。
您必须将此数据集分成两部分以准备训练和测试数据集。因此,将分割模块拖放到画布上,并将数据集模块的输出连接到分割模块的输入。将0.8作为参数;行分数选项是第一个输出数据集,它以 80:20 的比例分割自身,以分别获得您的训练和测试数据集。
将双类贝叶斯点机模块拖放到画布上,您可以通过在左侧模块调色板中导航到机器学习 | 初始化模型 | 分类来找到该模块。
此模块有三个参数值需要设置。训练迭代次数模块是决定算法在数据集上迭代次数的值。默认值30在大多数情况下是足够的。如果勾选包含偏差复选框或设置为 true,则在每个训练和预测实例中添加一个常数特征或偏差。默认值是 true,在大多数情况下需要设置为 true。最后一个参数,如果勾选允许分类特征中的未知值或设置为 true,将为每个分类列创建一个额外的级别。测试数据集中未在训练数据集中出现的任何级别都将映射到这个额外级别。除非您正在进行所需的数据预处理,否则建议您勾选此选项或保留默认值。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_26.jpg
将训练模型模块拖动到画布上,并将双类贝叶斯点机模块的输出端口连接到训练模型模块的第一个输入端口。将分割模块的第一个输出端口连接到训练模型模块的第二个输入。在训练模型模块的属性面板中,点击启动列选择器按钮,当弹出窗口出现时,将**类变量(0 或 1)**设置为列的目标变量,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_13.jpg
接下来,将得分模型和评估模型模块拖动到画布上。将训练模型模块的输出连接到得分模型模块的第一个输入,将分割模块的第二个输出连接到得分模型模块的第二个输入。然后,将得分模型模块的输出连接到评估模型模块的第一个输入。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_14.jpg
点击运行并运行实验。当它完成后(所有模块都得到绿色勾号后),右键单击评估模型模块的输出,并点击可视化选项来查看评估结果,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_15.jpg
默认情况下,图表显示 ROC 曲线。它覆盖的面积越大,模型的性能越好。这由矩阵 AUC 表示。AUC,如你在这里可以看到的,是0.788。
注意阈值滚动条,目前设置为0.51,默认值为0.5。你可以通过将其拖动到左边或右边来增加或减少它。当你改变阈值值时,除了 AUC 之外的所有指标都会改变。原因很明显,因为当真实正例和真实负例的值发生变化时,其余的值也会变化。在当前值下,阈值(0.51)的准确度选项设置为77.9百分比。
你也可以通过点击屏幕左上角相应的标签来查看精确度/召回率和提升图。
带参数扫描的双类神经网络
我们将使用与使用神经网络构建模型和通过参数扫描调整参数相同的糖尿病数据集。
创建一个新的实验。将相同的数据集拖动并连接到分割模块,就像你在上一节中所做的那样。将0.8设置为参数;第一个输出数据集的行分数分为 80-20,以获得你的训练集和测试集。
在屏幕左侧的模块面板中的搜索框中输入Sweep
,当扫描参数模块出现时,将其拖动到画布上。然后,将分割模块的第一个输出连接到扫描参数模块的第二个输入,并将分割模块的第二个输出连接到扫描参数模块的第三个输入。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_16.jpg
现在,你需要设置数据集的列,它是你的目标或标签或类别列,你将训练一个模型来进行预测。在这种情况下,类别变量(0 或 1)是你要进行预测的目标变量或类别。同时,将扫描模式设置为整个网格,将用于分类性能度量的指标设置为准确率。忽略其他参数,因为这是一个分类问题。
在左侧模块面板顶部的搜索框中输入Two-Class Neural Network
,并将双类神经网络模块拖动到画布上。将其连接到扫描参数模块的第一个输入。像往常一样,将评分模型和评估模型模块拖动到画布上,并建立必要的连接。
将扫描参数模块的第二个输出端口连接到评分模型模块的第一个输入端口,并将分割模块的第二个输出连接到评分模型模块的第二个输入。然后,将评分模型模块的输出连接到评估模型模块的第一个输入。
运行实验。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_17.jpg
当实验运行完成后,可视化评估模型模块的输出以衡量模型的性能。注意 AUC 和准确率指标。
在使用参数扫描来寻找模型的最佳参数时,使用一个单独的数据集来评分和评估预测结果,而不是用于训练和参数调整的数据集,这是一个好的实践。为了说明这一点,你可以将你的数据集分成 60%和 40%。然后,使用另一个分割模块将 40%(第二个数据集)分成各 50%。现在,你有了三个数据集,分别包含原始数据集的 60%、20%和 20%。然后,使用前 60%和 20%用于扫描参数模块,其余 20%用于评分和评估。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_25.jpg
使用基于决策树的模型预测成人收入
ML Studio 提供了三个用于双分类的基于决策树的算法:双分类决策森林、双分类提升决策树和双分类决策丛林模块。这些被称为集成模型,其中多个决策树被组合起来以获得更好的预测性能。尽管这三个都是基于决策树的,但它们的底层算法不同。
我们将首先使用双分类决策森林模块构建一个模型,然后将其与双分类提升决策树模块进行比较,该模块用于成人人口普查收入二分类数据集,这是 ML Studio 中可用的样本数据集之一。该数据集是 1994 年美国人口普查数据库的子集,包含超过 16 岁年龄限制的在职成人的人口统计信息。数据集中的每个实例或示例都有一个标签或类变量,表示一个人是否每年赚 50K。
创建一个实验,将模块调色板中的已保存数据集组中的数据集拖到画布上。右键单击输出端口,然后单击可视化以探索数据集。当您单击不同的列时,可以发现这些列包含大量缺失值:workclass、occupation和native-country。其他列没有缺失值。让我们看一下以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_18.jpg
尽管如果仍然使用含有缺失值的模型仍然可以工作,但我们会在模型中去除这些列。缺失值可能会影响预测结果。
在搜索框中输入“项目”,将项目列模块拖到画布上。将数据集模块连接到该模块。在属性面板中,单击启动列选择器模块,以便弹出列选择器。如图所示,从所有列开始,排除具有缺失值的列:workclass、occupation和native-country:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_19.jpg
展开数据转换组,然后在模块调色板中展开样本和拆分选项,将拆分模块拖到画布上。将第一个输出数据集的行分数参数设置为0.8,其余的保留默认值。您正在拆分数据集,以便 80%的数据将用于训练,其余 20%将用于测试。
同样,现在将双分类决策森林模块拖到画布上。在模块调色板左侧的搜索框中输入“决策森林”,当模块出现时,将其拖到画布上。将重采样方法属性设置为Bagging,其余参数保留默认值。保留模块的默认属性值。
将训练模型模块拖动到画布上,并将双分类决策森林模块的输出端口连接到训练模型模块的第一个输入端口。将分割模块的第一个输出端口连接到训练模型模块的第二个输入端口。在训练模块的属性面板中,点击列选择器选项,将收入设置为列的目标变量。
接下来,将评分模型和评估模型模块拖动到画布上。将训练模型模块的输出连接到评分模型模块的第一个输入端口,并将分割模块的第二个输出端口连接到评分模型模块的第二个输入端口。然后,将评分模型模块的输出连接到评估模型模块的第一个输入端口。
运行实验,并在其成功执行后,可视化评估结果。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_20.jpg
就像任何实验一样,你现在可以比较你的模型与另一个算法。你使用双分类决策森林模块构建了一个模型。现在,使用另一个算法,例如双分类提升决策树模块,并对其进行评估。
要这样做,首先从实验开始,通过按键盘上的ctrl键并点击两个模块来选择训练和评分模块。然后,通过右键单击它们并粘贴或直接按键盘上的ctrl + v来复制选定的模块,并将它们粘贴到画布上。它支持复制粘贴,就像任何其他 MS 产品一样,例如 MS Word。
现在,点击画布上的任何位置以取消选择粘贴的模块,并重新排列它们,以确保没有模块放置在另一个模块上,并且所有模块都易于阅读。通过选择它们并按Delete键来删除双分类决策森林和训练模型模块之间的连接。从左侧调色板中将双分类提升决策树模块拖动到画布上,并将模块的输出连接到训练模型模块。保留默认属性值。将评分模型模块的输出连接到评估模型模块的第二个输入端口,并运行实验。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_21.jpg
在成功运行后,右键单击评估模型模块的输出端口,并点击可视化以在单个画布上找到两个模型的评估结果。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_22.jpg
如前图所示,在当前设置下,当您看到 AUC 和准确度数值时,双分类提升决策树模块的模型值比其他模型更高。
因此,我们知道它的表现比其他模型更好。
自己动手 – 比较模型以选择最佳模型
您已经尝试了 Adult Census Income Binary Classification 数据集模块 的两种算法。现在,尝试另外两个模块以选择最适合您最终模型的模块:双类提升决策树和双类神经网络模块。尝试不同的参数;使用参数扫描模块来优化算法的参数。以下截图仅供参考——您的实验可能会有所不同。您还可以尝试其他可用的算法,例如双类平均感知器或双类逻辑回归模块以找到最佳模型。让我们看一下以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_11.jpg
多类分类
您迄今为止所见和经历的分类是二类分类,其中目标变量可以是两类。在多类分类中,您将分类超过两类,例如,继续我们的假设肿瘤问题,对于一个特定肿瘤大小和患者年龄,您可能会预测以下三个类别之一作为患者患癌症的可能性:高、中、低。理论上,目标变量可以有任意数量的类别。
评估指标 – 多类分类
ML Studio 允许您使用以下公式计算模型的准确率:正确预测的数量与错误预测的数量之比。请参考以下表格:
以下可以是评估指标,其中列中的文本以粗体标记,并根据每个类别的准确率具有背景颜色。例如,有三个实际类别为中等,但只有两个被正确预测,因此准确率 = 2/3 = 66.6%。它还显示 33.3%的中等类别被错误地预测为高。这也被称为混淆矩阵。让我们看一下以下表格:
使用 Iris 数据集进行的多类分类
Iris 数据集是经典且简单的数据集之一。它包含了关于 Iris 花的观察数据。每个实例有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。所有测量值都是以厘米为单位。数据集包含三个目标变量的类别,每个类别代表一种 Iris 花的类型:Iris Setosa、Iris Versicolour 和 Iris Virginica。
你可以在archive.ics.uci.edu/ml/datasets/Iris
找到关于这个数据集的更多信息。
由于这个数据集在 ML Studio 中不是作为样本数据集存在的,你需要在构建任何模型之前使用读取模块将其导入 ML Studio。请注意,Saved Dataset部分中的Iris 数据集是原始数据集的子集,并且只包含两个类别。
多类决策森林
决策森林也适用于多类分类。我们将首先使用参数扫描来训练模型。
按照给定的步骤导入 Iris 数据集:
-
前往 ML Studio。点击**+NEW按钮并选择Blank Experiment**。
-
从模块面板中,在Data Input and Output组下找到Reader模块并将其拖拽到实验画布上。
-
此后显示模块属性面板。选择数据源为HTTP。
-
指定一个完整的 URL:
archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
。 -
将数据格式指定为CSV。
-
不要勾选标题行复选框,因为数据集不包含任何标题。你可能会得到如下结果:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_01.jpg
运行实验,当你看到Reader模块上的绿色勾选标记时,右键点击输出端口并点击Visualize。点击任何一列,你可以注意到 ML Studio 显示了一个缺失值。
使用Clean Missing Data模块来删除包含缺失值的行。将可以在Data Transformation组下,然后在模块面板的Manipulation下找到的模块拖拽到画布上。将Reader模块的输出端口连接到该模块的输入端口。在属性面板上,选择Cleaning mode的属性为Remove entire row,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_02.jpg
展开Data Transformation组,然后在模块面板中展开Sample and Split选项,并将Split模块拖拽到画布上。将第一个输出数据集的Fraction of rows参数设置为0.7,其余的保持默认值。这样你就在分割数据集,使得 70%的数据将用于训练,其余的 30%将用于测试。
同样,现在将Multiclass Decision Forest模块拖拽到画布上。要做到这一点,在左侧模块面板的搜索框中输入Decision Forest
,当模块出现时,将其拖拽到画布上。将Resampling method属性设置为Bagging,其余属性保持默认值。保持模块的属性为默认值。
将一个 Train Model 模块拖动到画布上,并将 Multiclass Decision Forest 模块的输出端口连接到 Train Model 模块的第一个输入端口。将 Split 模块的第一个输出端口连接到 Train Model 模块的第二个输入。在 Train Model 模块的属性面板中,点击列选择器并将 Col5 设置为列的目标变量。
接下来,将 Score Model 和 Evaluate Model 模块拖动到画布上。将 Train Model 模块的输出连接到 Score Model 模块的第一个输入,并将 Split 模块的第二个输出连接到 Score Model 模块的第二个输入。然后,将 Score Model 模块的输出连接到 Evaluate Model 模块的第一个输入。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_04.jpg
现在,运行实验,实验完成后,可视化 Evaluate Model 模块的输出以了解模型的性能。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_05.jpg
如前图所示,Iris Versicolour 类别的准确率为 92.3%,而其他类别均为 100%。此外,7.7% 的时间,Iris Versicolour 类别被错误地分类为 Iris Virginica。
注意,您还没有通过调整参数进行任何优化。您可以尝试不同的参数值来评估性能,或者简单地使用 Sweep Parameters 模块来获取最佳参数。
比较模型 – 多类决策森林和逻辑回归
就像任何实验一样,您现在可以比较您的模型与另一个算法。您使用多类决策森林构建了一个模型。现在,使用另一个算法,例如多类逻辑回归来评估预测。
要这样做,首先从实验开始,通过按键盘上的 ctrl 选择 Train 和 Score 模块,然后点击这两个模块。然后,通过在画布上右键单击并粘贴或直接按 ctrl + v 在键盘上粘贴来复制选定的模块。现在,点击画布上的任何位置以取消选择粘贴的模块,并重新排列它们,确保没有模块放置在另一个模块上,并且所有模块都易于阅读。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_06.jpg
现在,通过选择连接并按 Delete 键来移除 Multiclass Decision Forest 和 Train Model 模块之间的连接。注意前面的截图中的连接。从左侧调色板中将 Multiclass Logistic Regression 模块拖到画布上,并将模块的输出连接到 Train Model 模块。将 Multiclass Logistic Regression 模块的属性保留为默认值。将 Score Model 模块的输出连接到 Evaluate Model 模块的第二个输入。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_07.jpg
你可以运行模型以找出新模型的性能,然后你可以比较评估指标。实验运行完成后,可视化 Evaluate Model 模块的输出以了解模型的性能。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_08.jpg
正如你可以注意到的,对于逻辑回归模型,你在所有类别中都得到了 100% 的准确率。在这种场景下,你知道应该选择哪个模型。
使用 Wine 数据集进行多类分类
Wine 数据集是另一个经典且简单的数据集,托管在 UCI 机器学习仓库中。它包含了对在意大利同一地区种植的但来自三个不同品种的葡萄酒内容的化学分析。它通过预测葡萄酒的来源(品种)作为类别或目标变量来确定分类问题的模型。该数据集具有以下 13 个特征(因变量),它们都是数值型:
-
酒精
-
马来酸
-
灰分
-
灰分的碱性
-
镁
-
总酚
-
黄烷醇
-
非黄烷醇酚
-
原花青素
-
颜色强度
-
色调
-
稀释葡萄酒的 OD280/OD315
-
精氨酸
示例或实例被分为三个类别:1、2 和 3。
你可以在 archive.ics.uci.edu/ml/datasets/Wine
上找到更多关于数据集的信息。
带参数扫描的多类神经网络
我们将使用多类神经网络构建模型,并使用 Sweep Parameter 模块优化参数。
如同上次一样,使用 Reader 模块从 archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data
导入数据集。
它是 CSV 格式,没有标题行,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_10.jpg
使用 Split 模块,将其分割为 70:30 的比例,分别用于训练数据和测试数据集。
在左侧模块调色板中的搜索框中输入Sweep
,当出现Sweep Parameters模块时,将其拖动到画布上。然后,将Split模块的第一个输出连接到Sweep Parameters模块的第二个输入,并将Split模块的第二个输出连接到Sweep Parameters模块的第三个输入。
现在,你需要设置数据集的列,这是你的目标列、标签列或类别列,你将训练模型进行预测。在这种情况下,Col1是你要进行预测的目标变量或类别。同时,将扫描模式设置为Entire grid,以测量Classification to Accuracy选项的性能指标。
此外,获取Multiclass Neural Network模块并将其连接到Sweep Parameters模块的第一个输入。像往常一样,将Score Model和Evaluate Model模块拖动到画布上。将Sweep Parameters模块的第二个输出端口连接到Score Model模块的第一个输入端口,并将Split模块的第二个输出连接到Score Model模块的第二个输入端口。然后,将Score Model模块的输出连接到Evaluate Model模块的第一个输入。
运行实验。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_07_09.jpg
当实验运行完成后,可视化Evaluate Model模块的输出,以了解模型的性能。
自己动手做——多类决策丛林
使用相同的 Wine 数据集,并使用Multiclass Decision Jungle模块构建模型。你可以使用 Sweep Parameters 模块来优化算法的参数。在运行实验后,检查评估指标。你是否发现与之前使用神经网络或其他可用算法构建的模型相比,性能有所提升?
摘要
你以理解使用分类进行预测分析开始本章,并探讨了训练、测试和验证分类模型的概念。然后,你继续在 ML Studio 中使用不同的两类和多类分类模型进行实验,例如逻辑回归、决策森林、神经网络和提升决策树。你学习了在训练后如何评分和评估模型。你还学习了如何通过 Sweep Parameters 模块优化学习算法的不同参数。
在探索了两类分类之后,你理解了多类分类,并学习了如何评估相同的模型。然后,你使用不同的可用算法为多类分类构建了几个模型。
在下一章中,你将探索使用聚类(一种无监督学习算法)构建模型的过程。
第八章。聚类
物以类聚——聚类就是关于这个。它是一种无监督学习,其中类别或标签是未知的。因此,你得到一个数据集,然后使用算法,将实例划分并分组到不同的聚类中,目的是将所有相似的实例放在一起。
聚类有许多不同的应用领域,例如客户细分、社交网络分析、计算生物学等等。
在本章中,你将开始了解K-means 聚类算法,然后你将学习如何使用 ML Studio 构建模型。
理解 K-means 聚类算法
K-means 聚类算法是最受欢迎的聚类算法。它简单而强大。正如其名所示,该算法从数据集中创建 K 个聚类,其中 K 是你决定的数字。为了简化,让我们考虑一个具有两个特征的数据集,并将它们绘制在二维空间中,一个特征在 x 轴上,另一个在 y 轴上。再次注意,由于聚类是一个无监督学习问题,不需要标签、类别或依赖变量。
使用 K-means 算法,为 K 个聚类确定 K 个质心。一个聚类中的所有点都离其质心比离任何其他质心更近。
考虑 K =3,其中存在 3 个聚类和因此 3 个质心,正如你可以在下面的图中找到的那样。所以根据直觉,取任意一个点并计算其到三个质心的距离。该点将属于其质心最近的聚类。
对于一个点,让 d1 表示到质心 1 的距离,d2 表示到质心 2 的距离,d3 表示到质心 3 的距离。
如果 d2 < d1 并且 d2 < d3,那么离质心 2 最近的点属于聚类 2。让我们看一下下面的图解:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_01.jpg
使用 ML Studio 创建 K-means 聚类模型
现在,是你自己构建聚类模型的时候了。ML Studio 提供了两个专门用于 K-means 聚类的模块。
网址 www.biz.uiowa.edu/faculty/jledolter/DataMining/protein.csv
包含一个 CSV 格式的数据集。
它包含了来自 25 个欧洲国家的 9 种不同食物来源的蛋白质摄入量。数据集的前几个实例如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_02.jpg
让我们构建一个聚类模型,根据来自不同来源的各国蛋白质摄入量将数据集分组到三个聚类中。
创建一个新的实验,并将数据输入和输出部分中的Reader模块从模块调色板拖动到画布左侧。在右侧的属性面板中,选择数据源为通过 HTTP 的 Web URL,数据格式为CSV,并勾选CSV 或 TSV 有标题行的复选框。此外,在 URL 文本框中,添加之前提到的 CSV 文件的 URL。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_03.jpg
将K-Means 聚类模块拖动到画布上。此模块用于算法。由于你的数据集需要三个簇,请在属性面板中将质心数量选项设置为3,并保留其他参数为默认值,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_04.jpg
将训练聚类模型模块拖动到画布上并建立连接,如图所示。对于数据集中的国家列,你的目标是让算法基于蛋白质摄入量工作。因此,排除该列,包含其他所有内容。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_05.jpg
将分配到簇模块拖动到画布上并建立连接,如图所示。排除国家列,包含其他所有内容。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_06.jpg
现在,拖动一个项目列模块,并将分配到簇模块的输出连接到其输入。通过在模块的属性面板中点击启动列选择器选项,选择所有列,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_08.jpg
运行实验,在项目列模块的输出端口上右键单击,并按以下方式分配簇来可视化输出:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_08_07.jpg
输出表的最右侧是分配列,其中包含分配给每个簇的簇(编号)。正如你所见,我们发现不同的国家根据蛋白质摄入量落入三个簇之一,例如,捷克斯洛伐克属于簇 2,而法国属于簇 1。
在这里,你已经找到了相同训练数据的簇。然而,在训练后,你还可以找到新数据集的簇。
亲自动手
在 ML Studio 的保存的数据集选项下有一个名为Iris Two Class Data的样本数据集。使用这个数据集构建一个K-Means 聚类模型,其中K(质心数量)= 2。
这不是一个测试,但你注意到一个类别的所有实例都落在同一个簇中吗?不要混淆簇编号为0和1,因为它只是一个数字,即使你把簇 0 读作 1,把1读作0,也不会造成伤害。
聚类与分类
对于初学者来说,区分聚类问题和分类问题可能会感到困惑。分类与聚类在本质上是有区别的。分类是一个监督学习问题,其中你的类别或目标变量是已知的,用于训练数据集。算法被训练去观察例子(特征和类别或目标变量),然后你使用测试数据集对其进行评分和测试。
聚类作为一种无监督学习,它作用于没有标签或类变量的数据集。此外,你不需要使用测试数据集进行评分和测试。因此,你只需将你的算法应用于你的数据,并将它们分组到不同的簇中,比如 1、2 和 3,这些簇之前是未知的。
简单来说,如果你有一个数据集,并且有一个类别/标签或目标变量作为分类变量,你必须根据给定的数据集预测新数据集的目标变量,那么这是一个分类问题。如果你只得到一个没有标签或目标变量的数据集,并且你只需要将它们分成n个簇,那么这是一个聚类案例。
摘要
在对无监督学习进行快速概述之后,你继续了解聚类和 K-means 聚类算法。然后,你使用 ML Studio 构建了一个聚类模型,并了解了 K-means 聚类算法的三个模块。
在下一章中,你将探索推荐系统,并学习如何构建一个简单的模型。
第九章。推荐系统
推荐系统如今很常见。您可能没有注意到,但您可能已经在某个地方成为这样的系统的一个用户或接收者。大多数表现良好的电子商务平台都使用推荐系统向用户推荐商品。当您在亚马逊网站上看到根据您之前的偏好、购买和浏览历史推荐给您一本书时,亚马逊实际上正在使用这样的推荐系统。同样,Netflix 使用其推荐系统为您推荐电影。
推荐器或推荐系统通常基于用户特征、偏好、历史等信息推荐产品或信息。因此,推荐总是个性化的。
直到最近,构建推荐系统并不容易或直接,但只要您准备好了数据,Azure ML 就能让您轻松构建一个推荐系统。
本章向您介绍了推荐系统的概念,以及 ML Studio 中可用的模型,供您构建自己的推荐系统。然后,它通过一个简单的示例引导您了解构建推荐系统的过程。
Matchbox 推荐器
微软开发了一个基于概率模型(贝叶斯)的大规模推荐系统,称为Matchbox。该模型可以通过观察用户如何对物品(如电影、内容或其他产品)进行评分来了解用户的偏好。基于这些观察,当请求时,它会向用户推荐新的物品。
Matchbox 以最有效的方式使用每个用户可用的数据。它使用的学习算法专门为大数据设计。然而,其主要特点是 Matchbox 利用了用户和物品都可用到的元数据。这意味着它关于一个用户或物品所学习到的信息可以转移到其他用户或物品。
您可以在微软研究项目的链接中找到更多关于 Matchbox 模型的信息。
推荐类型
Matchbox 推荐器支持构建四种类型的推荐器,这几乎涵盖了所有场景。让我们看看以下列表:
-
评分预测:这会预测给定用户和物品的评分,例如,如果一部新电影上映,系统将预测您对该电影的评分(1-5 分)。
-
物品推荐:这会向给定用户推荐物品,例如,亚马逊建议您阅读书籍,或者 YouTube 建议您在主页上观看视频(尤其是当您登录时)。
-
相关用户:这会找到与指定用户相关联的用户,例如,LinkedIn 建议您可以与之建立联系的人,或者 Facebook 建议您添加的朋友。
-
相关物品:这会找到与指定物品相关的物品,例如,当您阅读博客文章时,博客网站会建议您阅读相关帖子。
理解推荐模块
Matchbox 推荐器包含三个组件;正如你可能猜到的,每个组件分别用于训练、评分和评估数据。模块描述如下。
训练 Matchbox 推荐器
此模块包含算法并生成训练好的算法,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_9.jpg
此模块接受以下两个参数的值。
特质数量
此值决定了算法将学习多少与每个用户和项目相关的隐式特征(特质)。此值越高,预测将越精确,因为它会导致更好的预测。通常,它取值范围为 2 到 20。
推荐算法迭代次数
这是算法遍历数据的次数。此值越高,预测将越好。通常,它取值范围为 1 到 10。
评分 Matchbox 推荐器
此模块允许您指定所需的推荐类型及其对应参数:
-
评分预测
-
项目预测
-
相关用户
-
相关项目
让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_10.jpg
模块的 ML Studio 帮助页面提供了所有对应参数的详细信息。
评估推荐器
此模块接受测试和评分数据集,并生成评估指标,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_11.jpg
它还允许您指定推荐类型,例如评分模块及其对应参数。
构建推荐系统
现在,学习自己构建一个将是有益的。我们将构建一个简单的推荐系统,为特定用户推荐餐厅。
ML Studio 包括三个样本数据集,如下所述:
-
餐厅客户数据:这是一组关于客户的元数据,包括人口统计信息和偏好,例如,纬度、经度、兴趣和个性。
-
餐厅特征数据:这是一组关于餐厅及其特征的元数据,例如食物类型、用餐风格和位置,例如,地点 ID、纬度、经度、价格。
-
餐厅评分:这包含了用户对餐厅在 0 到 2 的评分范围内的评分。它包含以下列:用户 ID、地点 ID和评分。
现在,我们将构建一个推荐器,为用户推荐一定数量的餐厅(用户 ID)。要构建推荐器,请执行以下步骤:
-
创建一个新的实验。在模块调色板中的搜索框中输入“餐厅”。前三个数据集将被列出。依次将它们全部拖到画布上。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_1.jpg
-
将Split模块拖动并连接到Restaurant ratings模块的输出端口。在右侧的属性部分,选择Splitting mode为Recommender Split。其他参数保持默认值。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_2.jpg
-
将Project Columns模块拖动到画布上,并选择以下列:userID、latitude、longitude、interest和personality。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_3.jpg
-
类似地,拖动另一个Project Columns模块并将其连接到Restaurant feature data模块,并选择以下列:placeID、latitude、longitude、price、the_geom_meter、address和zip。
-
将Train Matchbox Recommender模块拖动到画布上,并按照以下截图所示连接到三个输入端口:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_4.jpg
-
将Score Matchbox Recommender模块拖动到画布上,并按照以下截图所示连接到三个输入端口并设置属性值:https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_5.jpg
-
运行实验,完成后,右键单击Score Matchbox Recommender模块的输出,然后单击Visualize以探索评分数据。https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_6.jpg
您可以从测试数据集中查看为用户推荐的不同的餐厅(ID)。下一步是评估评分预测。将Evaluate Recommender模块拖动到画布上,并将Split模块的第二个输出连接到其第一个输入端口,并将Score Matchbox Recommender模块的输出连接到其第二个输入端口。保持模块的默认属性。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_09_7.jpg
再次运行实验,完成后,右键单击Evaluate Recommender模块的输出端口,然后单击Visualize以找到评估指标。
评估指标归一化折现累积增益(NDCG)是从测试集中给出的真实评分估计得出的。其值范围从0.0到1.0,其中1.0代表实体最理想的排序。
摘要
您从获取关于推荐系统的基本知识开始。然后您了解了 ML Studio 附带的 Matchbox 推荐器及其组件。您还探索了您可以使用它做出的不同类型的推荐。最后,您构建了一个简单的推荐系统,为特定用户推荐餐厅。
在下一章中,您将探索如何通过在 R 或 Python 中编写代码来扩展您的实验,使其超越 ML Studio 的能力。
第十章. 使用 R 和 Python 扩展功能
你已经使用 ML Studio 构建了模型,并已经意识到它有多么简单和强大。尽管 ML Studio 中有大量的现成模块可用,但仍有许多任务无法在 ML Studio 内完成,以构建所需的模型和解决当前的问题。微软意识到这一点,因此允许你通过编写 R 或 Python 代码来扩展你的实验,超出 ML Studio 的功能。
本章介绍了将你的代码集成到实验中的过程。你不需要任何 Python 或 R 的先验技能就能成功完成本章。然而,如果你对这两种语言中的任何一种有所了解,你将能更好地利用这一点。此外,如果你想以专业水平使用 Azure ML,强烈建议你获得 R 或 Python 的某些技能。如果你已经了解 Python 或选择学习它,那么你应该接触 Pandas 库;特别是,你应该学习如何使用 DataFrame
模块,因为你很快就会知道为什么。如果你选择 R,那么 data.frame
是它的默认数据结构,你不可能错过它。
我不推荐你使用一种语言而不用另一种。如果你两种语言都不了解,这取决于你决定使用哪一种。本章接下来的部分为你提供了关于 Azure ML 的两种语言的快速介绍。
R 语言简介
R 是一种开源的统计编程语言,近年来,它非常受欢迎。R 在全球拥有显著且活跃的社区,并且拥有丰富的库/包,每天都有新的添加。在 Azure ML 领域,R 是一等公民,这意味着它对该语言有原生支持。在众多数据结构中,R 有 data.frame
数据结构,可以假设它是一个具有行和列以及列标题的数据表。尽管存在差异,但你可以安全地将其视为 ML Studio 中的数据集。因此,每当在实验中将数据集传递给 R 代码时,它就隐式地转换为 data.frame
数据结构。
Python 简介
Python 也是一种开源的通用、高级编程语言。这意味着它允许你执行其他功能,例如 Web/移动/桌面应用程序开发,以及科学、数学和统计编程。Python 在开发者中以及科学界(如统计社区的 R 语言)中都非常受欢迎。Python 在数据整理或清洗等任务中也非常流行,这大致是手动将数据从一种原始形式转换为另一种便于消费的格式的过程。对于这类任务,Python 中的 Pandas 库非常有用,并且被广泛使用。Pandas 库中的DataFrame
对象类似于 R 中的data.frame
数据结构以及 ML Studio 中的数据集。在 Azure ML 中,Microsoft 将这个库与基础 Python 和其他有用的库(如NumPy
、SciPy
、Pandas
、IPython
、Matplotlib
等)一起提供。如果你已经熟悉 Python,那么你使用的是 Python 2.7.7 的Anaconda发行版。
Pandas 的DataFrame
对象类似于 R 中的data.frame
数据结构和 ML Studio 中的数据集。
为什么你应该通过 R/Python 代码进行扩展?
自从本章引入以来,你可能想知道,如果 ML Studio 看起来既简单又完整,那么为什么还需要通过编写代码来扩展它?如果你这样想,那么请让我向你保证,情况并非如此。为了生产适用于现实世界的预测分析解决方案,ML Studio 提供的现成功能非常有前景,但非常有限。以下是一些你可能需要编写代码并与 ML Studio 集成的常见场景:
-
ML Studio 中可用的算法集有限。如果需要某种算法来进行预测或评估,你需要编写代码并将其集成。例如,到目前为止,ML Studio 中还没有专门用于时间序列分析的算法。
-
虽然有一些选项可用,但大多数情况下,ML Studio 的现成模块无法满足探索和数据处理的需求,包括数据整理和预处理,例如,需要对数据进行小波变换的需求。
-
ML Studio 中的数据可视化支持非常有限,大多数数据可视化需求都无法通过它来满足。
-
当你需要从头开发一种全新的模型时,你可以通过编写代码来实现,然后将其发布为 Web API。
-
要从新的数据源或不同格式的数据集中获取数据,你需要编写代码并在 ML Studio 内部消费这些数据。
使用 Python 语言扩展实验
您可以通过名为执行 Python 脚本的模块扩展您的 Python 脚本实验。您可以通过处理时间序列数据集的示例来更深入地了解这个模块。ML Studio 附带一个名为时间序列数据集的样本数据集,这是一个非常简单的包含两列的时间序列数据集,其中一列代表时间作为整数,另一列显示值作为整数。
这个示例涉及在 Python 中编码,然后在 R 中编码,目的是展示代码集成的效果。尽管将通过嵌入的注释对代码进行一些解释,但可能不会涉及每个细节,因为这超出了本书的范围。如果您是编程新手,只需按照说明操作以获得所需输出并了解集成。
理解执行 Python 脚本模块
要将 Python 代码与 ML Studio 集成,您应该使用执行 Python 脚本模块,这是截至本书编写时唯一可用于 Python 的模块。此模块有三个输入端口和两个输出端口,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_1.jpg
虽然前两个输入是数据集,但第三个输入期望上传一个.zip
文件到 ML Studio 以导入现有代码;您可以在以下子部分中了解更多信息。第一个输出生成可以用于另一个模块的数据集,第二个输出是生成的可视化,Python 设备,您只能右键单击并选择可视化来查看生成的图表。它支持控制台输出以及使用 Python 解释器显示 PNG 图形。
模块的属性部分附带一个非常基本的代码编辑器,您可以在其中编写代码。它还附带了一个基本的代码模板。模块必须包含一个名为azureml_main
的函数,并且它应该有零到两个参数。该函数还必须返回一个DataFrame
对象。让我们看一下以下截图,它显示了我们需要与 ML Studio 集成的 Python 代码:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_2.jpg
如您所注意到的,输入数据集被转换为 Pandas 数据框。将数据集连接到输入端口不是必须的。当输入数据端口为空时,相应的输入数据框将具有值None
或null
。请注意,输入端口与函数参数之间的映射是位置性的,也就是说,如果连接了第一个输入端口,它将被映射到函数的第一个参数dataframe1,如果连接了第二个输入,它将被映射到函数的第二个参数dataframe2。
您需要确保 Python 代码有适当的缩进;否则,会导致错误。
使用 Python 创建可视化
你可以使用Matplotlib
库或基于它的任何其他库创建数据可视化,并在浏览器中显示,就像 ML Studio 中的任何其他可视化一样。然而,创建的可视化不会自动重定向。你必须将它们保存为 PNG 文件,以便 ML Studio 可以拾取并使其通过Execute Python Script
模块的第二个输出端口可用。使用Matplotlib
库通过模块生成数据可视化的总体步骤如下:
-
将
Matplotlib
库后端从默认的基于 Qt 的渲染器更改为agg
-
使用 Matplotlib API 创建一个图形
-
获取坐标轴,并使用 Matplotlib API 或任何其他以 Matplotlib 为基础的绘图库(例如 Pandas)在同一个坐标轴上创建所有图表
-
将生成的图形保存为 PNG 文件
现在你已经了解了如何集成 Python 代码的概述,现在是时候带你通过一个示例了。
使用 Python 脚本的简单时间序列分析
时间序列是一系列数据点,每个数据点都与一个时间戳相关联,通常是在一个时间间隔内测量的。简单的时间序列分析是找到序列的移动平均。
移动平均或简单移动平均可以定义为一系列中前n个数据的平均值。在这里,n是窗口大小。考虑以下简单的时间序列数据,其中第一列是时间,第二列包含值,第三列计算窗口大小为 3 的移动平均。对于每个值,其移动平均是包括自身在内的前三个值的平均值:
我们将使用rolling_mean
Pandas 方法来计算窗口大小为 10 的移动平均,以演示 Python 脚本集成。我们将使用之前提到的 ML Studio 中的样本时间序列数据集,向数据集中添加一个新列,并通过计算其简单移动****平均为其赋值。让我们看看下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_3.jpg
代码中的注释是自解释的。如果你使用前面的代码运行你的实验,第一个输出将为你提供第三列包含移动平均值的修改后的数据集,第二个输出将为你提供以下可视化,其中红色线代表移动平均:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_4.jpg
导入现有的 Python 代码
并非总是实际在一个脚本框中编写足够的代码来满足要求。也有可能您已经有一个构建并测试过的代码或外部库,您希望在 ML Studio 中使用。在这种情况下,您可以使用模块的第三个输入端口(Input3)。您可以将预构建的脚本保存在一个文件夹中,将其压缩,并上传到 ML Studio。它将在模块调色板的 保存数据集 部分中可用。然后,将其拖到您的实验画布上,并将其连接到模块的第三个输入端口,即 Zip Bundle。Azure ML 执行框架将在运行时内部解压缩它,并将内容添加到 Python 解释器的库路径中。这意味着 azureml_main
入口点函数可以直接导入这些模块。
自己动手做 – Python
在前一个示例的数据框中添加另一列,用于移动标准差,并将其作为另一条线绘制。
小贴士
使用移动窗口函数 rolling_std
。
使用 R 语言扩展实验
与 Python 类似,您也可以使用 R 代码/脚本在 ML Studio 内部扩展您的实验。然而,与 Python 不同,您有两个 R 模块,如下所示:
-
执行 R 脚本模块
-
创建 R 模型模块
理解执行 R 脚本模块
与 Python 模块类似,执行 R 脚本 模块也有三个输入端口和两个输出端口。模块的属性面板包含一个 R 脚本编辑器,您可以在其中输入代码,如下一个截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_5.jpg
该模块附带一个示例脚本,如前一个截图所示。您可以使用 maml.mapInputPort()
方法,将端口号作为参数 1 用于 Input1,参数 2 用于 Input2,以将输入数据集作为 R data.frame
对象访问。
第三个输入期望上传一个 .zip
文件到 ML Studio 以导入现有代码。第一个输出生成一个可以在另一个模块中进一步使用的数据集,第二个输出是生成的可视化,R 设备,您可以通过右键单击它并点击 可视化 来查看生成的图形。它支持控制台输出和 R 解释器的 PNG 图形显示。您不需要采取任何额外步骤来通过模块的第二输出端口提供可视化,因为它将自动重定向。
记住,如果您导入使用 CSV 或其他格式的数据,您必须在将数据用于 R 模块之前将其转换为数据集。
使用 R 脚本进行简单的时序分析
我们将使用之前使用过的相同的时间序列示例,但这次使用 R 脚本。我们将使用名为 zoo 的 R 包中的函数,该包已经在 ML Studio 中可用。让我们看一下以下截图,它显示了我们将要集成到 ML Studio 中的 R 代码:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_6.jpg
代码中的注释是自解释的。然而,请注意,在第 13 行,新列的移动平均值从第 10 个位置分配到最后的第 126 个位置。因为我们已经将移动窗口设置为 10,所以该列的前九个值将是空或缺失的。
如果您使用前面的代码运行实验,第一个输出将为您提供包含第三列移动平均值的修改后的数据集,第二个输出将为您提供以下可视化效果,其中红色线条代表移动平均:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_10_7.jpg
导入现有的 R 代码
就像 Python 一样,您可以使用模块的第三个输入端口(Input3)来导入外部代码。您可以将预构建的脚本保存在一个文件夹中,ZIP 它,然后上传到 ML Studio。要上传 ZIP 文件到您的工作区,请点击 新建,点击 数据集,然后选择 从本地文件 和 ZIP 文件 选项。上传后,ZIP 文件将出现在 已保存的数据集 列表中。然后,将其拖到实验画布上,并将其连接到模块的第三个输入端口,即 Zip Bundle。ZIP 文件中的所有文件在运行时都将可用。如果 ZIP 文件中有目录结构,则将保留。ZIP 包中的根目录被称为 src
。
例如,如果您已创建一个名为 myExternalCode.R
的 R 文件,将其 ZIP 成文件,并上传到 ML Studio,那么您可以从模块的脚本编辑器中访问它,如下所示:
source(\"src/myExternalCode.R\")
包含 R 包
如果您想在 ML Studio 中包含任何未预装的 R 包,那么您可以 ZIP 该包并上传。通常,R 包作为可下载的 ZIP 文件提供。如果您已经下载并解压了您代码中使用的 R 包,您需要再次 ZIP 该包,否则上传 R 包的原始 ZIP 文件到 ML Studio。您需要在 执行 R 脚本 模块中将 R 包作为自定义代码的一部分进行安装,并且该包将仅对您的实验进行安装。
理解 创建 R 模型 模块
创建 R 模型 模块可以用来创建未训练的模型,使用 R 代码。您可以使用基于 R 包或您的新实现的任何学习器来构建您的模型。
该模块将训练脚本和评分脚本,即两个用户定义的 R 脚本,作为属性部分的输入,根据这些输入,将构建模型。
在您创建模型后,您可以使用 训练模型 模块在类似于 ML Studio 中任何其他学习者的数据集上训练模型。然后,将其传递给 评分模型 模块以使用模型进行预测。然后,您可以保存训练好的模型,创建评分实验,并将其作为 Web 服务发布。
DIY – R
让我们看看以下步骤,使用 R 编码来构建自己的测试:
-
在数据框(在先前的示例中)中添加另一列来移动中位数,并将其作为另一条线绘制出来。
小贴士
使用移动窗口函数
rollmedian
。 -
显示 ML Studio 中已安装的所有包。您可以使用以下代码:
data.set <- data.frame(installed.packages())maml.mapOutputPort(\"data.set\")
摘要
在本章中,您已经完成了 ML Studio 中的一个非常重要的部分。您从 Azure ML 相关的 R 和 Python 介绍开始。您探讨了为什么您可能需要使用代码在 ML Studio 内部扩展实验的重要性。然后,您学习了如何在 ML Studio 内部执行 Python 脚本并导入已构建的代码。您通过一个简单的时序分析示例应用了同样的方法,并使用 Python 创建了可视化。在 Python 之后,您同样对 R 进行了探索,并执行了相同的时序分析任务,并使用 R 脚本绘制了图表。ML Studio 还提供了一个模块,除了运行脚本之外,还可以使用 R 构建完整的模型。
在下一章中,您将了解到如何从 ML Studio 内部的实验中部署模型作为 Web 服务 API,这可以在外部使用。
第十一章。将模型作为 Web 服务发布
到目前为止,你已经了解了如何构建不同的预测模型作为实验。现在,你可能想知道这在现实生活中的场景中会有什么用途。其中一个用途是在你构建和测试你的模型之后,你可以在实验中直接使用数据集进行预测,但在大多数情况下,模型的结果或预测需要用于其他地方,可能由其他人使用。考虑你构建了一个推荐模型,它推荐买家可能感兴趣的商品。因此,这些预测需要电子商务网站向潜在买家展示推荐的产品项。再考虑一个场景,你使用聚类构建了一个用于市场细分的模型。你的公司的营销主管应该通过将结果集成到他们的软件中或简单地使用熟悉的 Microsoft Excel 来分析这个模型。
基本上,你必须将你构建的预测模型在某个环境中可用,以便组织内部或外部的人可以使用它。传统上,这通常是一项繁琐的工作,需要编写和测试大量代码。然后,根据需要准备基础设施。
现在,Azure ML 消除了所有痛苦。在本章中,你将了解如何轻松地将模型发布到实验中,并将其作为 web 服务 API 使其他人可以使用。
简而言之,你可以按照以下简单步骤发布你的模型:
-
准备你的模型以作为 web 服务发布。
-
准备评分实验。
-
指定 web 服务的输入和输出。
-
将其作为 web 服务发布和测试。
准备要发布的实验
在开始部署之前,你需要准备好你的实验。为此,你需要完成你的实验,成功运行它们,评估并确定要使用的训练好的模型。为了说明,我们这里有一个简单的模型,它根据年龄、教育、性别和种族预测成年人的收入。该模型使用双分类决策森林模块来预测一个人是否有超过 50K 的收入。构建实验的详细信息可以在第七章分类模型中找到。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_01.jpg
保存训练好的模型
一旦你对你的模型有信心,你可以将其保存为训练好的模型。为此,在画布上右键单击训练模型模块的输出端口,然后单击另存为训练模型选项以保存训练好的模型,该模型以后可以使用。当出现保存训练模型弹出窗口时,你必须指定一个名称和可选的描述文本。然后,点击屏幕右侧的勾选按钮以保存训练好的模型,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_02.jpg
保存的模型将像预测模块一样,可以被评分模型模块使用给定的特征集进行评分。它将作为模块出现在屏幕左侧模块调色板中训练模型组下。
如果你已经对模型进行了任何更改,比如更改了算法的参数等,那么你必须重新保存训练模型,并且当弹出窗口出现时,在屏幕顶部勾选这是现有训练模型的新版本选项,并选择之前保存的模型名称。
创建评分实验
评分实验是指使用训练好的模型模块进行预测(评分)的实验。你可以创建一个新的实验,使用训练模型模块,并使用数据集进行预测。ML Studio 通过一个按钮就能轻松实现这一点,如下面的截图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_13.jpg
当训练实验成功运行时,按钮会变为激活状态。成功运行你的收入预测器实验后,然后点击创建评分实验按钮来创建与现有实验相对应的评分实验。完成此操作后,你将看到以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_14.jpg
在幕后,ML Studio 已经为你完成了以下任务:
-
它将你的训练模型保存为屏幕左侧模块调色板中训练模型部分的模块。
-
它创建了现有训练实验的副本,然后替换了机器学习算法模块和训练模型模块,用保存的训练模型替换。
-
它移除了评分实验中明显不需要的模块——在这个例子中是分割和评估模型模块。
-
它添加了Web 服务输入和Web 服务输出模块,并将它们连接到实验中的默认位置。
你也可以手动执行这些步骤并创建一个评分实验。然而,通过这种方式创建实验,ML Studio 会将训练和评分实验链接起来。当你打开任何一个链接时,另一个链接将以标签的形式出现,这样你就可以轻松地在训练和评分实验之间切换。
Web 服务输入和Web 服务输出模块指定了当模型作为 Web 服务发布时输入的去向和输出的来源。现在这些模块已经连接到默认位置,你需要计划和连接到正确的模块。
指定 Web 服务的输入和输出
在发布网络服务之前,您需要指定网络服务将接受什么作为输入以及您感兴趣的输出。假设为了我们的说明,我们需要从输入中预测某人的收入水平(即小于或等于 50K 或大于或等于 50K):年龄、教育、性别和种族。您可以使用项目列模块实现这一点。
在您的网络服务中,输入应进入评分模型模块。因此,将网络服务输入模块连接到评分模型模块。添加一个项目列模块,并将其输入端口连接到评分模型模块的输出。在模块属性面板中,仅选择评分标签选项。让我们看看以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_15.jpg
在实验成功运行后,您可以在评分实验中检查两个项目列模块的输出;其输出符合预期。现在,这个实验可以发布为网络服务。
将模型发布为网络服务
将模型发布为网络服务非常简单。要发布模型,请点击发布网络服务按钮,并在它请求确认时点击是,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_07.jpg
这可能需要一段时间,一旦完成,它将带您进入已发布的网络服务仪表板页面。您可以通过点击链接返回父评分实验,该链接是查看最新选项(参见图中的2)。查看快照链接也会带您进入相同的父评分实验,但它以锁定视图显示实验。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_08.jpg
默认端点或已发布的网络服务 API 建议如何调用或消费网络服务。请求/响应选项(参见图中的5)指定您将使用一个特征集调用网络服务,并根据您定义的输出获得一个基于预测的响应。批量执行选项(参见图中的6)要求您传递一个数据集(特征矩阵)作为文件,并获取作为数据集的输出预测。
视觉测试网络服务
您可以通过点击测试按钮(参见图中的7)来视觉测试已发布的网络服务。点击按钮,将出现一个弹出表单。填写不同的特征以进行预测。填写表单,并点击屏幕右下角的勾选按钮,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_09.jpg
在从网络服务获得响应后,您将看到以下图所示的消息:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_10.jpg
如前图所示,它返回了预测标签**“>50K”。您也可以通过下载 Excel 文件(参考8**)来测试该网络服务,该文件已配置好以连接到网络服务。只需填写字段即可查看结果。
消费已发布的网络服务
现在由于网络服务已发布并作为 API 提供,您可以使用您选择的编程语言编写程序,并消费 API 以获取预测或 API 的结果。API 需要一个API 密钥,您可以在已发布的网络服务仪表板页面上找到(参考4)。没有 API 密钥,您将无法连接到网络服务。在 API 帮助页面上,您将找到有关已发布 API 的详细文档,包括C#.Net、Python和R中的示例代码,其中包含必要的内联注释。您可以从相同的网络服务仪表板页面找到 API 帮助页面的链接(参考5和6)。
网络服务配置
在发布模型后,网络服务名称将在网络服务页面中可用,并带有指向网络服务仪表板页面的链接,如下图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_11_12.jpg
点击网络服务的名称,在仪表板页面,点击配置选项(参考1)。在配置页面,您可以自定义与网络服务相关的信息,例如,显示名称、描述、输入模式、输出模式等。
更新网络服务
在以下两种情况下,您可能需要更新您已发布的网络服务:
-
您的原始模型已更改,例如,您修改了模型参数以改进性能等
-
您需要更改网络服务的输入或输出
对于第一种情况,您需要回到您的原始训练实验,进行更改,运行它,然后点击更新评分实验链接以更新评分实验。对于这两种情况,您都必须回到评分实验并重新发布,因此它将覆盖之前发布的实验。
摘要
在本章中,您探讨了将模型发布为网络服务的完整步骤,以便其他人可以使用 API 并消费网络服务。您准备了一个实验以使其准备好发布,并保存了一个训练好的模型。然后您创建了一个评分实验并为其设置了输入和输出。您将评分实验发布为网络服务并进行了视觉测试。您还探讨了如何消费网络服务 API,以及如何通过进行配置更改和更新来维护它一段时间。
在下一章中,您将通过解决回归问题案例研究练习来学习如何构建自己的模型。
第十二章:案例研究练习 I
现在你已经对 Azure ML 有了相当的了解!是时候利用这些知识来研究一些现实世界的问题了。你可能现在还不能完全解决这些问题,但你可以尝试并提供某种形式的解决方案。
在本章中,我们将以案例研究的形式提出一个问题,并使用一个非常简单但端到端的方法来解决它。像之前的章节一样,它不会提供包含所有细节的逐步指南;然而,它只会为你提供解决问题的线索。本章假设你已经成功完成了所有前几章的阅读,或者已经了解 Azure ML。
问题定义和范围
如果你正在飞往某个地方,如果航班延误,那将是一个非常奇怪的经历。我们在这方面无能为力,但鉴于历史数据集,我们可以预测并提前知道某个航班是否会延误。这就是我们将作为案例研究解决的问题。
预测航班延误问题的完整解决方案将非常庞大,由于需要大量数据处理,它超出了本书的范围。然而,我们将通过限制数据集和简化解决方案来缩小范围。
数据集
我们将使用 ML Studio 默认提供的样本数据集。这是从美国运输部(DOT)的TranStats数据收集中提取的乘客航班准时性能数据的子集(www.transtats.bts.gov/DL_SelectFields.asp?Table_ID=236&DB_Short_Name=On-Time
)。
该数据集已经预处理并筛选,仅包括 2013 年 4 月至 2013 年 10 月期间美国大陆上最繁忙的 70 个机场。它包含以下列:
-
Carrier:这包含由 IATA 分配的代码,通常用于识别一个承运人。
-
OriginAirportID(出发机场的机场 ID):这是 DOT 分配的一个识别号,用于识别一个独特的机场。
-
DestAirportID(目的地机场的机场 ID):这是 DOT 分配的一个识别号,用于识别一个独特的机场。
-
CRSDepTime:这是预定出发时间(当地时间,格式为 hh:mm)。
-
DepDelay:这是预定出发时间和实际出发时间之间的分钟数差异。提前出发显示为负数。
-
DepDel15(出发延误指示器):这表示航班延误 15 分钟或更长时间(在此处,1=是)。
-
CRSArrTime:这是预定到达时间(当地时间,格式为 hh:mm)。
-
ArrDelay:这是预定到达时间和实际到达时间之间的分钟数差异。提前到达显示为负数。
-
ArrDel15(到达延误指示器):这表示航班延误 15 分钟或更长时间(在此处,1=是)。
-
Cancelled:这是取消航班的指示符(在这里,1=是)。
注意
注意,已取消的航班已被视为延误,并设置为 ArrDel15 = 1。
根据我们的经验,我们知道航班时间经常受到天气条件的影响,因此收集和处理与出发和目的地机场相关的相关天气数据是有意义的。为了简化,我们在这里只考虑准时到达的航班数据集。然而,我们鼓励您进行实验,合并天气数据集,并准备您的数据集以构建模型。ML Studio 中默认包含一个天气数据集样本。
数据探索和准备
在您的实验中,拖动Flight Delays Data样本数据集,并点击Visualize选项来探索数据集。您会发现某些列有很多缺失值。您可以使用Clean Missing Data模块通过将其替换为MICE作为清理模式来清理缺失数据。
有一些列,如DayOfWeek、OriginAirportID和DestAirportID包含连续数字;然而,它们是分类变量。因此,使用Metadata Editor模块将它们设置为Categorical。
特征选择
在您开始开发模型之前,选择或生成一组具有最大预测能力的变量,并删除任何冗余和不那么重要的特征是非常重要的。在这种情况下,所有数据点都是同一年份的,因此年份列在这里不是必需的。我们感兴趣的是预测旅程开始前的延误,因此DepDel15和DepDelay列不是重要的。同样,ArrDelay和ArrDelay15列都是关于到达延误的。在这里,我们只对航班是否延误感兴趣。所以,ArrDelay是不需要的。所有取消的航班都被标记为延误,因此Cancelled列也是不必要的。您可以使用Project Columns模块过滤这些列,剩下的将是包含所需特征和标签的列。
模型开发
您必须预测航班是否会延误。如您从数据集中发现的那样,任何延误超过 15 分钟的航班都被标记为延误,并且相应的ArrDelay15标签包含1。在这里,ArrDelay15列是目标变量,它只包含0和1。显然,这是一个二分类问题。
如您所探索的那样,ML Studio 中提供了几种二分类算法。为了简化,我们在这里将使用Two-Class Boosted Decision Tree模块构建模型,以下是一些参数:
-
每棵树的最大叶节点数选项设置为128
-
每个叶节点所需的最小样本数选项设置为50
-
学习率选项设置为0.2
-
构建的树的数量选项设置为500
鼓励您尝试不同的算法,并使用Sweep Parameters模块来选择最佳参数。
为了训练模型,您需要将数据集拆分,并使用一部分进行训练,另一部分用于评分和评估。
您的实验在成功运行后可能看起来如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_12_01.jpg
在您对实验满意且对训练模型满意后,您可以继续部署它,通过将其作为网络服务发布。
模型部署
在将您的模型作为网络服务发布之前,创建一个评分实验,并确保Web 服务输入和Web 服务输出模块已正确连接。如果您希望输出格式正确,例如,仅输出评分标签和输入到评分模型中可能不包含标签列;在这种情况下,您还可以在连接到Score Model模块的Project Columns模块中过滤ArrDelay15列以及其他列。让我们看一下以下截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_12_02.jpg
然后,发布您的评分实验,以便它可以在预发布环境中作为网络服务使用。通过视觉和 Excel 测试您的网络服务。如果您擅长编程,鼓励您通过编写一个小型客户端程序来测试您的网络服务。
摘要
您已经在这个案例研究中完成了预测解决方案的构建。您从定义和理解问题开始本章。您获取了数据集,在这个案例中是 ML Studio 中可用的样本数据集。然后,您继续进行数据探索和准备,在构建预测模型之前。您使用了提升决策树来构建模型。在实验成功运行后,您创建了一个评分实验,并在其中使用了保存的训练模型。最后,您将实验作为网络服务发布并进行了测试。
在下一章中,您将学习如何构建自己的模型,其中包含另一个案例研究,您将解决一个回归问题。
第十三章。案例研究练习 II
你在上一章已经解决了一个现实世界的分类问题。在这一章中,我们将以另一个案例研究练习的形式提出一个新的问题,并且我们将用一个非常简单的解决方案来解决它。这个练习代表了一个回归问题。
与上一章类似,它不会提供包含所有详细步骤的逐步指南;然而,它将提供一些提示,以便你可以解决问题。本章假设你已经成功完成了所有前面的章节,或者已经了解 Azure ML。
问题定义和范围
问题来自Kaggle机器学习竞赛之一,他们在竞赛中提供了一些数据集信息,并要求参赛者使用机器学习技术从测试数据集中进行预测。这是关于非洲土壤属性预测挑战。训练数据集包含土壤的不同测量值,并预期参赛者能够预测土壤五个属性(目标变量)的值:SOC、pH、Ca、P和沙。更多详细信息可以在www.kaggle.com/c/afsis-soil-properties/
找到。
为了本案例研究的目的,我们将只选择一个目标变量,命名为 P,并忽略其他变量。一旦你能够预测一个目标变量,你就可以采用相同的方法来预测其他变量。因此,你应该尝试自己预测所有变量。
数据集
你可以下载数据集并找到描述www.kaggle.com/c/afsis-soil-properties/data
。
数据集已在以下术语列表中解释,如前述网页链接所示:
-
PIDN:这是唯一的土壤样本标识符。
-
SOC:这指的是土壤有机碳。
-
pH:这些是 pH 值。
-
Ca:这是 Mehlich-3 可提取的钙。
-
P:这是 Mehlich-3 可提取的磷。
-
沙:这是沙含量。
-
m7497.96 - m599.76:有 3,578 个中红外吸收测量值。例如,“m7497.96”列是 7497.96 cm-1 波数的吸收率。我们建议你移除位于 m2379.76 到 m2352.76 区域的 CO2 光谱带,但你不必这样做。
-
深度:这是土壤样本的深度(这有两个类别:“表层土壤”和“底土”)。他们还从遥感数据源中包含了一些潜在的时空预测因子。以下提供了不同术语的简短变量描述,更多描述可以在 AfSIS 数据中找到。数据已经进行了均值中心化和缩放。
-
BSA:这些是从MODIS卫星图像中得到的平均长期黑天空反照率测量值(在这里,BSAN = 近红外,BSAS = 短波,BSAV = 可见光)。
-
CTI: 这指的是从航天飞机雷达地形测量任务的高度数据计算出的复合地形指数。
-
ELEV: 这指的是航天飞机雷达地形测量任务的高度数据。
-
EVI: 这是从 MODIS 卫星图像中得到的平均长期增强植被指数。
-
LST: 这是从 MODIS 卫星图像中得到的平均长期地表温度(在此,LSTD = 白天温度和 LSTN = 夜间温度)。
-
Ref: 这指的是从 MODIS 卫星图像中得到的平均长期反射率测量值(在此,Ref1 = 蓝色,Ref2 = 红色,Ref3 = 近红外,和 Ref7 = 中红外)。
-
Reli: 这是从航天飞机雷达地形测量任务的高度数据计算出的地形起伏。
-
TMAP 和 TMFI: 这指的是平均长期热带降雨监测任务数据(在此,TMAP = 平均年降水量,TMFI = 修改后的富尼耶指数)。
下载训练数据集(www.kaggle.com/c/afsis-soil-properties/download/train.zip
)。请注意,您可能需要创建一个账户才能下载数据集。将数据集上传到 ML Studio(为此,请参阅第四章,在 ML Studio 中导入和导出数据,以找到有关如何从您的本地机器上传数据集的详细信息)。
数据探索和准备
在 ML Studio 中创建一个新的实验。将上传的数据集拖放到画布上并可视化它。如您所见,它有 1157 行和 3600 列。通常,在 Kaggle 竞赛中公开的数据已经过清洗,这为您节省了数据清洗的精力,例如处理缺失值。在 ML Studio 中,您无法看到所有列和行。有 3,578 列包含中红外吸收测量值,并且这些整个列名都以字母’m’开头。您可能希望将它们分开。为此,您可以使用带有以下代码的执行 Python 脚本模块,其中内联注释解释了代码行。为此,请参阅第十章,使用 R 和 Python 扩展,以找到有关如何在 ML Studio 中集成 Python/R 脚本的详细信息:
def azureml_main(dataframe1 = None, dataframe2 = None): #Get all the columns cols = dataframe1.columns.tolist() #Select columns with name starting with letter \'m\' dataframe1=dataframe1[[col for col in cols if col.startswith(\'m\')]] #Return the modified dataset return dataframe1
进行中的模型可能如下所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_02.jpg
或者,您也可以使用执行 R 脚本模块和 R 代码来实现相同的功能。
这些提取的 3,578 列几乎无法可视化,并且在模型中处理它们将花费很长时间,尤其是在您使用参数扫描模块时。将它们压缩成几行将非常有价值,这样它们就更容易处理了。主成分分析模块将非常有帮助,因为它可以从给定的特征中提取出给定数量的最相关特征。主成分分析(PCA)是一种流行的技术,它将特征集转换为一个具有降低的维度或更少特征或组件的新特征集;其中包含原始特征集中的大部分信息。ML Studio 中存在的主成分分析模块将降低到多少维度的数量作为输入,您可以在其中指定期望的低特征数量。
您可以尝试将10个组件(用于降低到多少维度的数量选项)作为其参数,如图所示:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_06.jpg
您可以使用另一个执行 Python 脚本模块或执行 R 脚本来提取其他相关列,这些列都是除了以’m’开头和其他目标变量(因为我们只对 P 感兴趣)之外的所有列。您还可能想排除 PIDN,它是唯一的土壤样本标识符。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_03.jpg
相同的 Python 代码如下:
def azureml_main(dataframe1 = None, dataframe2 = None): #Get all the columns cols = dataframe1.columns.tolist() #Select columns with name starting with letter \'m\' mCols=dataframe1[[col for col in cols if col.startswith(\'m\')]] #List of other columns to be excluded exCols=[\'PIDN\', \'Ca\', \'pH\', \'SOC\', \'Sand\'] #Drop all the columns with name starting with letter \'m\' dataframe1.drop(mCols, axis=1, inplace=True) #Drop other columns - \'PIDN\', \'Ca\', \'pH\', \'SOC\', \'Sand\' dataframe1.drop(exCols,axis=1, inplace=True) #Return the modified dataset return dataframe1
使用提取的两组列进行组合,并使用添加列模块制作一个数据集。到目前为止,您应该已经有一个降低的特征集,但您仍然需要找到最相关的特征。不必要的数据或噪声可能会降低模型的预测能力,因此应该被排除。基于过滤的特征选择模块可以识别数据集中最重要的特征。您可以尝试使用不同数量的期望特征作为参数,并评估整体模型的性能。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_04.jpg
在您开始构建模型之前,您需要准备训练、验证和测试数据集。让我们看一下下面的截图:
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_05.jpg
模型开发
在准备数据后,您不确定哪种模型或回归算法对当前问题表现良好。因为目标变量 P 是连续的,您知道这是一个回归问题。因此,尝试不同的算法并选择最佳算法是值得的。您可以使用参数扫描模块来获取算法的最佳参数。您需要将三个输入传递给参数扫描模块:未训练的算法、训练数据集和验证数据集。使用评分模块对测试数据进行评分。使用评估模块比较两个模型与评分数据。
你应该尝试不同的算法来选择最佳的一个。下面的图仅作为参考,展示了四种算法。
https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/msaz-ml/img/0792EN_13_01_.jpg
运行模型并找出对你来说表现最好的算法。
模型部署
当你对某个特定模型满意后,将其保存为训练模型,然后为网络服务准备一个实验,并继续部署模型。请参考第十一章,将模型作为网络服务发布,以找到如何将模型部署到预发布环境并在 ML Studio 中可视测试的详细信息。
摘要
在最后一章中,你解决了另一个现实世界的问题。你从理解问题开始,然后获取了必要的数据。在初步数据探索后,你意识到数据有大量的列,因此你使用 Python 脚本模块首先将数据分为两组特征,然后使用 PCA 算法得到一组减少的特征。然后,你使用了基于过滤的特征选择模块,该模块可以从减少的数据集中识别出大多数重要特征。为了选择正确的模型,你尝试了不同的算法,并使用参数扫描模块用最佳参数进行训练。最后,你选择了模型,并继续将其发布为网络服务。