Azure-机器学习实用指南-全-
Azure 机器学习实用指南(全)
原文:
annas-archive.org/md5/ae16289464fb93b2ce8c7a0e83234528译者:飞龙
前言
本书将教会你如何在云中以非常低廉的方式执行高级机器学习。您将更多地了解 Azure 机器学习流程作为企业级的方法。本书让您探索 Azure 机器学习工作室中的预建模板,并使用可部署为 Web 服务的预配置算法构建模型。它将帮助您发现利用云进行机器学习和 AI 的不同好处,在 AI 开发场景中部署虚拟机,以及如何在 Azure 中应用 R、Python、SQL Server 和 Spark。
在本书结束时,您将能够将机器学习和 AI 概念应用于您的模型以解决现实世界的问题。
本书面向的对象
如果你是一位熟悉 Azure 机器学习和认知服务的数据科学家或开发者,并希望创建智能模型并在云中理解数据,这本书适合你。如果你希望将强大的机器学习服务引入你的云应用中,这本书也会很有用。一些数据操作和处理的经验,以及使用 SQL、Python 和 R 等语言,将有助于你理解本书中涵盖的概念
要充分利用本书
对于本书,你需要具备 Azure 的先验知识并拥有 Azure 订阅。
下载示例代码文件
您可以从www.packt.com的账户下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packt.com/support并注册,以便将文件直接通过电子邮件发送给您。
你可以通过以下步骤下载代码文件:
- 
在www.packt.com登录或注册。
 - 
选择 SUPPORT 标签页。
 - 
点击代码下载与勘误。
 - 
在搜索框中输入书名,并遵循屏幕上的说明。
 
文件下载完成后,请确保使用最新版本解压缩或提取文件夹:
- 
WinRAR/7-Zip for Windows
 - 
Zipeg/iZip/UnRarX for Mac
 - 
7-Zip/PeaZip for Linux
 
该书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/Hands-On-Machine-Learning-with-Azure。如果代码有更新,它将在现有的 GitHub 仓库中更新。
我们还提供其他丰富的书籍和视频的代码包,可在github.com/PacktPublishing/找到。查看它们吧!
下载彩色图像
我们还提供了一份包含本书中使用的截图/图表的彩色图像的 PDF 文件。您可以从这里下载:www.packtpub.com/sites/default/files/downloads/9781789131956_ColorImages.pdf。
使用的约定
本书使用了多种文本约定。
CodeInText: 表示文本中的代码词汇、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“或者,您可以在 Azure 门户中搜索计算机视觉”。
代码块设置如下:
vision_base_url = "https://westus.api.cognitive.microsoft.com/vision/v1.0/"
vision_analyze_url = vision_base_url + "analyze"
粗体: 表示新术语、重要词汇或屏幕上看到的词汇。例如,菜单或对话框中的文字会以这种方式显示。以下是一个示例:“点击创建资源,然后点击 AI + 机器学习,然后点击计算机视觉”。
警告或重要注意事项会以这种方式显示。
小贴士和技巧会以这种方式显示。
联系我们
我们欢迎读者的反馈。
一般反馈: 如果您对本书的任何方面有疑问,请在邮件主题中提及书名,并将邮件发送至customercare@packtpub.com。
勘误表: 尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将不胜感激,如果您能向我们报告,我们将不胜感激。请访问www.packt.com/submit-errata,选择您的书籍,点击勘误表提交表单链接,并输入详细信息。
盗版: 如果您在互联网上发现我们作品的任何非法副本,如果您能提供位置地址或网站名称,我们将不胜感激。请联系...
评论
请留下评论。一旦您阅读并使用过这本书,为何不在购买它的网站上留下评论呢?潜在读者可以看到并使用您的客观意见来做出购买决定,Packt 公司可以了解您对我们产品的看法,我们的作者也可以看到他们对书籍的反馈。谢谢!
如需更多关于 Packt 的信息,请访问packt.com。
第一章:AI 云基础
现在,每个组织都渴望成为采用最新技术进步的领导者。近年来,这种采用的成功是通过利用企业周围的数据景观实现的。在本章中,我们将讨论如何利用微软的 Azure 平台从数据景观中提取业务价值。Azure 提供数百项服务,选择正确的服务具有挑战性。在本章中,我们将提供一个高层次概述,介绍数据科学家、开发人员或数据工程师为构建和部署其组织的 AI 解决方案所面临的选项。我们将从一个决策树开始,它可以指导技术选择,以便您了解应该选择哪些...
人工智能的重要性
人工智能(AI)正日益融入我们技术驱动的复杂生活之中。无论我们是否意识到,人工智能正在成为我们更高效完成日常任务的推动者。个人助理如 Siri、Cortana 和 Alexa 是我们经常遇到的最为明显的 AI 工具。不那么明显的 AI 工具包括那些由共享出行公司使用的工具,它们建议司机移动到高密度区域,并根据需求动态调整价格。
在全球范围内,有各种处于 AI 旅程不同阶段的组织。对于某些组织来说,AI 是其商业模式的核心。在其他组织中,他们看到了利用 AI 来竞争和创新业务的潜力。成功的组织认识到,通过 AI 实现的数字化转型是他们长期生存的关键。有时,这可能涉及通过新技术如物联网(IoT)改变组织的商业模式来融入 AI。在这一 AI 成熟度的范围内,组织在实施 AI 解决方案时面临挑战。这些挑战通常与可扩展性、算法、库、准确性、再培训、管道、与其他系统的集成等相关。
人工智能领域已经存在了几十年,但过去十年其增长和采用率却非常显著。这主要归因于三个主要驱动力:大量数据、大量计算和改进的算法。数据增长主要来自产生数据的实体,或来自人类与这些实体的互动。计算能力的增长可以归因于芯片设计的改进,以及创新计算技术的应用。算法的改进部分得益于开源社区,部分得益于更大数据集和计算能力的可用性。
云的出现
在云中开发人工智能解决方案有助于组织跨越其创新,同时缓解这里描述的挑战。第一步之一是将所有数据集中在一起或放在同一个工具中,以便于检索。云是最符合这一要求的最佳着陆区。云提供了几乎无限的存储、轻松访问其他数据源和按需计算。由于有一个统一的控制面板,建立在云上的解决方案更容易维护和更新。只需点击一下按钮即可获得改进或定制的硬件,这在几年前是想都不敢想的。
云中的创新如此迅速,以至于开发者可以构建一个大型多样化...
人工智能的云关键组件
任何云人工智能解决方案都将包含不同的组件,所有组件都是模块化的、各自弹性的,并且相互集成。以下图表展示了云人工智能的广泛框架。在最底层是存储,它与计算是分开的。这种存储和计算的分离是云的关键优势之一,它允许用户独立扩展。存储本身可以根据吞吐量、可用性和其他特性进行分层。直到几年前,计算选项仅限于底层 CPU 芯片的速度和代数。现在,我们还有 GPU 和FPGA(现场可编程门阵列)芯片的选项。利用存储和计算,各种服务建立在云基础设施上,这使得使用摄取数据、转换数据和构建模型变得更加容易。基于关系数据库、NoSQL、Hadoop、Spark和微服务的服务是一些最常用于构建人工智能解决方案的服务:

云人工智能的基本构建块
在最高复杂度级别上,云上提供了各种专注于人工智能的服务。这些服务覆盖了一个光谱,一端是完全可定制的解决方案,另一端是易于构建的解决方案。定制人工智能通常是一种允许用户引入自己的库或使用专有库来构建端到端解决方案的解决方案。这通常涉及大量的实际编码,并赋予构建者对解决方案不同部分的完全控制权。预构建人工智能通常以 API 的形式存在,这些 API 暴露了一些可以轻松集成到您解决方案中的服务。这些服务的例子包括定制视觉、文本和基于语言的 AI 解决方案。
无论底层 AI 多么复杂,大多数应用的目标都是尽可能使最终用户的使用体验无缝。这意味着 AI 解决方案需要与组织解决方案堆栈中的通用应用程序集成。许多解决方案使用仪表板或传统 BI 空间中的报告。这些界面允许用户探索 AI 解决方案生成数据。对话式应用通常以智能界面(如机器人)的形式出现,以对话模式与用户互动。
微软云 - Azure
微软的使命是让地球上每个人和组织都能实现更多。Microsoft Azure 是一个云平台,旨在帮助客户实现智能云和智能边缘。他们的愿景是帮助客户将 AI 融入每个应用程序,无论是在云中还是在各种形态的计算设备上。考虑到这一点,微软开发了一套广泛的工具,可以帮助客户轻松地将 AI 集成到他们的应用程序中。
以下表格展示了可用于使用 Azure 开发端到端 AI 解决方案的不同工具。Azure 服务列指示由微软拥有和管理的服务(第一方服务)。Azure 市场...
Azure 上选择 AI 工具
在这本书中,我们假设您对 AI 有一般的知识和经验。这里的目的是不涉及各种 AI 类型的基础知识或选择正确的算法;我们假设您对解决特定商业需求时应选择哪种算法有很好的理解。
以下图表展示了一个决策树,可以帮助您选择正确的 Azure AI 工具。它并非旨在全面覆盖;仅作为正确技术选择的指南。有许多选项相互交叉,这在图表上难以完全展示。同时,请记住,一个高效的 AI 解决方案会结合使用多个工具:

Azure 上选择 AI 工具的决策树指南
上一图表展示了一个决策树,帮助微软 AI 平台的用户。从顶部开始,第一个问题是您是否希望自己构建模型或使用预训练模型。如果您正在构建自己的模型,那么它涉及到数据科学家、数据工程师和开发者在各个阶段的工作。在某些用例中,开发者更愿意只是使用预训练模型。
认知服务/机器人
想要使用预训练 AI 模型的开发者通常会使用微软的认知服务。对于正在构建对话应用的人来说,结合 Bot Framework 和认知服务是推荐的方法。我们将在第三章“认知服务”和第四章“Bot Framework”中详细介绍认知服务,但了解何时选择认知服务是很重要的。
认知服务是为了给开发者提供快速构建和部署 AI 应用的工具而构建的。认知服务是预训练的、可定制的 AI 模型,通过 API、配套的 SDK 和网络服务进行暴露。它们执行某些任务,并设计为 ...
Azure 机器学习工作室
Azure 机器学习(Azure ML)工作室是主要的工具,纯粹是基于网页的 GUI,用于帮助构建 机器学习(ML)模型。AzureML Studio 是一个几乎无需代码的环境,允许用户构建端到端的 ML 解决方案。它内置了微软研究部门的专有算法,可以以极大的简单性完成大多数机器学习任务。它还可以嵌入 Python 或 R 代码以增强其功能。Azure ML Studio 的一个最伟大的功能是能够一键创建网络服务。该网络服务以 REST 端点形式暴露,应用程序可以向其发送数据。除了网络服务之外,还会创建一个 Excel 电子表格,它访问相同的网络服务,可以用来测试模型的功能,并方便地与最终用户共享。
在撰写本文时,Azure ML Studio 的主要限制是实验容器的大小限制为 10 GB。这个限制将在第六章“数据科学的可扩展计算”中详细解释,但就目前而言,了解 Azure ML Studio 非常适合训练 2 GB 到 5 GB 范围内的数据集就足够了。此外,ML Studio 中可以包含的 R 和 Python 代码的数量以及其性能也有限制,这些将在稍后详细讨论。
ML 服务器
对于希望以代码优先的体验,微软的套件中提供了多个工具。如果组织希望在本地上部署(除了云之外),唯一可用的选项是机器学习服务器(ML Server)。ML Server 是一个企业级平台,支持 R 和 Python 应用程序。它支持 ML 过程中的所有活动。ML Server 之前被称为 R Server,是通过微软收购 Revolution Analytics 而产生的。后来,为了满足各种用户偏好,增加了对 Python 的支持。
在 ML Server 中,用户可以使用任何开源库作为他们解决方案的一部分。许多开源工具的挑战在于它们需要 ...
Azure ML 服务
Azure ML 服务是 Azure 上相对较新的服务,它增强了构建 AI 解决方案过程中的生产力。Azure ML 服务具有不同的组件。在用户端,Azure ML Workbench 是一个工具,允许用户拉取数据,对其进行转换,构建模型,并在各种类型的计算上运行它们。Workbench 是用户在其本地机器上运行的工具,并连接到 Azure ML 服务。Azure ML 服务本身运行在 Azure 上,包括实验和模型管理。实验服务跟踪模型测试、性能以及您在构建模型时希望跟踪的任何其他指标。模型管理服务帮助管理模型的部署,并管理由个人用户或大型团队构建的多个模型的整体生命周期。
当利用 Azure ML 服务时,有多个端点可以作为服务的引擎。在撰写本文时,仅支持基于 Python 的端点。随着内置 Python 服务的引入,SQL Server 可以作为端点。这特别有益,尤其是如果用户的大部分数据都在 SQL 表中,并且希望最小化数据移动。
如果您已经在 ML 服务上利用了用于大规模机器学习的 Spark 库,则可以将它们部署到 Azure 上的基于 Spark 的解决方案。目前,这些可以是 HDInsight 上的 Spark 或任何其他 Apache Spark 的原生实现(Cloudera、Hortonworks 等)。
如果用户已经利用其他基于 Hadoop 的库来构建 ML 服务,则可以将这些库部署到 HDInsight 或 Azure 上可用的任何 Apache Hadoop 实现。
Azure Batch 是一种提供大规模、按需计算的服务,适用于那些需要临时或按计划使用此类资源的应用程序。此用例的典型工作流程包括创建一个虚拟机集群,然后向集群提交作业。作业完成后,集群将被销毁,用户之后不再为任何计算付费。
数据科学虚拟机(DSVM)是基于 Linux 或 Windows 的高度定制 VM 模板。它预装了大量的精选数据科学工具和库。所有工具和库都配置为无需额外努力即可直接使用。DSVM 有多种应用,我们将在第七章“机器学习服务器”中介绍,包括作为 Azure Batch 的基础镜像 VM 的使用。
Azure ML 服务构建的模型最具有高度可扩展性的目标之一是利用 Docker 容器化和通过 Kubernetes 进行编排。通过利用Azure Kubernetes 服务(AKS)可以简化这一过程。Azure ML 服务创建了一个 Docker 镜像,有助于将机器学习模型投入运营。该模型本身作为基于 Docker 的容器化 Web 服务进行部署,同时利用 TensorFlow 和 Spark 等框架。应用程序可以通过 REST API 访问这个 Web 服务。可以通过利用 Kubernetes 的扩展功能来增加或减少 Web 服务的规模。关于这个主题的更多细节将在第十章“构建深度学习解决方案”中介绍。
Azure ML 服务的挑战在于它目前仅支持 Python。该平台本身经历了一些变化,对命令行界面的重度依赖使得界面不如一些其他工具用户友好。
Azure Databricks
Azure Databricks 是 Azure 上可以用来构建自定义 AI 解决方案的新增工具之一。它基于 Apache Spark,但针对 Azure 平台进行了优化。Spark 引擎可以通过基于 Scala、Python、R、SQL 或 Java 的各种 API 进行访问。为了利用 Spark 的可扩展性,用户在处理数据对象及其转换时需要利用 Spark 库。Azure Databricks 在由运行时管理的弹性且可扩展的 Spark 集群之上利用了这些可扩展的库。Databricks 提供了企业级的安全、合规性和协作功能,使其与 Apache Spark 区分开来。能够安排和编排...
概述
总结来说,本章简要概述了 Azure 上可用于构建 AI 解决方案的所有不同服务。在创新的云世界中,很难找到一个包含 AI 项目所有期望结果的单一解决方案。本书的目标是指导用户选择适合特定任务的正确工具。成熟的组织意识到,在云中创新的关键在于敏捷性和灵活性。在下一章中,我们将看到 TDSP 阶段及其工具。
第二章:数据科学流程
在过去十年中,组织见证了数据的快速增长。从这些数据中获取洞察力对于这些组织的增长和维持至关重要。然而,负责从数据中提取价值的团队由于各种原因而失败。在本章中,我们将探讨组织如何避免数据科学的潜在陷阱。
关于数据质量和治理的更深入讨论我们在这里不会涉及。经验丰富的数据科学家认识到数据面临的挑战,并在他们的流程中考虑到这些挑战。一般来说,这些挑战包括以下内容:
- 
数据质量和一致性差
 - 
由个人业务团队驱动的数据孤岛
 - 
难以使用的 ...
 
TDSP 阶段
团队数据科学流程(TDSP)是由微软创建的一种方法,用于指导组织内数据科学项目的整个生命周期。它并不是一个完整的解决方案,而是一个框架,通过这个框架,团队可以为他们的流程增加结构,并实现他们分析的全部商业价值。
除了 TDSP 之外,组织一直在采用的其他流行方法是称为 CRISP-DM(代表 跨行业数据挖掘标准流程)。这种方法自 1990 年代中期以来一直存在。在 2000 年代,有几次尝试更新它,但都被放弃了。CRISP-DM 的主要重点是数据挖掘,但其原则也可以扩展到数据科学。CRISP-DM 中列出的主要步骤如下:业务理解、数据理解、数据准备、建模、评估和部署。对于从业者来说,这些步骤可能看起来是多余的,但对于刚开始从数据中获取价值的组织来说,这是一个构建流程的绝佳框架。事实上,许多厂商在市场上发布的数据科学工具本身就具有推动用户通过这些步骤的功能。
当 CRISP-DM 方法应用于数据科学时,存在几个差距。最明显的一个是需要将业务成果与流程的每一步联系起来。数据质量、数据来源、偏差、算法质量和可扩展性等方面的挑战需要超越这里列出的内容来解决。
TDSP 不是 CRISP-DM 的替代品,但可以被视为一个额外的框架,可以增强以包括现有的数据工作流程。TDSP 更侧重于任务,但与 CRISP-DM 在高层次上共享一些相同的概念。
TDSP 的一个核心原则是,如以下图表所示的数据科学生命周期结果是智能应用,这些应用可以为业务带来价值。新的数据科学项目可以利用 TDSP 的部分内容,预期随着项目的成熟,它们将完成学业并利用流程的其他步骤。从这个意义上说,TDSP 是旨在迭代的和敏捷的。根据项目的性质和成熟度,某些流程可以被消除。

TDSP 中定义了五个广泛阶段,如下所示:
- 
业务理解
 - 
数据获取和理解
 - 
建模
 - 
部署
 - 
客户接受
 
业务理解
在 TDSP 的这个阶段,有两个任务推动其目标:
- 
定义目标
 - 
识别数据源
 
让我们分解和分析这些任务,看看它们如何帮助推导出业务理解。
定义目标任务包括以下因素:
- 
模型目标:项目的成功是由业务目标驱动的,而业务目标反过来又是由分析期间跟踪的一些变量驱动的。这些变量被称为 模型目标,与模型目标相关的可能有多个指标,这些指标决定了它们的成功。常用的模型目标示例包括收入预测或交易欺诈的概率。
 - 
相关问题:您可以定义 ...
 
可交付成果
如下的可交付成果:
- 
章程文件:本文件用于跟踪项目的各个方面。这些包括业务背景、范围、人员、计划、架构、指标和沟通。此文件的模板在此提供:
github.com/Azure/Azure-TDSP-ProjectTemplate/blob/master/Docs/Project/Charter.md。 - 
数据源:本文件描述了所有数据源以及将它们纳入项目所需的任何转换。任何处理过的数据或工程化特征也予以记录。此可交付成果的模板在此展示:
github.com/Azure/Azure-TDSP-ProjectTemplate/blob/master/Docs/Data_Report/Data%20Defintion.md。 - 
数据字典:本文件为每个数据源提供了详细描述。这可能包括表架构和数据类型示例。此可交付成果的模板在此提供:
github.com/Azure/Azure-TDSP-ProjectTemplate/tree/master/Docs/Data_Dictionaries。 
数据获取和理解
在 TDSP 的这个阶段,有三个任务推动其目标:
- 
数据摄取:为了使数据的探索和建模更加容易,尽可能将源数据移动到单个分析系统中是理想的。在 Azure 中,通过各种工具可以轻松地在不同服务之间移动数据,同时考虑到这些类型的用例。
 - 
探索数据:理解数据的本质对于成功的分析项目至关重要。在大多数组织中,数据存在许多缺陷:异常值、缺失值、不良值等。可视化数据和分析数据的特征是成功数据科学项目的先决条件。这也是 ...
 
可交付成果
可交付成果如下:
- 
数据质量报告:IDEAR 工具可以帮助创建总结源数据和目标变量的报告。
 - 
解决方案架构:在这个项目阶段,可以绘制一个数据流图或描述,以显示管道的评分和(如果需要)重新训练。
 - 
检查点决策:根据对数据的初步评估,你可以决定是否将项目推进到这个阶段之后。如果在这个阶段预期的商业价值尚不明确,可以决定获取更多数据或停止项目。在某些情况下,利益相关者可能会考虑重新定位。
 
建模
在这个阶段,有三个主要任务来实现其目标:
- 特征工程:在许多用例中,原始数据本身可能不是目标变量的良好指标。根据使用的算法,可能需要将某些数据特征转换为新的特征,以便其有效使用。
 
这个任务被认为是有效数据科学项目艺术的一部分。它需要从数据探索任务中获得的有效见解和领域专业知识的有效结合。还有选择构建模型时正确特征数量的困境。使用过多的变量可能会给模型添加不必要的噪声,而选择过少可能无法准确预测目标变量(s)。...
可交付成果
可交付成果如下:
- 
特征集:用于构建模型的特征被记录为数据定义报告的一部分。如果任何特征是从原始数据生成的,则生成特征的代码将记录在这个报告中。
 - 
模型报告:标准报告将显示每个模型在各种指标上的表现。这些指标可能包括准确性指标,以及模型的速度和效率。
 - 
检查点:评估模型的表现,并确定它是否足够好以部署到生产系统。
 
部署
在这个阶段,主要任务是将模型和数据管道部署到类似生产的环境,以便应用程序使用。
一旦您有一个或多个提供所需业务指标的模型,您可以为不同的应用程序将它们投入运营。模型通常通过某些 API 接口暴露,允许应用程序与之交互并为各种输入生成预测。这些 API 通常可以处理批量或实时,或这两种方式的混合,用于其输入数据。该网络服务本身通常是弹性、健壮和可扩展的。这是通过跟踪网络服务的各种指标来实现的,以跟踪服务的负载并帮助 ...
交付成果
以下为交付成果:
- 
显示预测系统健康和关键指标的控制台
 - 
一个显示部署细节的建模报告
 - 
一个捕获解决方案各个组件的解决方案架构文档
 
客户接受
本阶段涉及的主要任务如下:
- 
系统验证:确认部署的模型和数据管道符合利益相关者的需求
 - 
项目移交:将系统移交给将要运行生产系统的团队
 
客户应验证端到端解决方案是否符合在初始业务理解阶段定义的业务需求。系统是否能够及时做出满足为应用程序选择的指标的预测?
所有文档均已审查并最终确定,并移交给负责运行操作的团队。该团队将负责对迄今为止完成的工作进行维护,并贯穿其生命周期。
交付成果
在此阶段结束时,将交付项目退出报告。它包含操作和维护系统至其设计潜力所需的所有项目细节。退出报告的模板在此提供:github.com/Azure/Azure-TDSP-ProjectTemplate/blob/master/Docs/Project/Exit%20Report.md。
TDSP 工具
微软发布了一套工具,使组织更容易遵循 TDSP 流程。其中之一是针对 CRAN-R、Microsoft R 和 Python 发布的 IDEAR 实用工具。另一个工具是自动化建模和报告(AMAR)实用工具。在本节中,我们将探讨如何在 TDSP 流程中利用这些工具。
R 的 IDEAR 工具
要安装此工具,请导航到github.com/Azure/Azure-TDSP-Utilities/blob/master/DataScienceUtilities/DataReport-Utils/R/Run-IDEAR.R,以检索此工具所需的代码。下载 GitHub 仓库以方便导航到本练习所需的不同文件。
在您的计算机上打开 R Studio,导航到前面的文件,并打开它。在代码标签的右上角,点击源来执行包,如下所示:

然后,以下提示将显示:

一个示例 .yaml 文件可以从以下位置加载。按照以下步骤选择 para-adult.yaml:

这将打开 YAML 文件中描述的数据示例的数据质量报告,如下截图所示:

你可以使用左侧的菜单来浏览输出的不同部分。第一部分是任务摘要,它通过列出文件位置、不同类型变量的名称以及数据科学任务类型(例如,分类)来总结读取的文件:

点击数据摘要进入下一部分。在以下截图的 2.1 下,你可以通过选择所需的顶部 n 行来查看数据样本:

这是一种检查加载的数据中差异的视觉检查的好方法。以下截图的第 2.2 节显示了通过计数行数和列数来总结数据:

在第 2.3 节中,报告显示列的名称和类型,指示它们是数值型还是分类型:

报告的第 2.4 节检查数据的质量。该报告将每个变量的缺失数据百分比进行映射。热图格式有助于检测任何缺失数据模式:

第 2.5 节通过显示数值数据的百分位数和分类数据的频率计数来总结数据的基本统计信息:

现在我们进入第三部分,我们将更深入地研究每个单独的变量以进一步调查它们。在第 3.1 节中,你可以看到每个变量的更详细统计数据:

在第 3.2 节中,你可以可视化目标变量:

在第 3.3 节中,你可以可视化任何数值变量,并查看数据的分位数和分布:

在第 3.4 节中,你可以可视化分类变量,显示它们内部不同类别的频率:

在第四部分中,报告帮助你分析不同变量之间的关系。这对于理解哪些变量对于构建模型很重要,哪些可以删除很重要。在第 4.1 节中,你可以根据参考变量对变量的影响进行排名:

在第 4.2 节中,您可以检查两个分类变量之间的相关性。例如,在下面的图中,我们看到男性的收入比女性多:

类似地,在第 4.3 节中,您可以看到两个数值变量之间的交互:

在第 4.4 节中,您可以使用不同的相关方法来计算数值变量之间的相关性:

在第 4.5 节中,您可以使用箱线图可视化数值和分类变量之间的交互:

接下来的三个部分将重点介绍多元统计分析。第 4.6 节利用主成分分析(PCA)来查看数据在降维变量空间中的分布:

在第 4.7 节中,您可以使用 t-SNE 方法将数值变量投影到 2D 空间。在第 4.8 节中,您可以将数值和分类变量同时投影到 PCA 并可视化:

在第五部分中,如果您点击“生成报告”按钮,它将创建包含前几节所有摘要的总结报告。
R 中的自动建模和报告(AMAR)
AMR 工具是一个可定制的、半自动化的实用工具,内置在 R 中,用于训练和评估单个或多个机器学习模型。它具有参数扫描等特性,以找到符合所需指标的模型。
一旦生成报告,它将包含以下信息:
- 
模型描述
 - 
模型评估和比较
 - 
特征排名
 
通常,报告中描述的信息可以帮助提高以下方面:
- 
特征变量的质量
 - 
机器学习任务的难度级别
 - 
后续特征工程和建模的指导
 
AMAR 工具可在以下 GitHub 位置找到:github.com/Azure/Azure-TDSP-Utilities/tree/master/DataScienceUtilities/Modeling ...
摘要
总之,我们在本章中向您介绍了 TDSP,并详细介绍了涉及到的每个不同步骤。这个过程旨在增强现有流程而不是取代它们。我们还探讨了微软提供的各种 TDSP 实用工具,这些工具使得构建数据科学生命周期中的某些结构变得更加容易。在接下来的几章中,我们将探讨 Azure 中可用于构建满足您业务需求的人工智能解决方案的每个选项。
第三章:认知服务
认知服务是一组来自微软的预训练 API,允许开发者开发使用 AI 的应用程序,而无需构建机器学习模型。凭借其对边缘部署的支持,开发者可以构建在无人机等设备上使用强大 AI 算法来解释、监听、说话和看的应用程序。
有五个主要类别的 API:
- 
视觉
 - 
语言
 - 
语音
 - 
知识
 - 
搜索
 
许多这些 API 现在可以定制以满足公司和客户的具体需求。在本章中,我们将查看每个服务类别的概述,并探讨一些示例。
视觉 API 的认知服务
视觉 API 帮助您将图像分析功能添加到您的 AI 应用程序中。在撰写本文时,认知服务中包含五个视觉 API:
- 
计算机视觉
 - 
人脸
 - 
内容审核员
 - 
视频索引器
 - 
定制视觉
 
在本章中,我们将学习前两个 API。其余的我们将留给您自己探索。
计算机视觉 API
此 API 根据可识别的对象、生物、动作和风景为图像提供标签。上传图像或指定图像的 URL 后,计算机视觉 API 的算法会提出它在图像中识别的标签。这可能包括主要主题、环境(室内或室外)、家具、工具、植物、动物、配饰和设备。
让我们看看一个示例图像:

我们将其发送到 API,并得到 JSON 格式的输出。这将显示标签以及与每个标签关联的置信度:
| 标签 | ```{ "name": "bench", "confidence": 0.999963641 ...` | 
|---|
人脸 API
现在我们来看看视觉类别中的下一个 API,即人脸 API。
这可以用来检测人脸并比较相似的人脸。它还将指示面部特征,包括年龄、情绪、性别和发色。
让我们看看一个示例图像:
![图片
如果我们将此输入图像发送到 API,我们将以 JSON 格式获得以下输出:
//output omitted
"faceAttributes": {
      "hair": {
        "bald": 0.01,
        "invisible": false,
        "hairColor": [
          {
            "color": "blond",
            "confidence": 1.0
          },
          {
            "color": "brown",
            "confidence": 0.87
          },
        //omitted
        ]
      },
      "smile": 0.018,
      "headPose": {
        "pitch": 0.0,
        "roll": 3.2,
        "yaw": -23.3
      },
      "gender": "female",
      "age": 24.4,
      "facialHair": {
        "moustache": 0.0,
        "beard": 0.0,
        "sideburns": 0.0
      },
      "glasses": "NoGlasses",      "makeup": {
        "eyeMakeup": true,
        "lipMakeup": true
      },
      "emotion": {
        "anger": 0.001,
        "contempt": 0.002,
        "disgust": 0.002,
        "fear": 0.0,
        "happiness": 0.018,
        "neutral": 0.969,
        "sadness": 0.006,
        "surprise": 0.002
      },
//output omitted
要快速尝试人脸 API,您可以访问以下网址:azure.microsoft.com/en-us/services/cognitive-services/face/.
就像计算机视觉 API 一样,您可以使用 Python 或任何其他语言调用人脸 API。创建人脸 API 资源的步骤与计算机视觉 API 类似,只是您必须在门户中搜索人脸 API,如下面的截图所示:

关于剩余的视觉 API 的更多信息,您可以访问以下网址:azure.microsoft.com/en-us/services/cognitive-services/directory/vision/.
语言 API 的认知服务
语言 API 允许我们在我们的 AI 应用程序中添加文本分析、翻译和其他功能。在撰写本文时,认知服务提供了五个语言 API:
- 
文本分析
 - 
翻译文本
 - 
Bing 拼写检查
 - 
内容审核员
 - 
语言理解
 
在本章中,我们只查看第一个 API。其他 API 我们将留给您自己探索。
文本分析
文本分析 API 可以用于从您的文本中检测情感、关键短语、实体和语言。以下是一个示例,将输入文本发送到 API,并得到以下 JSON 格式的输出。文本如下:“我对使用微软的 AI 产品感到兴奋”:
{  "languageDetection": {    "documents": [      {        "id": "fe2529ff-073e-4355-86fa-b927d1b62a23",        "detectedLanguages": [          {            "name": "English",            "iso6391Name": "en",            "score": 1.0          }        ]      }    ],    "errors": []  },  "keyPhrases": {    "documents": [      {        "id": "fe2529ff-073e-4355-86fa-b927d1b62a23",        "keyPhrases": [          "Microsoft's offerings",          "AI space"        ]      }    ],    "errors": []  },  "sentiment": {    "documents": [      {        "id": "fe2529ff-073e-4355-86fa-b927d1b62a23",        "score": 0.93527746200561523      }    ],    "errors": []  },  "entities": {    "documents": [      {        "id": "fe2529ff-073e-4355-86fa-b927d1b62a23",        "entities": [          {            "name": "Microsoft",            "matches": [              {                "text": "Microsoft's",                "offset": 25,                "length": 11              }            ],            "wikipediaLanguage": "en",            "wikipediaId": "Microsoft",            "wikipediaUrl": "https://en.wikipedia.org/wiki/Microsoft",            "bingId": "a093e9b9-90f5-a3d5-c4b8-5855e1b01f85"          },          {            "name": "Ai Space",            "matches": [              {                "text": "AI space",                "offset": 50,                "length": 8              }            ],            "wikipediaLanguage": "en",            "wikipediaId": "Ai Space",            "wikipediaUrl": "https://en.wikipedia.org/wiki/Ai_Space",            "bingId": "2d055fa3-b3cc-e9f6-776a-77b6ed7f341f"          }        ]      }    ],    "errors": []  }}
要快速尝试文本分析 API,请访问以下 URL:azure.microsoft.com/en-us/services/cognitive-services/text-analytics/.
作为一名 AI 开发者,您可以使用任何语言调用 API。在本例中,我们将查看如何使用 Python 调用 API。对于其他编程语言,可以使用类似的方法:
- 
从 Azure 门户创建一个文本分析 API 认知服务资源:
portal.azure.com. - 
如下截图所示,导航到 API。点击创建资源,然后是 AI + 机器学习,然后是文本分析:
 

- 或者,您可以在 Azure 门户中搜索“文本分析”:
 

- 为您的服务提供一个名称,然后选择一个合适的 Azure 订阅、位置和定价层(免费或付费)。您还需要创建一个新的资源组或选择现有的一个:
 

- 创建 API 将花费不到一分钟的时间。一旦创建,您将看到快速入门页面,其中包含 API 密钥及其文档的链接。您将需要 API 密钥才能从您的 Python(或任何其他语言)代码中访问 API,或使用您所使用的任何语言的代码。一旦创建 API,您将看到以下屏幕:
 

- 使用您喜欢的 Python 编辑器,并使用以下示例代码调用 API:
 
# Replace <Subscription Key> with your valid subscription's api access key.
subscription_key = "<Access Key>"
assert subscription_key
# Replace the base url with what you see as Endpoint in the portal’s Overview section under your api
text_analytics_base_url = "https://westus2.api.cognitive.microsoft.com/text/analytics/v2.0/"
sentiment_api_url = text_analytics_base_url + "sentiment"
# Send the text you want the api to analyze
# You can send multiple texts
documents = {'documents' : [
  {'id': '1', 'text': 'I am excited about using AI offerings by Microsoft.'},
]}
import requests
# Get sentiment of text
headers   = {"Ocp-Apim-Subscription-Key": subscription_key}
response  = requests.post(sentiment_api_url, headers=headers, json=documents)
sentiments = response.json()
print(sentiments)
# Get the language of text
language_api_url = text_analytics_base_url + "languages"
response  = requests.post(language_api_url, headers=headers, json=documents)
languages = response.json()
print(languages)
# Get key phrases from text
key_phrase_api_url = text_analytics_base_url + "keyPhrases"
response  = requests.post(key_phrase_api_url, headers=headers, json=documents)
key_phrases = response.json()
print(key_phrases)
# Get well-known entities
entity_linking_api_url = text_analytics_base_url + "entities"
response  = requests.post(entity_linking_api_url, headers=headers, json=documents)
entities = response.json()
print(entities)
- 当您运行前面的代码时,您将看到如下所示的输出:
 
{'documents': [{'id': '1', 'score': 0.9388835430145264}], 'errors': []}{'documents': [{'detectedLanguages': [{'iso6391Name': 'en', 'name': 'English', 'score': 1.0}], 'id': '1'}], 'errors': []}
{'documents': [{'keyPhrases': ['AI offerings', 'Microsoft'], 'id': '1'}], 'errors': []}
{'documents': [{'id': '1', 'entities': [{'name': 'Microsoft', 'wikipediaId': 'Microsoft', 'matches': [{'offset': 41, 'length': 9, 'text': 'Microsoft'}], 'bingId': 'a093e9b9-90f5-a3d5-c4b8-5855e1b01f85', 'wikipediaUrl': 'https://en.wikipedia.org/wiki/Microsoft', 'wikipediaLanguage': 'en'}, {'name': 'Artificial intelligence', 'wikipediaId': 'Artificial intelligence', 'matches': [{'offset': 25, 'length': 2, 'text': 'AI'}], 'bingId': '9d99fb44-edac-0e03-1579-19d8d8591a49',
'wikipediaUrl': 'https://en.wikipedia.org/wiki/Artificial_intelligence', 'wikipediaLanguage': 'en'}]}], 'errors': []}
情感得分为 0.93 表示积极情感。API 识别出英语为语言,并检测到两个关键短语和实体。
- 每次交易相当于一次 API 调用。门户将显示您可以监控的详细信息,例如总调用次数、错误、延迟和进出数据。在先前的示例中,我们调用了四个不同的 API:
sentiment、languages、keyPhrases和entities: 

要了解更多关于剩余语言 API 的信息,您可以访问以下 URL:azure.microsoft.com/en-us/services/cognitive-services/directory/lang/。
语音 API 的认知服务
语音 API 帮助您将语音到文本和文本到语音操作的各种功能添加到您的 AI 应用程序中。
在撰写本文时,认知服务提供了四个语音 API:
- 
语音转文本
 - 
文本到语音
 - 
说话人识别
 - 
语音翻译
 
语音转文本
语音转文本 API 可以帮助将语音音频转换为文本。音频可以是实时音频或从录音流出的音频。您可以在azure.microsoft.com/en-us/services/cognitive-services/speech-to-text/找到更多信息。
知识 API 的认知服务
知识 API 帮助通过自然语言处理解析复杂信息,并以易于消费的方式将其映射。
在撰写本文时,有一个基于知识 API 的服务:QnA Maker。
QnA Maker
此 API 允许您通过智能解析以 FAQ 形式存在的文本来快速提取问题和答案。一旦这些信息可用,就可以用来创建问答机器人。您可以在azure.microsoft.com/en-us/services/cognitive-services/qna-maker/找到更多信息。
搜索 API 的认知服务
搜索 API 帮助您搜索不同类型的内容,而无需开发复杂的搜索算法。
在撰写本文时,认知服务提供了八个 API:
- 
Bing 网络搜索
 - 
Bing 自定义搜索
 - 
Bing 视频搜索
 - 
Bing 图片搜索
 - 
Bing 视觉搜索
 - 
Bing 实体搜索
 - 
Bing 新闻搜索
 - 
Bing 自动补全
 
在本章中,我们将讨论一个 API,即 Bing 视觉搜索,并让您自己探索剩余的 API。
Bing 视觉搜索
Bing 视觉搜索 API 允许用户在图像中识别实体和文本。这意味着他们可以执行一系列操作,包括从图像中提取信息以及在不同类别中找到类似图像、产品和对像,包括时尚、地标、花卉、名人等。Bing 视觉搜索可以从名片中提取信息,并且可以针对特定领域进行定制。
以下截图显示了发送到 API 的输入图像示例。然后我们收到了以 JSON 格式的输出,这可以被解析并在网页上显示,如截图右侧所示:

要尝试此 API 或以编程方式调用 API,您可以访问以下网址:azure.microsoft.com/en-us/services/cognitive-services/bing-visual-search/。它还包含了 API 参考文档。
对于剩余的搜索 API,您可以访问以下网址:azure.microsoft.com/en-us/services/cognitive-services/directory/search/。
摘要
在本章中,我们学习了如何快速使用认知服务开发人工智能应用。在下一章中,我们将学习关于 Bot Framework 的内容,该框架用于构建机器人。
参考
- 所有认知服务都可以通过以下网址访问:
azure.microsoft.com/en-us/services/cognitive-services/ 
第四章:Bot 框架
在上一章中,我们学习了认知服务,它可以帮助我们创建人工智能应用程序。在本章中,我们将学习如何使用各种 Azure 服务构建机器人。微软提供了一个强大的平台,包括以下组件,以帮助构建和部署机器人:
- 
机器人构建器 SDK
 - 
Bot 框架
 - 
QnA Maker
 - 
机器人服务
 
什么是机器人?
一个聊天机器人,或机器人,是一种允许你通过文本、图像或语音进行类似人类的对话的应用程序。机器人可以集成到网页应用或移动应用中。不同的应用程序,如 Facebook Messenger、Kik、微信或 Skype,支持各种类型的机器人,可能有助于你找到特定问题的答案、预约沙龙或预订餐厅的桌子。与机器人聊天应该像与客户服务代表或朋友聊天一样。以下是一个在 Facebook Messenger 中帮助回答有关天气问题的示例机器人。这个机器人由微软构建,被称为 Zo 机器人:

机器人可以部署到云端,以根据用户需求扩展其处理流量的能力。为了给你一个创建智能和强大机器人的难易程度的想法,我们将使用 Bot 服务创建一个机器人,这将涵盖上述所有组件。
在以下部分,我们将简要介绍 Azure 中可用于构建机器人的每个组件。
机器人构建器 SDK
Bot Builder SDK 允许你创建机器人。它支持 .NET 和 Node.js 语言,以覆盖广泛的开发者。
Bot 框架
Bot 框架允许你连接机器人到各种社交媒体渠道。你可以连接到任意数量的渠道,包括 Facebook Messenger、Skype、Teams、Kik 或自定义渠道。
除了 SDK 和框架之外,我们还有 Bot 框架模拟器和 Bot 框架渠道模拟器。Bot 框架模拟器是一个桌面应用程序,用于测试你的机器人,而 Bot 框架渠道模拟器帮助你测试你的机器人在不同渠道上的外观和工作方式。
QnA Maker
QnA Maker 服务帮助我们快速创建基本的对话机器人。它可以与 语言理解智能服务 (LUIS) 集成,以创建更智能的机器人。QnA Maker 和 LUIS 都是我们在第三章,认知服务中简要提到的认知服务。
机器人服务
Bot 服务通过结合我们之前讨论的 Bot Builder SDK 和 Bot 框架,使得创建机器人变得简单。它支持 .NET 和 Node.js 开发者。有五种模板可以快速创建机器人:
- 
基本机器人
 - 
表单机器人
 - 
语言理解机器人
 - 
问答机器人
 - 
主动机器人
 
这里是使用 Bot 服务创建和运行机器人的高级步骤:

使用 Bot Service 创建机器人
当我们使用 Azure Bot Service 创建机器人时,Azure 会为我们做很多工作。它为机器人提供资源,基于机器人构建器 SDK 创建机器人项目,并发布机器人。您只需要一个 Azure 订阅就可以以这种方式创建机器人。
- 首先,访问 Bot Framework 网站
dev.botframework.com,这将带您进入 Azure 门户: 

- 或者,我们可以直接访问 Azure 门户
portal.azure.com并搜索Bot Service: 

- 对于这个示例,选择...
 
LUIS 应用程序
我们的机器人也可以接收音频作为输入,并且门户允许我们集成 LUIS 应用程序。如果您已经有了 LUIS 应用程序,您可以在这里提供相关信息:

摘要
在本章中,我们学习了使用各种基于 Azure 的服务,这些服务可以帮助我们快速、轻松地创建可以集成到不同即时通讯服务的机器人。在下一章中,我们将学习关于 Azure Machine Learning Studio 的内容,我们可以使用它来创建自定义机器学习模型。
第五章:Azure 机器学习工作室
Azure 机器学习工作室是一个机器学习即服务(ML-as-a-Service)平台,用于创建定制的机器学习(ML)模型。Azure ML Studio 是初学者的一款优秀工具,他们可能有一些使用机器学习模型的经验,并希望更深入地了解训练过程。它比认知服务 API 提供了更多的灵活性,并且拥有易于学习的开发环境。图形用户界面无需任何编程,使用户能够尽可能高效地构建 ML 模型。Azure ML Studio 也是经验丰富的 AI 开发者的一款有用工具,他们手头有一个相对简单的问题,并需要快速得到结果。
Azure ML Studio 由两个独立的服务组成:工作室工作空间和工作室网络服务。这两个服务还包括处理所需的底层计算资源,因此用户无需担心操作系统或硬件的维护。这两个服务之间的区别很明显:工作室工作空间用于训练 ML 模型和尝试不同的配置,而工作室网络服务提供 REST API 接口,用于对从工作空间发布的模型进行评分。
Azure ML Studio 旨在支持协作开发。它集成了 Azure Active Directory,因此可以通过几点击将来自同一组织的用户添加到工作空间。ML Studio 工作空间中的所有 ML 模型对所有工作空间成员都是可见的。工作空间成员还可以编辑他人创建的模型,因此开发者可以迭代地尝试改进彼此的结果。因此,当开发者遵循团队数据科学流程(TDSP)时,它是一款非常棒的工具。
ML 模型是在实验中开发的。一个实验包含生成 ML 模型所需的所有步骤,从输入数据集开始。实验可以用来比较不同的 ML 模型和参数配置。ML Studio 提供了一系列可以添加到实验中的模块,以执行不同的任务,例如预处理数据或评估训练结果。通过组合这些模块,实验逐步构建,最终形成一个可以运行以生成训练 ML 模型的训练管道。ML Studio 还包括广泛的实验模板集合,其中包含来自许多不同领域的可运行示例。在下一节中,我们将展示如何将这些模板部署到 ML Studio 工作空间。
工作空间和网络服务的定价基于计算资源的使用。在 ML Studio 中训练新的 ML 模型时,会消耗工作空间资源。工作空间的计费还基于用户数量,但使用 ML Studio UI 和构建实验不会产生任何额外费用;只有实验运行时间会被计算。
当创建一个新的 ML Studio 工作区时,会自动创建一个新的 Web 服务计划资源。当外部应用程序调用 ML Studio Web 服务 API 时,会消耗 Web 服务资源。在 Azure 门户中创建 Web 服务资源时,必须选择 Web 服务定价层。定价层决定了每月可以处理的最大请求数量。如果超出此限制,每个请求都会在固定月费之外计费。
要使用 Azure ML Studio,您需要一个工作区账户。有两种类型的工作区账户:免费层和标准层。免费层是一个独立的账户,不与 Azure 订阅相关联。它在使用方面有更多限制,并且不包括标准层那样的生产规模 Web API。标准层需要 Azure 订阅,ML Studio 资源的成本将添加到订阅账单中。工作区和 Web 服务在资源组中作为独立项出现,并且可以在 Azure 门户中像管理任何其他 Azure 资源一样进行管理。
要访问 ML Studio UI,请转到 Azure 门户中的 ML Studio 工作区选项卡并单击启动机器学习工作室。您也可以直接在浏览器中输入门户地址:studio.azureml.net/。
在本章中,我们将介绍以下主题:
- 
部署 Azure AI 画廊模板
 - 
在 Azure ML Studio 中构建实验
 - 
在 ML Studio 中将模型作为 Web 服务部署
 
部署 Azure AI 画廊模板
使用 ML Studio 开发模型不必从头开始。Azure AI 画廊包含许多不同场景的模板。这些场景包括许多常见的机器学习用例,例如信用风险预测、需求估计和文本情感分析。只需几步即可将模板导入 Azure ML Studio 工作区,并且它们包含生成工作 ML 模型所需的所有步骤。研究模板是了解不同用例和生成 ML 模型所需步骤的绝佳方式。一些模板由微软准备,但用户也可以将他们自己的实验提交到画廊。
模板画廊可以直接从 ...
构建实验
在本节中,我们将展示如何使用自定义数据集从头开始构建实验。使用 GUI,创建新实验非常快,结果可以立即查看。Azure ML Studio 包含所有常见 ML 和数据处理任务的模块,因此它是快速测试和迭代想法的绝佳工具。如果内置模块不足以完成当前任务,可以使用脚本模块进行改进的可扩展性,如下所述。
导入和预处理数据
如前所述,Azure ML Studio 是一个完整的机器学习工具,负责机器学习模型开发过程中的每一步。所需输入是 ML Studio 可理解的原始数据集格式;如果原始数据格式不被识别,则需要使用外部工具或 ML Studio 中的自定义脚本模块进行文件转换。对于原始文件,ML Studio 当前识别的数据格式包括 CSV、TSV、ARFF、SvmLight 和 R 对象。数据集也可以以压缩格式保存,以节省存储空间和带宽。
数据集可以通过两种方式导入到 ML Studio:通过从用户的计算机上传本地文件,或者使用 Azure 中的云存储。要从本地导入数据...
选择和配置算法
选择合适的模型并调整模型的参数是人工智能应用开发的核心。在大多数情况下,有几个算法适用于该任务,并且一开始可能不清楚哪个算法会表现最好。例如,某些算法可能在小数据集上表现更好,而其他算法在大数据集上表现更出色。通常,还需要考虑其他约束条件,例如运行时间或可用的计算资源量。最佳模型是在最小计算资源量的情况下实现足够准确度的模型。
解决机器学习问题时的第一步是确定应该使用哪种算法系列。算法系列主要取决于预测值的类型,例如,如果预测一个数字,可能使用的算法与预测一个分类值时不同。分类值是指可能结果数量有限的情况。最简单的分类值是布尔变量,它可以取两个值(真/假)。可能结果的数量也可能限制可用于问题的算法类型,因为并非所有算法都能很好地处理高维数据。在文本分析中遇到的一个高维分类数据示例是,每个单词可能代表一个不同的类别,而类别的数量等于字典的大小。对于这类高维数据,通常最好使用神经网络模型,这些模型可以处理大量的输出值。
Azure ML Studio 包含一组最常用的机器学习算法,可以拖放到实验画布中。算法在“初始化模型”部分列出,位于机器学习菜单下。算法分为四个类别。异常检测模块旨在检测数据集中大多数值相似但有一些异常值的情况,这些异常值是我们想要识别的。这些模型在预测故障检测中得到了广泛应用,例如在制造和加工行业中,机器通常正常运行,但有时可能会产生异常值,表明机器即将损坏。分类模块用于训练监督算法,以将输入分类到特定的类别。聚类模块提供无监督算法,用于在数据集中找到相似项。回归算法预测数值(但输入也可以是分类变量)。除了这些机器学习算法外,ML Studio 还提供用于其他常见机器学习相关任务的模块,例如主成分分析(PCA)和文本分词。
在本节中,我们将展示如何训练一个回归模型的示例。输入数据集是来自多个机场的航班延误信息记录,作为 ML Studio 内置数据集可用。该数据集包括航班时间、出发机场和目的地机场以及运营航班的航空公司信息。标签列,我们想要预测的值,是出发延误的分钟数(列DepDelay)。DepDelay的正值表示航班已延误,负值表示航班提前起飞。这是一个相当大的数据集,包含超过 270 万行和 14 列。要获取更多关于数据集的详细信息,请参阅文档中的完整描述,文档可在docs.microsoft.com/en-us/azure/machine-learning/studio/use-sample-datasets找到。
训练过程包括以下步骤:
- 
导入数据
 - 
预处理数据(选择要使用的列)
 - 
将数据分为训练集和测试集
 - 
选择一个机器学习算法并使用训练数据集对其进行训练
 - 
使用训练好的模型为测试数据集创建预测
 - 
将测试数据集中的预测值与实际值进行比较
 
输入数据集主要包含数值数据,不需要太多预处理。Carrier列包含文本格式的分类值,但 ML Studio 会自动将这些值转换为数值。唯一的预处理步骤是选择用于训练模型的列。在本例中,以下列被选为模型的特征:
| 列 | 描述 | 
|---|---|
Month | 
月份(分类数值,1-12) | 
DayOfWeek | 
星期几(分类数值,1-7) | 
OriginAirportID | 
出发机场 ID(分类数值,70 个唯一值) | 
Carrier | 
航空公司(分类字符串,16 个唯一值) | 
CRSDepTime | 
白天时间(分类数值,1-2359,1440 个可能值) | 
注意,出发时间是以数字格式给出的,例如,数字 101 对应 01:01。可以使用“在数据集中选择列”模块来选择这些列,标签列(DepDelay)将在训练过程中使用。
在模型训练之前,必须将数据分为训练集和测试集。这是训练过程中的关键步骤:重要的是要确保模型的准确性是通过在训练过程中模型未曾见过的示例来衡量的。用于此目的的“分割数据”模块。例如,通过将模块的“第一个输出数据集的行数比例”属性设置为0.75,模块的第一个输出端口将包含 75%的行,第二个输出将包含 25%,从输入数据集中随机选择。我们将使用这种分割来分别将数据分为训练集和测试集。
一旦数据被处理并分为训练集和测试集,模型将使用训练集进行训练。ML Studio 中的“训练模型”模块需要两个输入:一个未初始化的 ML 模型和训练集。该模块的输出是经过训练的 ML 模型,可用于进行预测。在本例中,目标是预测一个数值变量(分钟的航班延误)。如前所述,这类问题需要回归模型。对于简单的测试,通常最好从线性回归开始。这种模型并不总是产生最佳结果,但它运行速度快,为评估更高级模型提供了准确性的基准。以下是一个完整的训练流程示例:

在这种情况下,决策森林回归模型使用了 75%的输入数据进行训练。该模型可以产生准确的结果,但如果数据集包含许多行,训练时间可能会很长。使用略超过 200 万行的数据集训练此模型大约需要 1 小时,而线性回归模型训练时间不到 1 分钟。尽管某些算法可能在某些情况下表现更好,但通常很难事先预测哪种算法将产生给定问题的最佳结果。最佳方法是尝试不同的算法和参数,以找到最佳模型。我们将展示如何使用 ML Studio 中的模块有组织地进行实验,如下所示。
要获取每个模块的更多信息,请点击模块,以便在画布的右侧显示配置面板。在快速帮助面板底部跟随链接。模块文档包括每个模块的详细信息以及如何配置它。
在将“训练模型”模块与 ML 模块和输入数据集连接后,其输出可以传递到“评分模型”模块进行预测。为了了解我们的模型表现如何,测试数据集被评分,并且模型的预测与真实值(标签)进行比较。评分模型模块将在输出数据中添加一个新列,包含预测值。然后,将预测值与实际值作为散点图绘制,以查看它们之间的匹配程度。
尽管 ML Studio 没有提供任何原生可视化模块,但“执行 R 脚本”模块可以生成 R 图形作为输出。plot命令适用于简单的图形,并且在 R 模块中是原生支持的。ggplot2库也存在于 R 模块中。这个库被广泛使用,并生成高质量的图片。以下是如何在x轴上绘制DepDelay(实际值)和在y轴上绘制Scored Label Mean(预测值)的示例:
# Import ggplot2 library
library(ggplot2)
# Map the first input port to data frame
input1 <- maml.mapInputPort(1)
# Create a graph with ggplot
graph <- ggplot(input1, aes(x=DepDelay, y=`Scored Label Mean`))
graph <- graph + labs(x="Departure delay (actual)",
                      y="Departure delay (predicted)")
graph + geom_point(color="blue");
# Pass the data frame to the output port
maml.mapOutputPort("input1");
注意,如果使用了线性回归模型,预测值将位于不同的列(“评分标签”)。
这些都是在单个管道中训练模型和分析结果所需的全部步骤。现在可以通过在 ML Studio 底部的工具栏中点击运行按钮来训练模型。运行完成后,可以通过在第二个输出(R 设备)上右键单击并选择可视化来查看结果。绘图输出可以在图形部分查看,如下面的图示所示:

在理想情况下,每个预测值都应等于实际值,并且从左下角到右上角将是一条直线。因此,前面的截图远非理想。看起来模型在实际值低时预测了一些高值,反之亦然;它无法在应该预测高值时预测。从这张截图我们可以看出,结果的方差很高。结论是,提供给模型的特征不足以准确预测延迟。所选特征(见前面的列表)不包含足够的信息来解释标签变量的变化。
由于初始结果似乎并不令人信服,下一步应该做什么?与其继续尝试不同的配置,不如退一步考虑是否有额外的数据可以提供更多关于延误可能发生的信息。例如,天气条件可能与航班延误高度相关,因此将天气数据包含在模型中可能是个好主意。要查看此示例,请导航到 Azure AI 画廊并搜索“二元分类:航班延误预测”模板。
在以下小节中,我们将探讨不同的特征变量如何影响标签变量的变化。我们还将展示如何使用 ML Studio 模块评估不同的模型和探索不同的参数配置。
对于初学者来说,不同机器学习算法的广泛选择可能会感到不知所措。哪种算法能快速得到结果,哪种适合大数据集?为了帮助回答这些问题以及其他问题,微软已发布了一个 Azure ML 算法速查表:docs.microsoft.com/en-us/azure/machine-learning/studio/algorithm-cheat-sheet。速查表可以快速查看每个算法的优缺点。
更高级的用户会知道,ML Studio 中的算法只是所有可用模型的一小部分。可以通过使用创建 R 模型模块来扩展算法选择,使用 R 库。这是在 ML Studio 中开发机器学习模型的基于代码的替代方案。
特征选择
在开发机器学习模型时,一个常见的问题是在训练模型时决定应该使用哪些特征。对于监督学习算法,最佳特征是与标签变量高度相关的特征。这意味着,从广义上讲,改变其中一个变量也会导致另一个变量的变化。高度相关的变量示例可以是白天的时间和道路交通量:交通堵塞通常发生在高峰时段,而夜间交通量特别低。
特征选择的总体目标是发现对目标变量影响最大的变量。如果输入数据集包含大量列,那么 ...
模型和参数比较
在开发机器学习模型的核心任务之一是选择机器学习算法并配置算法的参数。ML Studio 为这两个任务都提供了模块,允许你在单次运行中比较多个模型或参数值。
要在一个实验中训练多个模型,可以通过将数据集指向多个训练分支来重复使用训练和测试数据集,如下所示:

先前的实验与早期的训练实验类似,不同之处在于有两个不同的算法作为输入的 Train Model 模块。Score Model 模块的结果也指向 Evaluate Model 模块,而不是像之前那样可视化原始预测结果。评估模块接受两个数据集作为输入,每个数据集包含来自评分模块的原始标签和预测值。
评估模块的输出包含预测值的汇总统计信息(第一个输入数据集显示在第一行):

评估结果的列取决于算法的性质。用于评估回归模型的准确性指标与用于评估分类模型的指标不同,例如。如图所示,评估模块为回归模型计算了几个不同的指标。不同的准确性指标捕捉到错误的不同方面。均方根误差可能是回归模型中最广泛使用的指标。此指标表示包含测试数据集中 95%示例的置信区间。
有时,不同的指标可能会给出矛盾的结果。在先前的例子中,第二个模型的均方根误差较低,而其他指标,如平均绝对误差,在第一个模型中表现更好。因此,在比较不同模型的输出结果时,选择准确的指标非常重要。不同的指标强调错误分布的不同方面,因此最佳指标取决于问题和输入数据。每个指标的性质超出了本书的范围,我们建议读者参考 ML Studio 文档和一般统计学文献,以获取有关准确性指标的详细信息。
如前所述,机器学习算法包括影响模型训练方式的参数。这些参数通常被称为超参数。虽然超参数的默认值在大多数情况下都选择得很好,但有时通过选择不同的参数值可以提高模型的准确性。调整模型超参数模块允许您在单次运行中多次使用不同的参数值来训练模型。此模块可以用作替代训练模型模块来创建训练好的模型,如下面的实验所示:

调整模型超参数的输入与训练模型相同,只是前者接受一个验证数据集作为第三个可选输入。使用验证数据集意味着不同参数值之间的准确性是通过未用于训练模型的示例来评估的。
每个算法都有自己的参数集,用于训练的参数必须在算法模块中指定。为了使参数具有多个值,将算法模块的创建训练模式选项切换到参数范围。请注意,某些算法,如线性回归,不允许超参数调整。参数的可能值可以以逗号分隔的列表形式给出,或者通过使用范围构建器指定范围,如下所示:

调整模型超参数模块并不一定尝试所有可能的参数组合。该模块支持以下参数扫描模式:完整网格、随机网格和随机扫描。如果选择完整网格模式,将尝试所有组合。随机网格模式仅使用所有可能组合的子集,随机选择。可以通过将随机扫描的最大运行次数设置为合适的值来控制随机网格扫描中的运行总数。这在组合数量很多且扫描整个参数空间需要非常长时间的情况下特别有用。同样,随机扫描模式也可以用来运行所有可能组合的子集。随机网格和随机扫描模式之间的区别在于,后者在指定范围内随机选择参数值,而前者仅使用算法模块中定义的确切值。
在运行示例之前,将标签列设置得与训练模型类似。还必须定义准确度指标,具体取决于模型的性质(分类或回归)。准确度指标确定在选择最佳模型时使用哪种度量。如前所述,不同的指标可能在最佳模型上产生分歧,因此决定使用哪种指标来评估模型性能是很重要的。
实验完成后,可以在调整模型超参数模块的第一个输出中查看评估结果,如下所示:

结果中的每一行对应一个独立的模型,该模型使用不同的参数进行训练。列显示每个情况下使用的参数值以及相应的准确度指标值。结果按准确度降序排列,按所选指标定义(此处:平均绝对误差)。调整模型超参数模块的第二个输出包含最佳训练模型,也由指标定义。此模型可用于评分,类似于训练模型模块的输出。
总之,Azure ML Studio 包含许多内置模块来评估机器学习模型的准确性,以及测试不同的模型和配置。然而,必须记住,即使是最好的模型在处理差数据时也可能表现不佳。如果要预测的值与特征变量不相关,算法将无法做出良好的预测。此外,产生最佳准确率的算法并不总是实践中最好的模型。特别是对于大型数据集,通常需要考虑训练过程的运行时间。如果训练过程的复杂性随着数据量的增加而无法控制地增长,实际上训练算法可能变得不可能。在选择任何给定问题的机器学习算法时,也必须考虑这些方面。
将模型部署为网络服务
Azure ML Studio 最大的优势之一是部署模型到云端的便捷性,以便其他应用程序使用。一旦机器学习模型被训练,如前节所示,只需几点击即可将其导出到 ML Studio 网络服务。部署为模型创建了一个网络 API,可以从任何互联网连接的应用程序调用。模型以特征作为输入数据,并产生预测值作为输出。通过将模型部署到 ML Studio 网络服务,无需担心底层服务器基础设施。计算资源和维护完全由 Azure 处理。
下面的子节将展示如何部署 ...
创建预测实验
在将训练好的模型导出为网络服务之前,创建该模型的训练实验必须转换为预测实验。预测实验定义了基于网络服务输入创建预测的评分管道。它不包含任何训练模块,因为模型已经训练好了。相反,模型只是从训练模型列表中加载,并作为输入导入到评分模型模块。
要创建预测实验,打开之前运行过的训练实验,或者运行一次训练实验以创建一个训练好的模型。实验不需要包含评分模型模块——这将在预测实验中自动添加。点击“设置网络服务 | 创建预测实验”。这将引导到一个新视图,显示新的预测实验,如下所示:

本例使用的是之前训练过的相同的航班延误预测实验。请注意,分割数据模块已经从预测实验中移除,并且训练模块现在已经被训练好的模型所取代。分割数据模块仅用于将数据分割成训练集和测试集,因此 ML Studio 推断出它可以与训练模块一起从预测实验中移除。
在部署之前先运行一次实验。在至少运行一次之前,预测性实验不能作为 Web 服务部署。有关如何部署模型的说明,请跳转到下一小节。
在某些情况下,可能有用将一些模块参数作为来自 Web 服务的输入。例如,数据预处理步骤可能取决于输入数据。为此目的,大多数模块配置都可以参数化,以便配置值作为输入在请求中提供。要参数化某个模块参数,请返回到训练实验并点击要配置的模块。在画布右侧的配置面板中,点击要配置的字段旁边的菜单并选择设置为 Web 服务参数,如下所示:

这将把参数添加到模块的 Web 服务参数列表中。如果请求中没有提供值,也可以为该参数设置一个默认值。然而,并非所有模块参数都可以设置为 Web 服务参数。那些不能设置的参数在字段旁边没有上下文菜单(例如,参见前一个截图中的清洁模式)。
有时,部署的模型可能会给出较差的预测,我们可能希望回退到模型的先前版本。可以从运行历史记录中查看以前的运行,该历史记录位于实验的底部面板中。运行历史记录显示了实验的每一次执行,点击实验的某个版本将使用相应的配置和结果打开它。这个版本的实验将被锁定,无法编辑或部署,但可以将其保存为新的训练实验并重新训练以创建新的预测性实验。如果模型已经重新训练多次并且忘记了模型的最佳参数,这很有用。
部署和测试 Web 服务
创建预测性实验后的最后一步是将模型部署到云端。打开预测性实验,确保它至少已经成功运行一次,如前所述。从底部面板中选择部署 Web 服务 | 部署 Web 服务 [新建]。这将打开部署配置视图。选择 Web 服务的名称和价格计划。价格计划决定了服务每月可以处理多少请求。价格计划是在 Azure 门户中创建新的 ML Studio Web 服务时创建的。如果没有现有的价格计划,也可以通过从菜单中选择创建新...来创建一个新的价格计划。
当配置 ...
摘要
Azure Machine Learning Studio 是一个用于开发机器学习模型的完全托管平台,使用户能够专注于机器学习开发中的关键任务和问题。其图形用户界面易于学习,使用它不需要编程技能。即使是没有任何编程或机器学习经验的用户也可以学会使用它,并且实验模板集合包含许多真实的机器学习模型示例,可以作为起点。ML Studio 是学习开发机器学习模型的好方法,ML Studio 中的样本数据集使得在没有自己的数据开始的情况下开发自己的模型成为可能。
Machine Learning Studio 包含了所有最常见与机器学习相关的任务模块,例如数据预处理、调整超参数以及评估机器学习算法的性能。如果当前任务所需的模块集合不足以满足需求,可以使用 R 和 Python 脚本模块来自定义任务并可视化结果,例如。
Machine Learning Studio 是一个用于开发机器学习模型的完整环境,包括从数据摄取到在云中部署模型的所有步骤。一旦模型在 ML Studio 工作区中训练完成,它们可以被转换为预测实验,并通过几点击部署到 ML Studio 网络服务中进行服务。用户无需担心管理网络服务 API 后面的底层基础设施,因为这完全由服务管理。网络服务门户包含与该服务集成的全面文档和示例,使得从外部应用程序开始消费机器学习模型变得非常容易。在下一章中,我们将看到如何使用 Azure 进行数据科学。
第六章:数据科学可扩展计算
在本章中,我们将学习如何使用 Azure 进行数据科学。我们将探讨如何准备数据,包括清洗和转换数据,创建工程特征,创建和训练机器学习模型,最后,使用机器学习模型进行预测。
要构建大数据机器学习算法,我们需要处理大量数据来训练它。为此,我们需要大量的计算能力。我们还需要计算能力能够根据负载动态扩展,以便大规模地提供这些机器学习模型,以便它们可以执行预测。
在公有云出现之前的时代,我们必须事先购买所有硬件。我们必须为所有这些硬件付费,...
Azure 中的不同可扩展计算选项
在 Azure 中,我们可以进行两种类型的扩展,以帮助我们扩展我们的 CPU 和/或 GPU:
- 
垂直扩展:增加虚拟机的 CPU 内核和内存数量。
 - 
水平扩展:在集群中增加虚拟机的数量,同时保持每个虚拟机中的 CPU 内核和内存不变。当我们使用水平扩展时,我们可能需要编写额外的代码来使用支持的框架执行并行或分布式计算。
 
DSVMs 简介
DSVM 是由流行的数据科学工具和框架组成的 Linux 或 Windows 容器。它可以帮助我们快速开始数据分析和数据科学。它支持多种操作系统;目前,我们可以使用 Windows 2012、Windows 2016、Ubuntu Linux 和 CentOS Linux 创建 DSVM。DSVM 的理念是减少创建工作环境所需的时间。
DSVM 预配置了经过兼容性测试的库。它每隔几个月就会更新,以便使用工具、库和框架的最新兼容版本。它支持 GPU 虚拟机,并预装了必要的驱动程序。DSVM 还包括有关如何开始的教程和指南。
DSVM 很可能 ...
部署 DSVM
让我们现在通过创建 DSVM 所需的步骤。在这个例子中,我们将创建一个 Windows 2016 DSVM,但如果您想创建 Linux DSVM,步骤是相似的:
- 
请访问 Azure 门户
portal.azure.com。 - 
点击创建资源,然后转到 AI + 机器学习,并点击数据科学虚拟机 – Windows 2016:
 

- 或者,我们可以在 Azure 门户中搜索 
数据科学虚拟机: 

- 将会弹出一个窗口,显示您选择的 DSVM 的一些关键特性:
 

- 我们可以通过提供必要的信息快速创建 DSVM。这包括资源组、区域、用户名和密码:
 

- 我们需要考虑的一个重要参数是虚拟机大小。在这里,我们有选择基于 CPU 和/或 GPU 的虚拟机的选项。根据我们的 CPU、内存和网络需求,我们有大量的选项。以下是一个不同类型虚拟机的示例截图:
 

在 Azure 创建我们的虚拟机时,请等待几分钟。一旦准备就绪,我们将在门户中收到通知。
在我们的虚拟机创建完成后,我们可以使用 RDP 或 SSH 根据操作系统访问它。从概览窗口,我们可以查看虚拟机运行时的不同指标,例如 CPU 使用率或磁盘操作。这些指标可以帮助我们决定是否需要调整虚拟机的大小:

我们还可以通过门户的“自动关机”选项配置虚拟机自动关机:

在我们登录到 DSVM 后,我们可以像使用本地机器一样开始使用其工具。有关每个工具的更多信息,请参阅以下网站:docs.microsoft.com/en-us/azure/machine-learning/data-science-virtual-machine/provision-vm#important-directories-on-the-vm。
使用完虚拟机后,我们可以从门户停止它,以避免不必要的费用。当我们想要在未来使用它时,我们可以再次启动它,而无需重新创建。
现在我们来看一下 DSVM 的一个变体——DLVM。
DLVM
DLVM 是一种特殊的 DSVM,其基础镜像是为深度学习定制的。我们可以使用 Windows 2016 或 Ubuntu Linux 作为操作系统。它预装了框架、工具和教程,以便您快速开始深度学习。
配置 DLVM 与配置 DSVM 类似。我们需要为 DLVM 选择一个基于 GPU 的虚拟机:
- 
前往 Azure 门户,搜索“深度学习虚拟机”。我们可以以创建 DSVM 相同的方式创建 DLVM。
 - 
会弹出一个窗口,要求我们提供名称并选择操作系统、用户名、密码、资源组、位置等信息。下一个窗口要求我们选择基于 GPU 的虚拟机。如下面的截图所示,您所在地区不可用的虚拟机大小...
 
批量 AI 服务
DSVMs 和 DLVMs 擅长执行基于单个节点的计算。然而,在我们需要分布式训练的场景中,我们可以使用批处理 AI 服务,这使我们能够专注于训练,而不必担心管理集群。批处理 AI 服务具有使用与 DSVM 相同基础镜像的 VM,这意味着在 DSVM 中可用的所有库、工具和框架在批处理 AI 服务中也可用。批处理 AI 服务允许我们使用并行训练和基于 GPU 的 VM 进行深度学习,我们还可以将 Docker 容器部署到批处理 AI 节点。当使用批处理 AI 服务时,我们可以将我们的 Azure Blob 或 Azure Data Lake Storage 挂载到我们的集群。这意味着我们可以使用大量数据训练,而无需将数据复制到集群,因为它可以流式传输。
在撰写本文时,批处理 AI 服务仅作为预览版提供,因此当服务普遍可用时可能会有新功能。
部署批处理 AI 服务
现在我们继续创建一个批处理 AI 服务:
- 访问 Azure 门户
portal.azure.com。转到创建资源并搜索“批处理 AI”: 

- 
在下一屏,我们可以创建我们的批处理 AI 服务。
 - 
在那之后的屏幕会要求输入我们的批处理 AI 服务工作区的名称、订阅、资源组和位置。工作区是添加集群、实验和文件服务的地方。
 - 
批处理 AI 集群将为运行您的实验提供计算能力。我们可以提供基本信息,例如 VM 数量、VM 类型、用户账户详情和网络...
 
ACI
作为数据科学家,在我们训练了机器学习模型之后,我们可能希望将其作为 Web 服务部署以进行实时或批量评分。当我们训练机器学习模型时,我们使用特定的框架和库。在大多数情况下,我们的部署环境中应该有相同的环境。容器是创建此类环境的快速简单方式,在其中我们可以托管我们的模型和依赖项。使用 ACI 可以轻松创建容器。作为数据科学家,我们可以使用 AML 将我们的机器学习模型作为 Web 服务部署到 ACI。这样,我们可以开发测试我们的模型,然后将其部署到生产环境中。有关 ACI 的更多详细信息,请参阅以下网站:docs.microsoft.com/en-us/azure/container-instances/container-instances-overview。
AKS
Kubernetes 是一个开源项目,用于管理托管在容器中的应用程序。AKS 是一个托管的 Kubernetes 服务,使得使用 Kubernetes 变得容易。一旦您测试了您的机器学习模型,您就可以将其部署到 AKS 的可扩展集群中。然后,您可以为您的机器学习模型拥有一个可扩展的 Web 服务。您可以使用 AML 将您的模型部署到 AKS。有关 AKS 的更多详细信息,请参阅以下网站:docs.microsoft.com/en-us/azure/aks/intro-kubernetes。
摘要
在本章中,我们学习了可供您扩展机器学习训练和部署的不同计算选项。我们了解了可以用来为您提供大量计算能力的垂直和水平扩展计算选项。
在下一章中,我们将学习机器学习服务器,它可以用于本地部署。
第七章:Machine Learning Server
本章的主题是 Microsoft ML Server 及其在 SQL Server 和 HDInsight 中的功能。此外,本章还将提供 ML Server 使用方法的概述,以展示使用 ML Server 的最佳情况以及如何使用它部署解决方案。
分类算法是监督学习算法,这意味着它们基于一组示例进行预测。
通常,使用数据来预测一个类别是有用的,这被称为分类。以 Andrew Ng 对 YouTube 内容的分类工作为例,将其分类为猫视频或不是猫的视频。正如 Andrew Ng 的著名工作一样,当只有两个选择时,它被称为双类或...
什么是 Microsoft ML Server?
Microsoft ML Server 将机器学习和人工智能带到您的数据中。它使您能够在提供开源机会的企业环境中拥有数据驱动的智能应用程序,同时拥有 Microsoft 软件的安全性和可靠性。Microsoft ML Server 提供了一个企业级平台,用于大规模的清洁、建模和分析数据。它允许组织成为洞察驱动的,允许您在 SQL 中分析数据,同时为 Python 和 R 提供全面的企业级支持。
ML Server 满足了所有参与数据分析的人的需求,从商业用户到数据工程师和数据科学家。有了 SQL、Python 和 R,企业可以确保有机会使用世界上最常见和广泛采用的编程语言来分析他们的数据,为企业提供基于数据的创新机会。通过 Microsoft ML Server,R、SQL 和 Python 的结合将开源和专有世界的最佳之处结合起来,带来真正的数据科学。
Microsoft ML Server 曾经被称为 Microsoft R Server。为了继续实现数据民主化的努力,R 支持建立在之前版本的 Microsoft R Server 和 Revolution R Enterprise 产品的基础上。
随着 Microsoft ML Server 的推出,每次发布都显著增强了机器学习和人工智能的能力。在最近的版本中添加了对 Python 的支持。ML Server 支持基于 Python 的分析的完整数据科学生命周期。
此外,ML Server 还提供了操作支持,使您可以将模型部署到可扩展的网格中进行批量处理和实时评分。这意味着您可以通过机器学习过程,然后设置模型供组织中的每个人使用。这是真正为每个人实现数据民主化!
Microsoft ML Server 解决了哪些问题?Microsoft ML Server 可以帮助解决许多不同、真实的业务问题。它可以处理端到端的数据流程。例如,它可以清理和预处理大量数据,以便下游系统可以处理数据以产生洞察。以下是一些 HDInsight 有用的示例:
- 
情感分析
 - 
网站流量模式
 - 
天气相关性效应
 - 
销售分析
 - 
客户分析
 - 
物联网(IoT) 项目
 
接下来,我们将探讨如何开始使用 Microsoft ML Server。
如何开始使用 Microsoft ML Server
要开始使用 Microsoft ML Server,建议使用 Microsoft 数据科学虚拟机(DSVM)。
DSVM 是一种专门构建的定制虚拟机,托管在微软的 Azure 云上。它专门为数据科学设计,旨在帮助学习者快速入门这项新技术。它预装并预配置了 Microsoft ML Server,因此您可以立即开始数据科学项目。
您可以使用 R 和 Python 等语言在 Microsoft DSVM 上直接进行数据分析。这对于原型设计非常出色,并且是很有用的学习工具,使学习者在学习过程中早期就为成功做好准备。
配置 DSVM
创建 Microsoft DSVM 的向导需要配置。选项如下:
- 
名称:为 DSVM 起一个名字。
 - 
虚拟机磁盘类型:选择 SSD 或 HDD。
 - 
用户名:指定管理员帐户 ID 以登录。
 - 
密码:指定管理员帐户密码。
 - 
订阅:如果您有多个订阅,请选择要在其上创建和计费机器的订阅。
 - 
资源组:您可以创建一个新的资源组或使用现有的组。
 - 
位置:选择最合适的数据中心。为了获得最快的网络访问,应选择拥有您大部分数据或离您实际位置最近的数据中心。
 - 
大小:选择满足您功能需求和成本限制的服务器类型之一。若要查看更多虚拟机大小选项,请选择“查看所有”。
 - 
设置:
- 
使用托管磁盘。如果您希望 Azure 为虚拟机管理磁盘,请选择“托管”。如果不这样做,您需要指定一个新的或现有的存储帐户。
 - 
其他参数。您可以使用默认值。如果您想使用非默认值,请将鼠标悬停在信息链接上以获取特定字段的帮助。
 - 
一旦配置了设置,下一步是检查和验证您输入的所有信息是否正确。然后,选择“创建”,DSVM 将在 Azure 中设置。
 
 - 
 
现在 DSVM 已经设置好了,让我们看看在 Microsoft ML Server 中使用 Python 的机会。
使用 Python 进行机器学习
Python 拥有大量的机器学习功能。Python 中最常用的机器学习库之一是 scikit-learn 库。它用于创建、训练和评估模型。在这本实战书中,我们使用 Python scikit-learn 库在代码中训练和评估模型。
开始使用 Python
Python 是一种流行的编程语言,正在迅速获得全球的认可。Python 具有许多优势;它可靠、灵活、易于学习和使用,并且可以在所有操作系统上免费使用。它在开源社区中得到了广泛的应用,并得到了强大的开发者社区的支持。Python 提供了许多免费的库,供您下载和使用在您的数据科学工作中。
Python 与开发者所处的环境相契合;它支持所有不同类型的开发,包括网络应用、迭代开发、网络服务、桌面应用、脚本、科学计算和数学计算。Python 被企业和许多大学、科学家、普通开发者以及专业开发者所使用。
在本章中,Python 编码将使用 Microsoft Visual Studio 完成,该软件在 Windows 上集成了一个强大的 Python IDE。Visual Studio 通过 Python 开发和数据科学工作负载(Visual Studio 2017)以及免费的 Python Tools for Visual Studio (PTVS)(Visual Studio 2015 及更早版本)为 Python 语言提供开源支持。
使用 DSVM,我们可以使用 Microsoft ML Server 和 Python 清洗、建模、分析和可视化我们的数据,并开发模型。
对于 Python,有许多常见的开发工作室。由于本章将使用 R 和 Python,我们将使用 Visual Studio Community 版本,因为它已经内置了 R 和 Python IDE。对于本章的实战部分,DSVM 已经预先安装了 PTVS 扩展和 R 扩展,因此我们不需要花费时间安装和配置这些附加项。
在 Visual Studio 中设置您的 Python 环境
Visual Studio 需要配置,以便使用 Microsoft ML Server 的 Python。这是第一步,并且只需要执行一次。
在 Visual Studio 中,选择视图 | 其他窗口 | Python 环境 菜单命令。
我们将创建一个 cookiecutter Python 项目。为此,首先,我们需要安装 cookiecutter。
打开命令提示符,输入以下命令:
easy_install --user cookiecutter
然后,我们可以继续使用 Visual Studio 中的 cookiecutter 功能,以 Python 和 Visual Studio 为起点。
在这个练习中,代码将来自微软的代码库,该代码库存储在 GitHub 上。
- 在 Visual Studio 中,选择文件 | ...
 
在 Microsoft ML Server 中使用 Python 编写自己的代码
在最后一节中,有一个端到端的示例,展示了在 Microsoft ML Server 中使用 Python 进行机器学习的能力。在本节动手实践中,我们将探索使用 Microsoft ML Server 从头编写 Python 代码。
在 Microsoft ML Server 中读取和写入数据的教程
在本节动手实践中,我们将使用相同的 Iris 数据集,以使用熟悉的数据集提供更多示例。代码的目的是展示一个内置数据集,并将其读取到 Python 输出屏幕上。
在本节教程中,我们将从 Microsoft ML Server 中读取和写入数据。最初,代码从 scikit-learn 库中导入 Iris 数据集。初始代码将打印出 Iris 数据集中的数据。数据被分配给df变量,该变量被设置为 dataframe。
概括来说,以下是我们将如何进行的高级步骤:
- 
它从 scikit-learn 库中导入 Iris 数据集
 - 
导入了 Pandas 库,...
 
在 Microsoft ML Server 中使用 Python 介绍回归
在此示例中,再次使用 Iris 数据集,因为它已经作为 Python 安装的一部分可用。在此段 Python 代码中,使用了 Python Seaborn 库来生成图表和图形。Seaborn 是一个 Python 包,它允许我们生成有趣的结果,这些结果可以帮助我们的机器学习工作。
在下一个演示中,代码将进行更改以生成更多图表,并将它们保存到 DSVM 上的 Git 存储库中。
从高层次来看,代码使用了 Iris 数据集,并基于数据生成图表。在最后一个图表中,添加了线性回归线以提高清晰度。
图表显示了三种 Iris 物种的萼片长度与花瓣长度之间的关系。数据按颜色分组,很明显线性回归线穿过每个物种。
在最简单的调用中,Seaborn 的lmplot函数绘制两个变量x和y的散点图,然后拟合回归模型y ~ x。它绘制了回归线以及该回归的 95%置信区间。在此示例中,它对每个物种都进行了操作。
代码按以下方式进行低级注释:
第一步是加载 Iris 数据集:
iris = sns.load_dataset("iris")
然后,设置颜色方案:
colours = ['#066082', '#b12acf', '#808080']
此代码将使用 Iris 数据集生成一个联合图:
sns_pairplot = sns.pairplot(iris, hue='species', size=2.5,palette=colours)
下一步是将输出保存到图像中,然后生成一个图表:
sns_pairplot.savefig("Packtpairplotoutput.png")
print("Produced Pairplot Image")
此代码将使用 Iris 数据集生成一个jointplot:
sns_jointplot = sns.jointplot(x="sepal_length", y="petal_length", data=iris);
接下来,我们将输出保存到图像中:
sns_jointplot.savefig("Packtjointplotoutput.png")
然后,我们将成功反馈给用户:
print("Produced Jointplot Image")
此代码将使用 Iris 数据集生成一个线性回归图:
sns_lmplot = sns.lmplot(x='sepal_length', # X-axis name y='petal_length', # Y-axis name data=iris, fit_reg=True, hue='species', # one colour per iris species scatter_kws={"s":100}, size=8, palette=colours)
然后将输出保存到图像中:
sns_lmplot.savefig('PacktLinearRegression.jpeg', bbox_inches='tight')
然后,我们通过控制台将成功反馈给用户:
print("Produced Linear Regression Image")
当脚本执行时,图像文件可以在 Visual Studio 仓库文件夹中找到。这是图像可能在仓库文件夹中找到的一个示例:C:\Users\myusername\source\repos\Python Packt Example\Python Packt Example。
在 Python 和 Microsoft 机器学习服务中查看更多数据可视化图表
代码还会生成另外两个图表:对数图和联合图。
对数图旨在在一个数据集中绘制成对关系。对数图使用变量,如花瓣宽度、花瓣长度、萼片宽度和萼片长度,并将它们相互关联。输出是通过在 Microsoft ML Server 中使用 Python 快速生成的。可视化允许快速看到数据中的模式。例如,花瓣长度和花瓣宽度之间存在一个有趣的关系,这可以从对数图的下方行中看到。
在 Seaborn 中,联合图绘制了两个变量的双变量和单变量图。这是由 ...
使用 Python 和 Microsoft ML Server 进行回归代码演练
我们将通过注释掉现有的 Python 代码来更改文件,并可以将我们的新代码添加到同一个文件中。了解如何注释代码很重要,这样代码才是可读的和可维护的:
- 
通过在每行开头插入井号
#来注释掉现有的 Python 代码。 - 
代码应该如下所示:
 
 # from sklearn import datasets
# import pandas as pd
# iris = datasets.load_iris()
# df = pd.DataFrame(iris.data, columns=iris.feature_names)
- 将之前给出的代码复制到文件中。文件应该如图所示,为了清晰起见,只显示了部分代码:
 

- 
运行代码时,请点击解决方案资源管理器中的文件,使其高亮显示。
 - 
点击开始按钮。
 - 
代码将执行,Python 解释器将出现。以下是一个示例:
 
- 
一旦代码执行完成,按照指示按任意键继续。
 - 
在 DSVM 上搜索仓库文件夹以查找 Python 代码生成的图像。如果您不清楚仓库位置,搜索
*.png并将找到完成的文件。 - 
通过在 Visual Studio 菜单栏中转到文件 | 保存所有来保存您的作品。
 
分析机器学习模型的结果
任何数据在没有其上下文的情况下都没有意义。机器学习是理解数据的前进方向,但也需要被解释。在非常高的层面上,这个过程可以描述如下:

需要理解数据;数据需要经过分析过程。在准确性和性能之间可能会有权衡。有时选择一个不太准确但性能更好的算法会更好。选择更近似方法的另一个优点是它们自然倾向于避免过拟合。
解释统计学没有一种唯一最佳的方法 ...
测量模型的拟合度
模型的预测实际上与观察数据匹配得有多好?了解给定观察值的预测响应值与该观察值的实际响应值接近的程度至关重要。
在回归中,最常用的度量标准是均方误差(MSE),它是估计值与实际估计值之间平均平方差的平均值。如果 MSE 很小,那么预测响应非常接近真实响应。如果 MSE 很大,那么预测响应和真实响应差异很大。这是展示模型不适合的第一个步骤。
注意,分析集中在 MSE 测试数据上,而不是训练数据的 MSE。最有趣的结果使用模型之前未见过的测试数据,这是我们分析 MSE 结果的重点。
交叉验证
随着我们对模型进行测试和训练,MSE 可以在不同的数据集上广泛变化。因此,交叉验证对于理解真实结果非常重要。交叉验证试图展示模型在实际中的工作方式。问题是:我们的模型能否推广到独立数据集?
为了进行交叉验证,模型会持续训练,然后给出一系列测试数据集。交叉验证结合了度量标准,并平均它们以推导出模型预测性能。
方差和偏差
我们所说的方差和偏差的结果是什么意思?方差指的是如果使用不同的训练数据集进行估计,预测值将变化的程度。在整个训练过程中,不同的训练数据集将导致不同的预测,但希望预测值在训练集之间不会变化太大。
偏差是指将现实生活中的问题简化为数据集时引入的错误。通过将数据简化为更简单的模型,可能会引入偏差。当我们观察现实生活的复杂性时,这是一个需要理解和考虑的问题,尤其是在解释结果时。
概述
在本章中,我们研究了适用于 Python 的 Visual Studio,并经历了一些有趣的演示。我们学习了使用团队数据科学流程(TDSP)进行建模的过程。在这个过程中,我们研究了结果建模和分析,以及进行数据可视化以宣传我们的工作。
第八章:HDInsight
HDInsight 是 Hadoop 在微软 Azure 平台上运行的一种实现方式。HDInsight 基于Hortonworks 数据平台(HDP),与 Apache Hadoop 完全兼容。
HDInsight 可以被视为微软的Hadoop 作为服务(Haas)。你可以通过门户或通过 Windows PowerShell 脚本快速部署系统,无需创建任何物理或虚拟机器。
以下为 HDInsight 的特点:
- 
你可以在集群中实现少量或大量节点
 - 
你只需为使用的部分付费
 - 
当你的工作完成时,你可以取消集群的配置,当然,你也可以停止为其付费
 - 
你可以使用微软 Azure 存储,即使集群被取消配置,你也能保留数据
 - 
HDInsight 服务与来自微软和其他供应商的输入输出技术协同工作
 
正如之前提到的,HDInsight 服务运行在微软 Azure 上,在进一步讨论之前需要稍作解释。
数据被描述为“大数据”,以表明它正在以不断增长的数量、越来越高的速度和越来越多样化的非结构化格式以及可变的语义上下文中收集。大数据收集本身并不为企业提供价值。为了使大数据以可操作智能或洞察力的形式提供价值,它必须可访问、清洗、分析,然后以有用的方式呈现,通常与来自各种其他来源的数据相结合。
Apache Hadoop 是一个软件框架,它促进了大数据的管理和分析。Apache Hadoop 的核心提供了可靠的Hadoop 分布式文件系统(HDFS)数据存储,以及一个简单的 MapReduce 编程模型,以并行处理和分析存储在此分布式系统中的数据。HDFS 使用数据复制来应对在部署如此高度分布式系统时出现的硬件故障问题。
Windows Azure HDInsight 将 Apache Hadoop 作为云服务提供。它使 HDFS 或 MapReduce 软件框架和相关项目在一个更简单、更可扩展、成本效益更高的环境中可用。为了简化配置和运行 Hadoop 作业,以及管理已部署的集群,微软提供了 JavaScript 和 Hive 交互式控制台。这种简化的 JavaScript 方法使得 IT 专业人士和更广泛的开发者群体能够通过提供更易于访问的 Hadoop 框架路径来处理大数据管理和分析。
对于已经使用 R 的数据科学家来说,HDInsight 提供了一条通往云端的路径,以实现大数据分析。对于 IT 专业人士和系统管理员来说,它允许以简单直观的方式管理大数据。
正如前几章所述,我们将使用微软的 TDSP 作为背景,使用 HDInsight 生成机器学习模型。现在,我们将使用 R 和 HDInsight 来分析和建模一个样本数据集。
R 与 HDInsight
HDInsight 的主要功能是什么?它是一个微软专有解决方案,但在微软 Azure 云中是一个 100% 的 Apache Hadoop 解决方案。Azure HDInsight 是一种服务,在云中部署和配置 Apache Hadoop 群集以进行大数据分析。
HDInsight 提供了一个软件框架,用于管理、分析和报告大数据。您可以使用 HDInsight 在任何格式中对结构化或非结构化数据进行交互式查询,达到 PB 级别。您还可以构建模型,将它们连接到 BI 工具。HDInsight 致力于通过 Excel 和 Power BI 提供大数据分析和洞察。Azure 的 HDInsight 服务将 Apache Hadoop 作为一项云服务提供,提供软件 ...
开始使用 Azure HDInsight 和 ML 服务
HDInsight 有多种群集类型,包括 Hadoop(Hive)、HBase、Storm、Spark、Kafka、交互式 Hive(LLAP)和 ML 服务(R 服务器)(带 R Studio,R 9.1)。以下是 ML 群集配置,这是在设置过程中建立的:

HDInsight 的设置和配置
在本节中,我们将设置和配置 HDInsight。要设置和配置 HDInsight,请执行以下步骤:
- 
确保您有一个 Azure 账户
 - 
登录到 Azure 门户 portal.azure.com
 - 
当您登录到 Azure 门户时,点击按钮添加新资源
 - 
在搜索查询框中,输入
HDInsight,您将获得多个选项 - 
选择仅说“HDInsight”的选项
 
接下来,我们将设置 HDInsight 的基本配置。
HDInsight 的基本配置
在基本配置项中,您需要输入您希望用于 Azure HDInsight 的名称,以及存储选项。以下是一个示例配置:

对于群集类型,请确保您选择 ML 服务选项。以下是一个示例:

Azure HDInsight 的存储选项
一旦选择了群集类型,下一步就是考虑存储。在撰写本文时,有两种存储类型:默认 Azure 存储,以及 Azure Data Lake Storage 1 代。在本教程中,将使用默认 Azure 存储:

要完成 HDInsight 群集的创建,请点击“下一步”。然后检查设置并点击“创建”。
HDInsight 群集的设置大约需要二十分钟。
设置完成后,点击门户中的 Azure HDInsight 群集。以下是门户的截图:
这是 Azure HDInsight 的一个截图 ...
使用 SSH 连接到 HDInsight 群集
Azure Cloud Shell 允许数据科学家使用 SSH 访问 HDInsight 集群。Azure Cloud Shell 位于 Azure 门户的顶部导航中,并用箭头符号表示。以下是截图:

- 
在 Azure 门户中点击 Azure Cloud Shell 图标。
 - 
选择订阅以创建存储帐户和 Microsoft Azure Files 共享。
 - 
选择创建存储。
 - 
确认 shell 窗口左侧的环境下拉菜单显示为 Bash。现在,您可以使用
ssh命令登录。以下是截图: 

登录后,您就可以访问 Azure HDInsight 集群上的 Microsoft ML 服务了。
访问 Azure HDInsight 上的 Microsoft ML 服务
在 bash 提示符中,只需输入 R 即可访问 Microsoft ML 服务。以下是截图:

要查看 HDInsight 集群上的文件,请使用以下 RevoScaleR 命令:
rxHadoopListFiles
然后将文件读入 DOS 提示符框中。以下是一个示例:

一旦文件被读取出来,我们就可以开始使用 R 处理一些样本数据集了。Iris 数据集将被用来解释在 HDInsight 的 Microsoft ML 服务中使用 R。
输入以下命令将使数据科学家感到放心...
使用 R 进行 HDInsight 和数据分析
首先,我们需要将我们的数据放入 Azure,以便 HDInsight 可以看到它。我们可以直接上传数据到 Azure 存储,或者我们可以使用SQL Server Integration Services(SSIS)中的功能。SSIS 具有连接到 Azure Blob 存储和 Azure HDInsight 的能力。它使您能够创建集成服务包,在 Azure Blob 存储和本地数据源之间传输数据。然后,Azure HDInsight 进程可以对数据进行处理。
为了使用 SSIS 将数据放入 HDInsight,需要安装 Azure Feature Pack。Microsoft SSIS Feature Pack for Azure 为 SQL Server Integration Services 提供了连接到许多 Azure 服务的能力,例如 Azure Blob 存储、Azure Data Lake Store、Azure SQL Data Warehouse 和 Azure HDInsight。这是一个单独的安装,您需要在服务器上安装 Azure Feature Pack 之前确保 SQL 服务器已安装。否则,Feature Pack 中的组件在您将包部署到 SSIS 目录数据库时可能不可用。
要安装 Microsoft SQL Server 2017 Integration Services Feature Pack for Azure,使用术语Microsoft SQL Server 2017 Integration Services Feature Pack for Azure搜索 Microsoft 下载页面。然后,下载文件并运行向导。
Azure Data Factory 和 HDInsight 如何交互?
可以将文件移动到或从 Azure Blob 存储中读取和写入数据。使用 Azure Data Factory 的好处在于,它可以扩展现有的 ETL 管道以使用云存储,或通过 Azure VM 实现基于云的 SSIS 执行。在 2018 年 7 月推出通用可用版本后,Azure Data Factory 版本 2 可以部署 SSIS 包。它提供了强大的功能,有助于为云计算服务(如 HDInsight 和 Microsoft ML Server)准备数据。它可以执行一系列任务,包括将数据存档到云存储,以及在 Blob 存储中直接枚举文件。
Azure 中的特定 HDInsight 处理任务 ...
使用 ML 服务在 Azure HDInsight 上运行查询
在 HDInsight 的 ML 服务中,计算上下文指定了处理给定工作负载的计算引擎的物理位置。默认值为本地,这意味着它在您的本地计算机上运行。为了充分利用云运行,您需要从本地切换到远程。
如果 R 脚本在边缘节点上的 ML 服务集群中运行,则 R 脚本在该节点上的 R 解释器中运行。如果它调用 RevoScaleR 函数,则它在由您设置的 RevoScaleR 计算上下文确定的计算环境中执行。在这种情况下,当您从边缘节点运行 R 脚本时,计算上下文的可能值如下:
- 
本地顺序 (local)
 - 
本地并行 (localpar)
 - 
MapReduce
 - 
Spark
 
并行提供了最佳性能。local 和 localpar 选项都会在所有可用核心上以并行方式执行其他 rx 函数调用,除非指定了其他方式。为此,使用 rxOptions numCoresToUse 设置,以下是一个示例:
rxOptions(numCoresToUse=6)
如果要分析的数据量较小,并且是一次性或偶尔的分析,则建议您直接使用本地或 localpar 将其流式传输到分析程序中。如果要分析的数据量在小型或中型范围内,并且需要重复或迭代分析,则将其复制到本地文件系统,导入到 XDF,并通过本地或 localpar 进行分析。
Azure 中的 RevoScaleR
RevoScaleR 是一套强大的微软专有函数,用于大规模实践数据科学。当使用 R 进行大数据分析时,RevoScaleR 提供额外的功能,例如用于导入、转换、操作、汇总、可视化和分析的数据相关函数。使用 R 和 HDInsight 可让您能够并行且在分布式文件系统上对非常大的数据集执行这些任务。RevoScaleR 使用外部内存算法,允许它一次处理一块数据,更新结果,并遍历所有可用数据。
RevoScaleR 函数通过 RevoScaleR 包提供,该包可在 Azure HDInsight ML 服务中使用。...
我们如何使用 ML 服务将数据读入 HDInsight?
使用 RevoScaleR 的 R 默认命令,我们可以在 HDInsight 上使用 ML 服务读取数据。这些数据类型包括以下内容:
- 
通过开放数据库连接(ODBC)数据源读取数据
 - 
从其他文件系统(如 SAS、SPSS、ODBC、Teradata、分隔符和固定格式文本)读取文件
 - 
使用内部数据框作为数据源
 - 
从 R 无法原生读取的数据源中处理数据
 
RevoScaleR 还嵌入在 Azure HDInsight、Azure DSVMs 和 SQL Server 中。RevoScaleR 还包括一个可扩展的框架,用于为大数据集编写自己的分析。
优先的数据格式是 XDF 格式。从那里,我们可以使用 R 在 HDInsight 和 ML 服务上进行多项分析。
我们可以在 HDInsight 的 ML 服务中使用 R 进行哪些类型的分析?
我们可以进行汇总、交叉表操作,创建立方体,以及进行决策树和森林等建模,以及标准的 R 工作。要执行代码,我们将使用 RStudio 执行 Microsoft R 服务器命令。RStudio 使 R 更容易使用。它包括代码编辑器,以及调试和可视化工具。在以下示例中,代码练习和图像将使用 RStudio 执行。我们还将使用 R 笔记本作为一种整洁的方式来执行代码。R 笔记本是一个包含可以独立和交互式执行的代码块的文档。正如我们将在整个练习中看到的那样,输出将立即显示在输入下方。我们可以可视化...
从 Azure HDInsight ML 服务中读取文件数据
ML 服务可以读取几乎所有的平面文本文件,例如 SPSS、CSV 和 TXT 文件。
这里有一个例子,我们提供路径方向并从给定的路径读取文件目录到 R:
filename <- read.csv ( file = "Filename.csv" )
我们还可以将文本文件导入 R,然后查看文件以读取它:
filename <- rxImport ( "full file path")
在 R 中首先检查工作目录的位置至关重要。确认路径是一个良好的实践。命令通过以下命令执行:
getwd()
在我们的例子中,工作目录位于D驱动器上,是Demo文件夹。
要读取 CSV 文件,我们提供路径,然后读取文件路径,该路径指向一个变量名。在这个例子中,文件将存储在名为SalesRecordsFile的变量中:
 SalesRecordsFile <- read.csv ( "D:/Demo/SalesRecordsFile.csv" , header = TRUE )
接下来,我们将使用SalesRecordsFile变量,并将其设置为读取 CSV 文件的命令。
一旦我们执行了SalesRecordsFile命令,Microsoft ML 服务器就会读取SalesRecordsFile.csv文件。
将文本和 CSV 文件转换为首选的 XDF 格式
与 CSV 文件相比,XDF 文件体积小且已压缩。这意味着 XDF 文件可以比 CSV 文件更快地读取和处理。平面文件包含没有结构化相互关系的记录。XDF 文件格式只能由 Microsoft ML Server 读取。这是一种非常高效的存储和查询平面文件中数据的方式。与其他文件相比,这些文件体积非常小,因此它们可以快速且容易地进行分析。RStudio 可以轻松处理将我们的源文本或 CSV 文件转换为 XDF 格式的任务。
要转换文件,我们可以使用 rxImport 函数,该函数将平面文件(如文本文件)中保存的数据加载到首选的 ...
在 Microsoft ML 服务中使用新的 XDF 文件
我们设置 SalesRecordsXDF 变量以保存传入数据的路径,并指定 XDF 文件必须写入的位置。
我们可以使用 print 命令来获取名为 SalesRecordsXDF 的变量中的内容信息。当我们运行代码时,我们可以看到输出,它详细说明了处理的行数和位置。如果我们想查看文件内容,我们可以使用 rxGetInfo 命令来提供一些信息。在这个例子中,我们将获取前五行数据。
XDF 与平面文本文件比较
现在我们已经查看了一个 CSV 文件和一个 XDF 文件,哪一个更好?XDF 文件可以读取和处理,因此它们存储在本地磁盘上。通过调用 rxImport(),Microsoft R Server 将读取 XDF 文件并解压缩它,然后将其作为数据框插入内存中。
XDF 文件格式是 Microsoft 文件格式。这意味着检查输出和导出功能很重要,因为其他程序将无法读取它。XDF 文件旨在支持 RevoScaleR 包中的分析数据处理功能集。
文件大小的优势是什么?对于大数据,这意味着数据可以与机器上可用的磁盘大小一样大,而不会造成任何压力 ...
从 SQL Server 读取数据
要连接到 SQL Server,应遵循以下事件序列:
- 
连接到 Microsoft SQL Server
 - 
从 Microsoft SQL Server 获取数据
 
连接到 SQL Server 数据库
Microsoft ML 服务还可以通过 开放数据库连接 (ODBC) 读取数据,这是一种知名且普遍接受的数据库访问方法。最初,连接字符串被设置,并分配给一个变量。在这个例子中,变量名包含连接字符串。以下是一个示例代码:
sqlServerConnectionString <- "SERVER=<IP Address goes here>;DATABASE=<database name goes here>;UID=<User Name goes here>; PWD=<Your Password Goes Here>”
从表中提取数据,从 Microsoft SQL Server 获取数据
一旦我们设置了连接字符串信息,下一步就是设置一个变量以保存用于检索数据的 SQL 命令。以下是一段示例代码:
sqlServerDataSource <- RxSqlServerData(sqlQuery = "SELECT * FROM <view name goes here>",connectionString = sqlServerConnectionString)
在 Microsoft ML 服务上安装 R 包
可以在 Azure ML Studio、Microsoft ML Server 和 SQL Server 机器学习服务中使用相同的 R 代码。
在这个例子中,rjson 包允许用户使用 fromJSON() 函数导入数据。如果 rjson 包未安装在 Microsoft ML Server 上,那么您需要安装它。以下是安装说明:
- 
导航到安装 R 工具的文件夹。
 - 
右键点击
RGui.exe,然后选择以管理员身份运行。如果您没有所需的权限,请联系数据库管理员并提供您需要的包列表。 - 
从命令行,如果您知道包名,键入:
install.packages("rjson")。 - 
注意双引号 ...
 
在 Microsoft ML 服务中分析和汇总数据
我们可以使用不同类型的统计方法来分析和汇总我们的数据。一些统计方法更为基础,我们首先从使用简单的交叉表开始。然后,我们可以转向更复杂的统计方法。
交叉表和单变量统计
交叉表提供了一个功能,通过简单的受访者计数和比例的表格,帮助探索调查数据,包括以下指定能力:
- 
频率计数或行/列/联合/总计表比例
 - 
多行和列变量
 - 
所有边距,仅大边距,或无边距
 
要创建交叉表,使用 rxCrossTabs() 函数。rxCrossTabs() 也用于根据不同变量的组合计算总和:
rxCrossTabs(formula, data, …)
rxCrossTabs 函数使用一个包含您想要交叉制表的变量的公式。它还有一个对数据的引用,该引用指的是您想要查找变量所在的数据集 ...
处理数据立方体
分析的一个重要特性是数据的聚合。在 Microsoft ML Server 中,当我们要在 R 中对数据进行进一步分析时,使用 rxCube() 函数进行数据聚合。
rxCube() 函数执行的功能与 rxCrossTabs() 非常相似。rxCube() 通过计算诸如表格求和或平均值等指标来帮助分析。rxCube() 以长格式而不是表格形式生成求和或平均值。rxCube 的示例语法如下:
rxCube(formula, data, …)
代码显示 rxCube 需要一个包含交叉制表变量公式的公式。它与 rxCrossTabs() 在平均值参数的默认值上有所不同(rxCube() 为 true;rxCrossTabs() 为 false)。与 rxCrossTabs 类似,数据项指的是您想要在公式中指定的变量所在的数据集。以下是一个示例代码片段,使用之前提到的 Iris 数据集:
IrisDataCube <- rxCube(Petal.Width ~ Species, data = iris)
为了阐明其用法,以下展示了一个示例输出:

现在我们已经看到了如何进行初步分析,我们可以通过进行一些分组来进一步研究数据。
使用 Microsoft ML Server 和 R 对数据进行分组
在商业智能和数据分析中,许多数据操作都是在按变量定义的分组数据上完成的。在 Microsoft ML Services 中,有一个额外的增强 R 公式,称为rxSummary,它可以总结数据,这是调查数据的好起点。rxSummary通过计算包括变量均值的汇总统计量来工作。
这里是使用rxSummary和 Iris 数据集的输出示例:

摘要侧重于一列,Petal.Length。它产生了我们从 R 中的summary命令所期望的相同信息。
在 Microsoft ML Server 中使用 R 计算分位数
在 Microsoft ML Server 中,使用rxQuantile函数快速计算近似分位数。请注意,此计算不包含任何类型的排序。以下代码片段使用rxQuantile对 Iris 数据集的瓣长进行操作:

分位数计算提供了数据的分位数并打印出来。
Microsoft ML Services 中的逻辑回归
逻辑回归是用于建模具有二元响应变量的数据的标准工具。在 R 中,您可以使用glm函数拟合逻辑回归,指定二项式家族和对数链接函数。在 Microsoft ML Services 中,使用rxGlm进行相同的目的,并且以相同的方式:
irisGLM <- rxGlm(Petal.Width~ Species,family = Gamma,dropFirst = TRUE,data = iris)
然后,我们可以输入变量名以查看结果。以下是一个截图:

为了更好地解释系数,我们可以将它们转换回因变量的原始尺度。为此,我们执行...
使用模型预测值
如果输入数据集与用于拟合rxLinMod对象的相同,则得到的预测是模型的拟合值。如果输入数据集是不同的数据集,则得到的预测是来自原始模型的新的响应的真预测。如以下示例所示,可以通过将computeResiduals标志设置为TRUE来获取预测值的残差:
rxPredict(irisGLM,data = iris,writeModelVars = TRUE,computeResiduals  = TRUE,overwrite = TRUE)
接下来,我们使用rxPredict来获取拟合值、预测标准误差和置信区间。通过将writeModelVars设置为TRUE,模型中使用的变量也将包含在输出数据集中。以下是一个示例输出:

我们可以在这里查看irisGLM模型的摘要:

输出结果显示,这些 p 值高度显著,这意味着模型看起来是一个很好的拟合。
然而,我们可以通过查看残差偏差与残差自由度的比率来检查模型是否合理,这个比率是 10.2/147,得到的结果是 0.06。这意味着模型相当分散不足。另一个选择是使用二项式而不是伽马家族重新执行irisGLM模型。
为了更好地理解数据,可以使用 Microsoft ML 服务中的默认 R 语言和自定义功能来可视化数据。
数据可视化
Microsoft ML 服务提供了使用 R 作为可视化引擎来生成图形的功能。您可以为各种图表和仪表板提供表示单变量和多变量数值和分类数据的简单方式。
创建直方图
rxHistogram() 用于创建数据的直方图。以下是 Iris 数据集的语法示例:
rxHistogram(~Petal.Width, data = iris)
您可以在公式中看到,最简单的情况是只有一个变量位于 ~ 右侧的公式。
如前所述,Iris 数据集是这里使用的数据,这是您想要指定所使用数据集的部分。以下是输出示例:

使用单行代码创建直方图非常简单。
创建折线图
直方图只是可视化数据的一种方式。另一个例子是 rxLinePlot 示例,它使用数据创建散点图的线条。对于此函数,此公式应在 ~ 的左侧有一个变量,它反映了 y 轴,在 ~ 的右侧有一个变量,它反映了 x 轴。以下是折线图的示例:

我们还可以使用 Microsoft ML 服务中的其他功能和特性来转换数据子集,然后重新可视化数据。
一旦我们能够看到并理解我们的数据,我们可以通过使用额外的 Microsoft ML 服务功能来进一步丰富它。...
为分析丰富数据
在大数据解决方案中,有时由于数据本身的巨大规模,需要将其转换和加工成更小的块。为了解决这个问题,Microsoft 引入了一些功能来帮助。本节将介绍旨在帮助解决大数据问题的功能。
rxDataSteps
rxDataStep 函数可用于分块处理数据。它是 Microsoft ML 服务中重要的数据转换函数之一。
rxDataStep 函数可用于创建和转换数据子集。rxDataStep 函数一次处理一个数据块,从一个数据源读取并写入另一个数据源。rxDataStep 允许您修改现有列或向数据中添加新列。它还可以通过与您的列和行一起工作,以及在进一步处理数据之前对其进行过滤和排除来丰富分析。
rxDataStep 的一个常见用途是创建一个新的数据集,其中包含行和变量的子集,如下所示:
rxDataStep(inData = iris, outFile = "myIrisXDF.xdf")
在上一部分 ...
摘要
在本章中,我们探讨了在 HDInsight 上 Microsoft ML 服务的机器学习过程。我们回顾了如何导入数据、如何清理数据、如何建模数据以及如何可视化数据。
最后一步是确保当你停止使用 HDInsight 时,将其关闭。HDInsight 按分钟计费,让它持续运行将会产生费用。建议你在不再需要时保存代码并关闭所有内容。
如果你只是想要运行代码并学习如何使用微软机器学习服务,之前的代码示例在 DSVM 上的 Visual Studio 中的微软机器学习服务器上同样适用。
第九章:使用 Spark 进行机器学习
本章涵盖了 Microsoft 平台上 Spark 的使用,并将提供如何使用 Spark 训练 ML 模型的演练,以及 Azure 中可用于执行基于 Spark 的 ML 训练的选项。
我们将涵盖以下主题:
- 
使用 Azure Databricks 的机器学习
 - 
Azure HDInsight 与 Spark
 - 
某些实验室的演练,以便您可以看到令人兴奋的技术在实际应用中的表现
 
使用 Azure Databricks 进行机器学习
通过采用机器学习,企业希望改善他们的业务,甚至通过使用数据作为数字化转型生命线的方式彻底改变它。Databricks 使公司能够快速开发他们的数据科学能力,并通过在 Azure 中提供完全集成的统一分析平台将其转化为竞争优势。
企业希望利用他们历史上收集的数据宝库。组织最近开始收集更多数据。这包括各种形式的数据,包括以点击流、网页日志和物联网设备和机器的传感器数据形式的新客户数据,以及音频、图像和视频。
通过分析这些数据,各个垂直领域的企业可以通过多种方式改善业务成果,这些方式影响我们的日常生活。这包括医疗诊断、欺诈检测、检测网络攻击、优化制造流程、客户参与等等。
Databricks 提供了一个统一的分析平台,将数据工程师、数据科学家和业务人员聚集在一起,在整个数据生命周期中进行协作,从 ETL 程序开始,到为生产环境构建分析应用程序。
数据工程师可以使用 Databricks 的 ETL 功能从各种来源创建新的数据集,包括结构化、半结构化和非结构化数据。数据科学家可以选择多种编程语言,如 SQL、R、Python、Scala 和 Java,以及 机器学习 (ML) 框架和库,包括 Scikit-learn、Apache Spark ML、TensorFlow 和 Keras。
Databricks 允许企业以协作的方式探索数据,并使用 Databricks 的笔记本和可视化能力创建和测试他们的模型。交付时间快,将机器学习管道发送到生产的过程也很快。
Databricks 正在尝试解决哪些挑战?
集成数据始终是困难的。然而,由于需要集成的各种框架和库,集成挑战在机器学习中更为困难。
Databricks 在数据科学平台的安全性和可管理性方面注重企业就绪性。
我们如何开始使用 Apache Spark 和 Azure Databricks? 第一步是在 Azure 中设置 Azure Databricks 软件。
开始使用 Apache Spark 和 Azure Databricks
在本教程中,我们将开始探索 Azure Databricks。过程中的一个关键步骤是设置 Azure Databricks 的一个实例,这在本部分中介绍:
- 
登录到 Azure 门户(
portal.azure.com/)。 - 
选择+创建资源 | 分析 | Azure Databricks。
 - 
在 Azure Databricks 服务对话框中,提供工作区配置。
 - 
工作区名称:
- 为您的 Azure Databricks 工作区输入一个名称
 
 - 
订阅:
- 选择您的 Azure 订阅
 
 - 
资源组:
 - 
位置:
 - 
定价层:
- 选择定价层(
azure.microsoft.com/en-us/pricing/details/databricks/)。如果您选择试用(高级 - 14 天免费 DBUs),则工作区将免费获得 14 天的高级 Azure Databricks DBUs。 
 - 选择定价层(
 - 
选择固定到仪表板,然后点击创建。门户将显示“部署进行中”。几分钟后,Azure Databricks 服务页面将显示,如下面的截图所示:
 

在左侧,您可以访问基本的 Azure Databricks 实体:工作区、集群、表、笔记本、作业和库。
工作区是存储您的 Azure Databricks 资产(如笔记本和库)以及您导入的数据的特殊根文件夹:

创建集群
集群是一组 Azure Databricks 计算资源:
- 要创建集群,请在侧边栏中点击集群按钮,然后点击创建集群:
 

- 
在新建集群页面,指定集群名称。
 - 
在 Databricks 运行时版本下拉列表中选择 4.2(包括 Apache Spark 2.3.1,Scala 11)。
 - 
点击创建集群。
 
创建 Databricks 笔记本
笔记本是一组在 Spark 集群上运行计算的单元格。要在工作区中创建笔记本,请按照以下步骤操作:
- 
在侧边栏中,点击工作区按钮。
 - 
在
工作区文件夹中,选择创建笔记本: 

- 
在创建笔记本对话框中,输入一个名称并在语言下拉列表中选择 SQL。
 - 
点击创建。笔记本以顶部一个空单元格打开。
 
在 Azure Databricks 中使用 SQL
在本节中,您可以使用 SQL 语句创建表并使用 SQL 语句处理数据:
- 将此代码片段复制并粘贴到笔记本单元格中,以查看 Azure Databricks 数据集的列表:
 
display(dbutils.fs.ls("/databricks-datasets"))
- 代码如下所示:
 
DROPTABLEIFEXISTS diamonds;CREATETABLE diamondsUSING csvOPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")
- 按 Shift + Enter。笔记本会自动连接到你在 步骤 2 中创建的集群,创建表格,加载数据,并返回 
OK: 

- 接下来,你可以运行一个 SQL 语句 ...
 
显示数据
显示按颜色划分的平均钻石价格图表:
- 
点击柱状图图标
 - 
点击绘图选项
 - 
将颜色拖入键值框
 - 
将价格拖入值值框
 - 
在聚合下拉菜单中,选择 AVG:
 

- 点击应用以显示柱状图:
 

使用 HDInsight 进行机器学习
Apache Spark 是数据处理领域最大的开源项目。自其发布以来,Apache Spark 已被各行各业的企业迅速采用。Apache Spark 是一个快速、内存数据处理的引擎,具有优雅且表达性强的开发 API,允许数据工作者高效地执行流处理。此外,Apache Spark 还简化了需要快速迭代访问数据集的 ML 和 SQL 工作负载。
当前章节的重点是 Apache Spark,它是一个用于快速、大规模数据处理和机器学习的开源系统。
数据科学虚拟机为您提供了 Apache Spark 平台的独立(单节点进程)实例。
什么是 Spark?
Spark 被设计为一个高性能、通用计算引擎,用于快速、大规模的大数据处理。Spark 通过在集群的不同节点间分配其工作负载来工作。Spark 可以扩展以处理大量数据。Spark 面向大数据批处理,非常适合使用低延迟、高性能数据作为操作基础进行数据分析。
Apache Spark 由 Spark Core 和一系列库组成。Core 是分布式执行引擎,Java、Scala 和 Python API 为分布式 ETL 应用程序开发提供了一个平台。这使得开发者可以通过在 Java、Scala 或 Python 中编写应用程序来快速取得成功。
Spark 是基于 弹性分布式数据集(RDD)的概念构建的,自从 Spark 诞生以来,RDD 就一直是 Spark 处理数据的核心概念。RDD 与 R 中的数据框类似。RDD 是对数据进行高级抽象,为数据科学家提供了一种模式来检索和使用数据。RDD 是不可变的数据集集合,代表数据集,并具有内置的可靠性和故障恢复能力。RDD 在任何操作(如转换或操作)上都会创建新的 RDD。它们还存储了 lineage,用于从故障中恢复。例如,可以将数据分离到数据集中的适当字段和列中,这意味着数据科学家可以更直观地与之交互。
Spark 处理过程涉及多个步骤,可能涉及多个 RDD。因此,在处理过程中可能存在多个 RDD。以下是一个示例,展示了 RDD 如何成为不同处理步骤的源和输出:

Apache Spark 允许进行复杂的数据工程,并自带一套超过 80 个高级操作符。除了更长的处理时间外,还可在 shell 中交互式查询数据。除了 Map 和 Reduce 操作外,它还支持 SQL 查询、流数据、机器学习(ML)和图数据处理。
开发者可以使用这些功能独立使用,或者将它们组合起来在单个数据管道用例中运行。
Spark 驱动一系列库,包括 SQL 和 DataFrame(spark.apache.org/sql/)、MLlib(spark.apache.org/mllib/)用于机器学习、GraphX(spark.apache.org/graphx/)和 Spark Streaming(spark.apache.org/streaming/)。您可以在同一应用程序中无缝组合这些库。
在本章中,我们将重点关注机器学习练习中的 RDD。我们将专注于使用 Jupyter Notebooks 进行动手练习。Jupyter Notebooks 可在数据科学虚拟机上使用,并且默认作为服务安装在 Azure HDInsight 部署的 Spark 上。
HDInsight 和 Spark
Apache Spark 是一个开源的并行处理框架,支持内存处理以提升大数据分析应用的性能。HDInsight 上的 Apache Spark 集群与 Azure 存储(WASB)以及 Azure 数据湖存储兼容。
当开发者在 HDInsight 上创建 Spark 集群时,Azure 计算资源已经创建,并安装了 Spark,并进行了配置。在 HDInsight 中创建 Spark 集群只需大约 10 分钟。要处理的数据存储在 Azure 存储或 Azure 数据湖存储中。
Apache Spark 提供了内存集群计算的原始功能,这意味着它是 HDInsight 的完美伴侣。Apache Spark 作业可以加载和缓存数据 ...
Apache Spark 中的 YARN 操作系统
YARN 是 Apache 软件基金会开源分布式处理框架 Hadoop 第二代 2.0 版本中的关键特性之一,它在 Hadoop 版本 3 中得到保留并进一步发展。YARN 在 Azure HDInsight 上实现,以促进大数据应用和预测分析的大规模分布式操作系统。
YARN 的效率在于它将 MapReduce 的资源管理和调度能力与数据处理组件解耦。由于 Apache Spark 使用这种方法,它使 Hadoop 能够支持更多样化的处理方法和更广泛的应用程序。
我们如何使用 Spark 进行预测分析?机器学习(ML)侧重于获取数据并应用一个过程到这些数据上,以产生预测输出。我们可以创建和使用许多不同类型的 ML 算法与 Spark 一起。最常见的方法之一是监督式 ML,它通过接收一些数据来实现,这些数据由我们称为特征的向量和一个标签组成。我们这是什么意思?
向量是一组我们用来进行预测的信息。标签是用于预测的特征。
我们将举一个例子。假设我们有一组关于人们的信息,我们想要预测这个群体的一些情况:他们是否有可能无家可归。这些人的特征可能包括他们的年龄、教育水平、收入、军事服务等等。这些人的特征被称为特征,而我们想要预测的东西被称为 标签。
在这种情况下,数据科学家会取一些已知他们已经无家可归的数据,因此标签值在那个时刻对研究人员来说是已知的。
使用 Spark,我们会对数据进行处理,并将数据拟合到模型中,以查看其成功程度。模型会告诉我们,为了看到这些个人发生无家可归的可能性,我们需要在特征中看到什么。
模型本质上是一个函数,它指定了我们期望在向量特征中看到什么,以看到结果或预测。
下一步是取之前未见过的、不包含已知标签的新数据,以查看其与模型拟合的情况。这个数据集只包含特征,因为实际的标签或结果并不为人所知。在这个监督学习示例中,使用已知标签的数据来训练模型预测具有已知标签的数据,然后模型面对的是没有已知标签的数据。
在无监督学习中,标签是未知的。无监督学习采取类似的方法,数据科学家将摄取数据并输入它,这仅仅包含特征的向量,没有标签存在。使用这种类型的数据科学方法,我可能只是在查看向量特征中发现的相似性,以查看数据中是否存在任何聚类或共性。
在 Spark 环境中处理数据
当数据科学家在 Apache Spark 环境中处理数据时,他们通常使用 RDD 或 DataFrame。在我们之前的例子中,数据可能以 RDD 格式存储,并通过构建一个预测性输入到模型中来输入到模型中。
在这些练习中,Spark 库被称作 spark.mllib。MLlib 库是 Spark 最初附带的原生 ML 库。较新的库被称作 Spark ML。
使用 Jupyter Notebooks
Jupyter Notebook 是一个极其强大的工具,用于协作开发和生产数据科学项目。它将代码、注释和代码输出整合到一个单一文档中,该文档结合了代码、数据可视化、叙述性文本、数学方程式和其他数据科学元素。由于它们鼓励数据科学团队进行迭代和快速开发,笔记本在当今的数据科学工作流程中越来越受欢迎。Jupyter 项目是早期 IPython Notebook 的继承者。在 Jupyter Notebook 中,可以使用许多不同的编程语言,但本章将专注于 Apache Spark。
Jupyter 是免费的、开源的、基于浏览器的。它可以用来创建笔记本,以正常方式处理代码,例如编写和注释代码。Jupyter Notebook 的一个关键特性是它们非常适合与其他团队成员协作,从而提高生产力。Jupyter Notebook 支持多种不同的引擎,也称为内核。Jupyter Notebook 可以用来在 Python 或 Scala 上运行代码。
在本教程中,将使用 Spark ML 教程来介绍 Spark 和 ML 的概念。
配置数据科学虚拟机
如果你使用的是 Ubuntu Linux DSVM 版本,需要执行一次设置步骤以启用本地单节点 Hadoop HDFS 和 YARN 实例。默认情况下,Hadoop 服务已安装但未启用。为了启用它,第一次需要以 root 用户运行以下命令:
echo -e 'y\n' | ssh-keygen -t rsa -P '' -f ~hadoop/.ssh/id_rsacat ~hadoop/.ssh/id_rsa.pub >> ~hadoop/.ssh/authorized_keyschmod 0600 ~hadoop/.ssh/authorized_keyschown hadoop:hadoop ~hadoop/.ssh/id_rsachown hadoop:hadoop ~hadoop/.ssh/id_rsa.pubchown hadoop:hadoop ~hadoop/.ssh/authorized_keyssystemctl start hadoop-namenode hadoop-datanode hadoop-yarn
你可以停止与 Hadoop 相关的 ...
在 Jupyter 中运行 Spark MLib 命令
默认的 Jupyter lab 将展示 Spark MLlib 工具包在 ML 问题上的功能和能力。本教程使用一个示例数据集,该数据集包含来自纽约市出租车真实行程的数据。这些数据包含纽约市出租车行程和费用数据集,以展示 MLlib 在二进制分类和回归问题上的建模功能。
在本实验中,将使用许多不同的 Spark MLib 函数,包括数据摄取、数据探索、数据准备(特征化和转换)、建模、预测、模型持久化和在独立验证数据集上的模型评估。还将使用数据可视化来展示结果。
本实验将重点关注两种学习类型:分类提供了尝试监督学习和无监督学习的机会。第一个示例将使用二进制分类来预测是否会被给小费。在第二个示例中,将使用回归来预测小费的金额。
在 Jupyter 中,代码在单元格中执行。单元格结构是一种简单的方式,使数据科学家能够查询 RDD 数据框,并在 Jupyter Notebook 中交互式地显示信息,包括数据可视化。使用 Spark 进行 ML 的工作方式非常灵活、直观且强大。
数据摄取
第一项活动是设置适当的目录路径。
- 设置训练数据的位置:
 
taxi_train_file_loc = "../Data/JoinedTaxiTripFare.Point1Pct.Train.csv"taxi_valid_file_loc = "../Data/JoinedTaxiTripFare.Point1Pct.Valid.csv"
- 设置模型存储目录路径。这是模型将被保存的位置:
 
modelDir = "../Outputs/"; # The last backslash is needed;
- 
在 Jupyter 菜单中,将光标放在单元格中,然后从菜单中选择“运行”选项。这将把训练集和测试集分配给
taxi_train_file_loc和taxi_valid_file_loc变量。 - 
接下来,数据将被设置到一个新的数据框中,并进行清理。数据摄入是通过
spark.read.csv函数完成的,该函数将数据分配到一个新的... 
数据探索
在下一步中,探索数据非常重要。在 Jupyter 界面中通过绘制目标变量和特征很容易可视化数据。数据使用 SQL 进行总结。然后,使用matplotlib绘制数据。为了绘制数据,数据框首先需要转换为 pandas 数据框。此时,matplotlib 可以使用它来生成图表。
由于 Spark 旨在处理大型大数据集,如果 Spark 数据框很大,可以使用数据样本进行数据可视化。
在以下示例中,在将数据转换为数据框格式之前,对 50%的数据进行了采样,然后将其合并到一个 pandas 数据框中。
代码如下所示:
%%sql -q -o sqlResults
SELECT fare_amount, passenger_count, tip_amount, tipped FROM taxi_train
sqlResultsPD = spark.sql(sqlStatement).sample(False, 0.5, seed=1234).toPandas();
%matplotlib inline
# This query will show the tip by payment
ax1 = sqlResultsPD[['tip_amount']].plot(kind='hist', bins=25, facecolor='lightblue')
ax1.set_title('Tip amount distribution')
ax1.set_xlabel('Tip Amount ($)'); ax1.set_ylabel('Counts');
plt.figure(figsize=(4,4)); plt.suptitle(''); plt.show()
# TIP AMOUNT BY FARE AMOUNT, POINTS ARE SCALED BY PASSENGER COUNT
ax = sqlResultsPD.plot(kind='scatter', x= 'fare_amount', y = 'tip_amount', c='blue', alpha = 0.10, s=2.5*(sqlResultsPD.passenger_count))
ax.set_title('Tip amount by Fare amount')
ax.set_xlabel('Fare Amount ($)'); ax.set_ylabel('Tip Amount ($)');
plt.axis([-2, 80, -2, 20])
plt.figure(figsize=(4,4)); plt.suptitle(''); plt.show()
这将生成结果的直方图。
车费金额和小费金额之间的关系在以下图表中显示:

Spark 中的特征工程
在特征工程中,我们可以处理许多数据工程任务,例如创建新特征和分组、转换和清理数据。数据可以进一步进行索引,并通过额外的分类、分组和分类特征的编码来丰富。
在以下示例代码中,我们使用 Spark SQL 将小时分组到交通时间桶中创建一个新特征:
sqlStatement = """ SELECT *, CASEWHEN (pickup_hour <= 6 OR pickup_hour >= 20) THEN "Night"WHEN (pickup_hour >= 7 AND pickup_hour <= 10) THEN "AMRush"WHEN (pickup_hour >= 11 AND pickup_hour <= 15) THEN "Afternoon"WHEN (pickup_hour >= 16 AND pickup_hour <= 19) THEN "PMRush"END as TrafficTimeBinsFROM taxi_train
使用 Spark 进行预测
在本章的这一部分,练习是使用 Spark 示例代码创建逻辑回归模型,保存模型,并在测试数据集上评估模型的性能。在建模时,使用RFormula函数指定特征和类标签。在这个例子中,我们将使用管道公式和逻辑回归估计器来训练模型。这可以从以下代码片段中看出:
logReg = LogisticRegression(maxIter=10, regParam=0.3, elasticNetParam=0.8)
下面的代码块设置训练公式并将其分配给classFormula变量,这可以从以下代码中看出:
classFormula = RFormula(formula="tipped ~ pickup_hour + weekday + passenger_count + trip_time_in_secs + trip_distance + fare_amount + vendorVec + rateVec + paymentVec + TrafficTimeBinsVec")
下面的代码块训练了管道模型:
model = Pipeline(stages=[classFormula, logReg]).fit(trainData)
下面的代码块保存了我们创建的模型:
datestamp = str(datetime.datetime.now()).replace(' ','').replace(':','_');
fileName = "logisticRegModel_" + datestamp;
logRegDirfilename = modelDir + fileName;
model.save(logRegDirfilename)
下面的代码块使用模型对测试数据进行预测,并使用以下代码块帮助评估模型:
predictions = model.transform(testData)
predictionAndLabels = predictions.select("label","prediction").rdd
metrics = BinaryClassificationMetrics(predictionAndLabels)
print("Area under ROC = %s" % metrics.areaUnderROC)
接下来,我们绘制 ROC 曲线:
%matplotlib inline
predictions_pddf = predictions.toPandas()
labels = predictions_pddf["label"]
prob = []
for dv in predictions_pddf["probability"]:
prob.append(dv.values[1])
fpr, tpr, thresholds = roc_curve(labels, prob, pos_label=1);
roc_auc = auc(fpr, tpr)
plt.figure(figsize=(5,5))
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0]); plt.ylim([0.0, 1.05]);
plt.xlabel('False Positive Rate'); plt.ylabel('True Positive Rate');
plt.title('ROC Curve'); plt.legend(loc="lower right");
plt.show()
下一个示例显示了回归输出:

ROC 曲线是蓝色曲线,位于图表的左上角非常高的位置。ROC 结果表明模型表现极好。作为一个启发式方法,蓝色线越接近图表左上角顶部,结果就越好。
在本节中,将使用随机森林模型回归方法来预测将给出多少小费。在标准分类树中,数据基于数据的同质性进行分割。决策树从根节点自上而下构建。这个过程涉及将数据分割成包含同质实例的子集。
在回归树中,目标变量是一个实数值。在这种情况下,数据使用每个独立变量拟合到目标变量。对于每个独立变量,数据在几个分割点处被分割。我们在预测值和实际值之间的每个分割边界计算均方误差(SSE)。导致最低 SSE 的变量被选为节点。然后,这个过程递归地继续,直到所有数据都被覆盖。
代码如下:
## DEFINE REGRESSION FORMULA
regFormula = RFormula(formula="tip_amount ~ paymentIndex + vendorIndex + rateIndex + TrafficTimeBinsIndex + pickup_hour + weekday + passenger_count + trip_time_in_secs + trip_distance + fare_amount")
然后,我们定义分类变量的索引器:
## DEFINE INDEXER FOR CATEGORIAL VARIABLES
featureIndexer = VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=32)
然后,我们设置了随机森林估计器。其值设置为randForest变量:
## DEFINE RANDOM FOREST ESTIMATOR
randForest = RandomForestRegressor(featuresCol = 'indexedFeatures', labelCol = 'label', numTrees=20,
featureSubsetStrategy="auto",impurity='variance', maxDepth=6, maxBins=100)
下一步是使用定义的公式和相关转换来拟合模型:
## Fit model, with formula and other transformations
model = Pipeline(stages=[regFormula, featureIndexer, randForest]).fit(trainData)
下一个关键步骤是保存模型:
## SAVE MODEL
datestamp = str(datetime.datetime.now()).replace(' ','').replace(':','_');
fileName = "RandomForestRegressionModel_" + datestamp;
andForestDirfilename = modelDir + fileName;
model.save(randForestDirfilename)
然后,我们需要使用模型对测试数据进行预测,以便我们可以评估其成功:
predictions = model.transform(testData)
predictionAndLabels = predictions.select("label","prediction").rdd
testMetrics = RegressionMetrics(predictionAndLabels)
print("RMSE = %s" % testMetrics.rootMeanSquaredError)
print("R-sqr = %s" % testMetrics.r2)
数据可视化没有替代品。在下一个代码块中,数据使用散点图格式进行可视化。代码块后的结果是:
## PLOC ACTUALS VS. PREDICTIONS
predictionsPD = predictions.select("label","prediction").toPandas()ax = predictionsPD.plot(kind='scatter', figsize = (5,5), x='label', y='prediction', color='blue', alpha = 0.15, label='Actual vs. predicted');
fit = np.polyfit(predictionsPD['label'], predictionsPD['prediction'], deg=1)
ax.set_title('Actual vs. Predicted Tip Amounts ($)')
ax.set_xlabel("Actual"); ax.set_ylabel("Predicted");
ax.plot(predictionsPD['label'], fit[0] * predictionsPD['label'] + fit[1], color='magenta')
plt.axis([-1, 15, -1, 15])
plt.show(ax)
生成的图表可以在下面找到:

均方根误差(RMSE)值越低,绝对拟合越好。RMSE 是残差方差的平方根。它指定了模型对数据的绝对拟合。换句话说,它表示观察到的实际数据点与模型预测值有多接近。作为方差的平方根,RMSE 可以被视为未解释方差的均方差。RMSE 具有有用的属性,即它与响应变量具有相同的单位,因此它直观地有意义。较低的 RMSE 值表示更好的拟合。RMSE 是衡量模型预测响应准确性的良好指标。在本例中,RMSE 是拟合最重要的标准,因为模型的主要目的是预测。
R-sqr是直观的。其值范围从零到一,零表示所提出的模型没有比平均模型改善预测,一表示完美预测。回归模型的改进导致 R-sqr 成比例增加。
而 R-sqr 是拟合的相对度量,RMSE 是拟合的绝对度量,这就是为什么它在这里被展示。
加载管道模型并评估测试数据
在本例中,我们将加载一个管道模型,然后评估测试数据:
savedModel = PipelineModel.load(logRegDirfilename)predictions = savedModel.transform(testData)predictionAndLabels = predictions.select("label","prediction").rddmetrics = BinaryClassificationMetrics(predictionAndLabels)print("Area under ROC = %s" % metrics.areaUnderROC)
在下一步中,我们定义随机森林模型:
randForest = RandomForestRegressor(featuresCol = 'indexedFeatures', labelCol = 'label',featureSubsetStrategy="auto",impurity='variance', maxBins=100)
现在,我们将定义一个包含公式、特征转换和估计器的建模管道:
pipeline = Pipeline(stages=[regFormula, ...
使用 Spark 配置 HDInsight 集群
配置 HDInsight Spark 集群以开始工作至关重要。
配置 HDInsight 集群
如果您已经有一个正在运行的 Spark HDInsight 集群,您可以跳过此步骤。
- 
在网页浏览器中,导航到
portal.azure.com并,如果需要,使用与您的 Azure 订阅关联的 Microsoft 账户登录。 - 
在微软 Azure 门户中,在中心菜单中点击新建。然后,在数据 + 分析部分,选择 HDInsight 并创建一个新的 HDInsight 集群,设置如下:
- 
集群名称:输入一个唯一的名称(并记下它!)
 - 
订阅:选择您的 Azure 订阅
 - 
集群类型:Spark
 - 
集群操作系统:Linux
 - 
HDInsight 版本:选择 Spark 的最新版本
 - 
集群等级:标准
 - 
集群登录用户名:输入您选择的用户名(并 ...
 
 - 
 
摘要
在本章中,您被介绍到了微软 Azure 中的一些最新大数据分析技术。本章主要关注两种主要技术:带有 Spark 的 Azure HDInsight 和 Azure Databricks。
在本章中,我们探讨了不同的数据建模方式,并提供了有用的技巧来帮助您理解模型的实际含义。通常,这并不是数据科学过程的终点,因为随着您获得新的见解,这可能会提出新的问题。因此,这是一个过程而不是一场竞赛——这正是它的有趣之处!
进一步参考
- 
在
spark.apache.org/docs/latest/ml-guide.html查阅 Spark 机器学习编程指南 - 
包括 Spark 集群在内的 Microsoft Azure HDInsight 文档在
azure.microsoft.com/en-us/documentation/services/hdinsight - 
Scala 编程的文档和入门指南在
www.scala-lang.org/documentation/ - 
Python 编程的文档和入门指南在
www.python.org/doc/ - 
您可以在
spark.apache.org/docs/latest/sql-programming-guide.html查看 Spark SQL 和 DataFrame 编程指南 - 
分类和回归:
spark.apache.org/docs/latest/ml-classification-regression.html 
第十章:构建深度学习解决方案
深度学习是机器学习的一个超集,它结合了受人类大脑设计和功能影响的算法,称为人工智能神经网络。它以监督、半监督和无监督算法的形式表示,其中架构深刻地集中在深度神经网络、深度信念网络和循环神经网络上。如今,深度学习在工业界以及计算机视觉、语音识别、音频合成、图像识别、自然语言处理、社交媒体内容审核等领域的研究与开发(R&D)部门得到了广泛接受和应用。
在本章中,我们将学习以下主题:
- 
Microsoft CNTK 和 MMLSpark 框架的概述,以及第三方深度学习工具
 - 
TensorFlow 和 Keras,以及部署在 Azure 计算上的步骤
 
什么是深度学习?
深度学习是传统机器学习算法的一个子类,它利用一系列非线性处理层进行特征提取、转换,并在前一层输入的连续输出层上进行最终分析。
深度学习神经网络的第一层由输入层、输出层(最外层层)和隐藏层组成,隐藏层位于输入层和输出层之间,是一个复杂的层:

传统机器学习和深度学习之间的差异
传统机器学习和深度学习的比较如下:
| 传统机器学习 | 深度学习 | 
|---|---|
| 传统机器学习需要手动提取/工程化数据特征。 | 深度学习自动从数据特征中学习。 | 
| 对于非结构化数据,特征提取很困难。 | 深度学习更新每一层的网络权重和偏置。 | 
常见的深度学习神经网络(DNNs)
在数据科学平台上,有各种各样的深度学习神经网络可用于解决深度学习问题。以下是一些例子:
- 
深度卷积神经网络(DCNN):用于提取图像表示
 - 
循环神经网络(RNN):用于提取序列数据表示
 - 
深度信念神经网络(DBN):用于提取层次数据集表示
 - 
深度强化学习(DRL):预测代理行为以最大化未来的累积奖励
 
在各种深度学习框架和工具上工作的传统方式带来了许多挑战,因为它包含了许多依赖关系...
Azure Notebook 服务的概述
Azure 笔记本服务是一项托管服务,基本上通过使用 R、Python 和 F#的计算能力,为 Jupyter Notebooks 提供便捷的访问。用户可以利用其众多的可视化库,并以公开或私密的方式通过可分享的链接共享笔记本。
微软的认知工具包(CNTK)对 Azure 笔记本服务有原生支持,因此基于 Python 的 Jupyter Notebooks 可以使用 CNTK 框架执行。对于在 TensorFlow、Keras 或 Theano 等其他深度学习框架中执行,用户需要通过 Miniconda 或 Pip/wheel 安装相应的框架组件。
Azure 笔记本服务可在notebooks.azure.com/获取,并利用免费、基于云的、基于 Web 的 Jupyter Notebook 环境的功能,包括使用 Python 2、Python 3、R 和 F#等数据科学语言创建库和众多交互式图形的设施。您可以创建自己的库并构建交互式笔记本,也可以简单地上传现有的 Jupyter Notebooks:

微软 CNTK 笔记本在 Azure 笔记本中内置了支持。Azure 笔记本中的所有笔记本都可以组织成称为库的单独组,这些库是可分享的但不可编辑的。笔记本也可以从其他存储库克隆。
可以通过数据菜单轻松上传数据到 Azure 笔记本,并使用函数单元格将其加载到内存中。它也可以被下载,如下面的截图所示:

Azure 笔记本服务提供了使用 matplotlib、scikit-learn、scipy、numpy、pandas 等库实现交互式 IPython 笔记本的能力。在以下演示中,实现了关于世界人口增长率分析的交互式 IPython 笔记本:

首先,通过将原始数据导入 DataFrame 来执行数据探索:
import pandas as pd
 df_population_density = pd.read_csv('/home/nbuser/library/World_Population_Growth.csv')
 df_population_density.head(10)
然后,我们实现筛选以构建一个更简洁的数据透视表:
filtered_cells_df = df_population_density[['Location','Time','Births','Deaths','GrowthRate']].dropna(how="any")
 filtered_cells_df
以下代码片段的输出如下:

使用 Azure 笔记本构建数据透视表
可以使用如pivot_table()这样的函数来填充数据透视表:
df_population_pivot = filtered_cells_df.pivot_table('GrowthRate','Location','Time') df_population_pivot.head(100)
最后,我们可以使用如matplotlib、seaborn、pandas、folium等可视化库构建基于 Python 的交互式可视化:
import numpy as np import matplotlib.pyplot as plot plot.figure(figsize=(15,10),dpi = 80) plot.plot(df_population_pivot.ix[:,0:1], label="Net Growth rate, both sexes males and females") plot.plot(df_population_pivot.ix[:,1:2], label="Net migration rate (per 1000 population distribution)") plot.plot(df_population_pivot.ix[:,2:3],label="Population growth rate (%)") plot.xlabel('Location') ...
Azure 深度学习虚拟机工具包概述
深度学习虚拟机(DLVM)是传统 Azure 数据科学 VM 的超集变体,它由预配置的环境组成,主要用于在 GPU 实例(例如,Azure GPU NC 系列 VM)上开发和部署深度学习模型,并在两个操作系统上提供——Windows Server 2016 和 Ubuntu Linux 版本。
Azure 上的 DSVM 包含了预构建的多个 AI 工具,包括 CNTK、Keras、Caffe2 和 Chainer,用于预处理和提取视觉数据、文本、音频或视频数据。您可以使用 Microsoft R 服务器、Anaconda Python、Jupyter Notebooks for Python/2.x、R、SQL Server 2017、Azure ML 工作台、Julia、F# SDK 等工具进行数据科学建模和使用实现操作。
您可以从 Azure 门户的市场中配置 Deep Learning VM 作为 Azure 资源管理器 (ARM),并提供各种详细信息,如操作系统类型、用户凭据以及加速在深度学习机器上的 GPU 实例大小:

在市场中的 Azure DLVM 的更多详细信息可以在以下链接中找到:azuremarketplace.microsoft.com/en-us/marketplace/apps/microsoft-ads.dsvm-deep-learning。
开源深度学习框架
以下表格显示了在企业环境中使用的各种开源深度学习框架的详细信息:
| 软件 | 创新者 | 平台 | 软件许可 | 开源? | CUDA (GPU) 支持 | 平台接口 | 
|---|---|---|---|---|---|---|
| CNTK | 微软研究院 | Windows 和 Linux | MIT | 是 | 是 | Python、C++、C# 和 CLI 支持 | 
| TensorFlow | Google Brain | Linux, macOS, 和 Windows | Apache 2.0 | 是 | 是 | Python(NumPy) 和 C/C++ | 
| Theano | 蒙特利尔大学 | 跨平台 | Apache 2.0 | BSD 许可证 | 是 | Python | 
| Caffe | 伯克利人工智能 | Linux、macOS 和 Windows | BSD 许可证 | 是 | 是 | Python 和 Matlab | 
| Apache MXNet | 分布式机器学习社区 | Ubuntu、macOS、Windows、AWS、Android 和 iOS | Apache 2.0 | 是 | 是 | C++、Python、Matlab 等 | 
深入分析微软深度学习工具
微软推出了广泛的新的深度学习工具包,可以利用认知工具包 CNTK 加速文本分析、语音/语音识别和图像分类等领域的进步,CNTK 可在本地或 Azure GPU 实例上运行。Azure 认知工具包支持绑定到 BrainScript 和 Python(截至编写时为版本 2.7、3.5 和 3.6),C++ 和 .NET 管理的 C# 平台。
以下是在深度学习中 CNTK 2.0 的功能:
- 
CNTK 函数的扩展功能,用于在多种语言(如 Python、C# 和 C++)中提取、特征工程和评分优化器机器学习算法。
 - 
在 CNTK 中集成 TensorFlow 模型进行可视化。
 - 
提供了几个预训练模型作为示例。
 - 
通过在 GPU 实例(例如,Nvidia Tesla CUDA 和 cuDNN)上使用 FAST R-CNN 算法支持图像识别。
 - 
提供了 Python 和 BrainScript 的性能分析器。
 - 
在 Azure 上通过运行 kubernetes 集群来实现深度学习项目的自动扩展可行性。Kubernetes 上的自动扩展功能提供了 Pod 级别的扩展(开箱即用)以及节点级别的扩展。水平 Pod 扩展(HPA)是运行 CNTK 模型在 AKS 上的一个主要功能,因为它根据您的需求自动扩展集群中的 Pod 数量,并注意指定多个节点指标,如 CPU 利用率百分比和内存可用性百分比,基于扩展或缩减。
 - 
支持 VS 工具包的 AI,为大多数(如果不是所有)深度学习库提供了易于本地安装的功能(例如,Tensorflow、MXNet、Keras、Caffe2、Theano、Torch、Pytorch、Chainer(具有 GPU cuda 支持作为 cuPy)、XG-Boost、Scikit-learn、LIBSVM、开放神经网络交换(ONNX)、Core ML 社区工具(coremltools)、微软 ML 工具、tf2onnx、Netron 等)。
 
更多关于 Visual Studio 的 AI 工具及其支持的 ML/DL 库的详细信息,可以在以下 GitHub 链接中找到:github.com/Microsoft/vs-tools-for-ai/blob/master/docs/。
微软 CNTK 概述
微软 CNTK 是一个商业级开源工具包,用于深度学习,并将神经网络结构指定为一系列计算有向图。它由微软语音研究人员(董宇等人)于 2012 年推出,2015 年开源,并在 Codeplex 上发布。从 2016 年起,CNTK 的源代码库在 GitHub 上以权限许可的形式可用。CNTK 提供了易用性、快速性和将简单构建块组合成复杂网络的灵活性。这个深度学习工具包 100%适用于生产环境,并提供了最先进的准确性,使其能够高效且可扩展到任何 CPU/GPU 处理平台。它集成了流行的前馈训练模型...
CNTK 的架构构建块
CNTK 作为第一个深度学习工具包支持开放神经网络交换(ONNX)格式,它为框架互操作性和优化提供了一个共享的开源模型表示。ONNX 还扩展了对在 CNTK、Caffe2、Apache MXNet 和 PyTorch 等框架之间移动训练模型的支持。
CNTK 的顶级命令块,即 CNTK 配置文件,定义了要执行的操作以及相关信息的执行。配置参数分类了要实现哪些命令块,以及如果定义了多个命令块,它们的顺序。
从架构角度来看,CNTK 配置参数命令块包括以下内容:
- 
输入读取器块:指定从语料库加载现有模型来构建网络的基本概念
 - 
网络层:定义要使用的特定训练算法
 - 
学习器层:指定在哪里和如何加载训练模块和标签:
 

CNTK 最广泛使用的配置块如下:
- 
网络层构建块:
- 
简单网络构建器:执行具有约束定制的网络模型之一
 - 
BrainScript 网络构建器:基于 CNTK 网络描述语言(BrainScript)实现网络,这为网络设计和神经网络配置提供了好处
 
 - 
 - 
学习者:
- SGD 模型:主要应用随机梯度下降算法对模型进行训练。
 
 - 
输入读取器:
- 
CNTK 文本格式读取器:读取合并了多个相同格式输入文本文件的输入文本文件。
 - 
LM 序列读取器:读取包含单词序列的输入文本文件,用于预测单词序列。
 - 
LU 序列读取器:接受基于文本的文件作为单词序列,以及其关联的标签。这主要用于构建语言理解 API。
 - 
HTKMLF 读取器:读取用于语音识别和语音合成应用的 HTK/MLF 格式的输入文件。
 
 - 
 
CNTK 概念
CNTK 的输入、输出和参数以张量的形式组织,其中秩对每个张量进行分类。秩为 0 的张量关联为标量,秩为1的张量指定为向量,秩为2的张量定义为矩阵。每个 CNTK 都有一些静态和动态轴可用。静态轴在整个网络生命周期中长度相同。动态网络的静态轴定义为有意义的张量分组,其中 a)它们的轴长度可以不同实例而异,b)它们的轴长度在表示每个小批量之前通常是未知的,c)动态轴是有序的。小批量被称为张量,如果...
在 Azure 深度学习虚拟机中开发和部署 CNTK 层以实现神经网络
微软 CNTK 灵活易用,主要应用简单的构建块快速构建复杂层。CNTK 的主要用途之一是它可以作为 Keras 框架的后端。从一些基准测试结果中,我们可以看到 CNTK 通常比谷歌的 TensorFlow 快,并且比循环/LSTM 网络快 5-10 倍。
要开始构建 Azure 深度学习 GPU 实例的 CNTK 构建块,我们需要从支持 GPU 实例的 Azure 门户中配置 DLVM。您可以通过选择“创建资源”|“新建”,然后在搜索栏中键入深度学习虚拟机来从 Azure 市场配置 DLVM,如下面的截图所示:

接下来,通过提供适当的虚拟机详细信息,例如操作系统类型(Windows/Linux)、用户凭据和资源组,您可以选择所需的 GPU 实例大小,例如 NV6 或 NV12,或者如果您的 Azure 订阅中有足够的配额,那么您可以尝试实例大小,例如 NC6sv3(例如,6 核心 GPU,112 GB RAM,12 个数据盘)和 NC12sv3(例如,12 核心 GPU,224 GB RAM,24 个数据盘,40k 磁盘 IOPS 可用性)。
Azure 深度学习可以通过远程桌面(RDP)模式(端口3389)或 SSH 模式(端口22)访问。
CNTK 输入和变量声明
深度学习框架最显著的特点是其处理输入数据集、声明变量和计算图性能管理的能力。在这个 Azure 深度学习虚拟机上的 CNTK 演示中,将关联三个层,以便它们可以识别手写数字的 MNIST 数据集。
CNTK 变量部分
在 MNIST 数据集分类问题中,存在一个平铺的 28 x 28 像素值缩放输入及其相关的十个标签用于分类。在 CNTK 中,可以声明变量来捕获数据,如下所示:
import cntk as Cognitive
 from cntk.train import Trainer
 from cntk.io import MinibatchSource, CTFDeserializer, StreamDef, StreamDefs
 from cntk.learners import adadelta, learning_rate_schedule, UnitType
 from cntk.ops import RELU, element_times, constant
 from cntk.layers import Dense, Sequential, For, default_options
 from cntk.losses import cross_entropy_with_softmax
 from cntk.metrics import classification_error
 from cntk.train.training_session import *
 from cntk.logging import ProgressPrinter
 input_dimension = 784
 number_output_classes = 10
 number_hidden_layers = 2
 hidden_layers_dimension=200
 feature_val = Cognitive.input_variable(input_dimension)
 label_val = Cognitive.input_variable(number_output_classes)
这些类型的input_variable函数被声明,就像 TensorFlow 中的占位符变量一样。然而,微软 CNTK 消除了识别样本/批量大小数量的必要性,用户还可以为每个评估样本提供维度。在卷积神经网络任务的情况下,用户可以为平铺的 28 x 28 = 784 像素输入和 10 个输出标签或类别分配input_dimension = (1,28,28)。
CNTK 的数据读取器
微软 CNTK 提供了一些辅助模块,以帮助将训练数据格式化为可接受的格式,并在小批量上下文中将其读入模型。CTFDeserializer()是 CNTK 中的一种函数类型,可以读取特殊 CNTK 格式的输入文本文件(其中数据以每行一个样本的形式出现,使用管道/分隔符)。另一个是StreamDef()函数,它类似于字典对象。
使用CTFDeserializer()函数,以下方式读取 CNTK 文件格式:
from cntk.io import MinibatchSource, CTFDeserializer, StreamDef, StreamDefspath =  "C:\\Users\\CNTK\\Examples\\Image\\DataSets\\MNIST\Train-28x28_cntk_text.txt"reader_train_val = MinibatchSource(CTFDeserializer(path, StreamDefs( ...
CNTK 中的操作
与 TensorFlow 类似,微软 CNTK 允许操作作为计算图中的节点。这些节点和操作为流程提供支持。CNTK 指定从图乘法和除法到 softmax 和卷积操作的操作。需要通过操作运行时的eval()方法显式评估操作代码。尽管大多数这些操作不是显式评估的,但在最终层网络执行期间会隐式评估。
例如,在 MNIST 数据集中,通过简单的 CNTK 操作对输入特征进行缩放。这种缩放是通过使用 1/256 ~ 0.00390625 来实现的:
 # Instantiate the feed forward classification model
 scaled_input = element_times(constant(0.00390625), feature_val)
在这里,声明了一个常量 0.00390,以及使用element_times()操作将其与输入变量 features 相乘的用法。输入数据集被缩放到 0 到 1 之间。
微软 CNTK 的层
微软认知工具包为我们提供了配置神经网络层的能力,这提供了许多层功能,如 Dense、卷积、MaxPooling、递归和 LSTM。例如,在 MNIST 数据集中,标准的神经网络分类器包括一些密集连接的层,如输入层、第一个隐藏层、第二个隐藏层和最终的输出层:

基本上,输入层由 784 个展平的像素输入层组成,这些层由两个大小为 200 的隐藏层和一个激活了 softmax 的最终输出层组成。层...
CNTK 层配置助手
为了使网络定义更加简洁,CNTK 提供了一些辅助函数/对象类,例如Sequential()模块,它类似于 Keras 中的Sequential( )范式。它还允许你连续堆叠一层又一层的层,而不需要指定输出,然后这个输出作为下一层的输入传递:
from cntk.layers import Dense, Sequential, For, default_options
with default_options(activation=relu, init=Cognitive.glorot_uniform()):
 z = Sequential([For(range(number_hidden_layers),
lambda i: Dense(hidden_layers_dimension)),
 Dense(number_output_classes, activation=None)])(scaled_input)
CNTK 中存在layers.default_options()模块,它可以协助简化,并在更复杂的网络中使用。激活函数在这里不再需要,但使用default_option来为输出层,因为它允许我们在损失函数中应用 softmax。每个层中指定了相同的glorot_uniform()函数的初始化:
 def simple_mnist():
 input_dimension = 784
 number_output_classes = 10
 number_hidden_layers = 2
 hidden_layers_dimension = 200
# Instantiate the feedforward classification model
 scaled_input = element_times(constant(0.00390625), feature_val)
with default_options(activation=relu, init=Cognitive.glorot_uniform()):
 z = Sequential([For(range(number_hidden_layers),
 lambda i: Dense(hidden_layers_dimension)),
 Dense(number_output_classes, activation=None)])(scaled_input)
CNTK 的损失和错误处理模块
CNTK 库提供了一套完整的损失函数和错误处理模块来训练模型。这个范围从标准的交叉熵和平方误差到余弦距离如 lambda ranks。对于分类目的,可以应用cross_entropy_with_softmax选项:
ce = cross_entropy_with_softmax(z, label_val)
在这里,输出层z被提供了一个标记的输出变量值,并且使用 softmax 精度在z上计算交叉熵损失。
接下来,为了访问测试集中的错误,必须使用训练模型。对于分类任务,必须使用classification_error()函数:
pe = classification_error(z, label_val)
CNTK 中的输入训练模型
CNTK 提供了各种进行训练的选项,例如简单地调用一个包含输入和输出训练集的字典:
input_map = {
 feature_val: reader_train_val.streams.features,
 label_val: reader_train_val.streams.labels
 }
在这里使用的MinibatchSource()对象调用reader_train,这是你可以通过点符号访问流/数据的地方。
还需要定义一个ProgressPrinter,这是一个对象,允许你设计输出指标,如损失和分类错误。进度编写器也可以实例化:
# Instantiate progress writers.
 progress_writers_val = [ProgressPrinter(
 tag='Training',
 num_epochs=number_sweeps_to_train_with)]
tag 参数指定了在每次更新中附加到日志中的值的演示。模型训练期间的总周期数由计数器计算,并通过 num_epochs 声明。
实例化训练器对象
为了设置 Trainer 对象,我们需要一个训练模型并将其输入到多个信息层(如输出层和先验层)的模块,先验层用于训练计算图结构。然后,我们需要利用将要用于计算梯度的损失函数,其中可以使用随机下降和 Ada Grad 等优化器:
#Instantiate the trainer object to drive the model training lr = learning_rate_schedule(1, UnitType.sample) trainer = Trainer(z, (ce, pe), [adadelta(z.parameters, lr)], progress_writers_val)  
定义训练会话对象
CNTK 库有一种奇妙的方式来表示 training_session() 对象及其小批量初始化。它关联定义输入数据、记录、num_sweeps_to_train、每扫视的样本数等:
# Training config
 minibatch_size_val = 64
 number_samples_per_sweep = 60000
 number_sweeps_to_train_with = 10
training_session(
 trainer=trainer,
 mb_source=reader_train_val,
 mb_size=minibatch_size_val,
 model_inputs_to_streams=input_map,
 max_samples=number_samples_per_sweep * number_sweeps_to_train_with,
 progress_frequency=number_samples_per_sweep
 ).train()
在这个 training_session() 对象中,所有的优化和参数学习都将发生在源中,并且我们可以从中提取作为 reader_main MinibatchSource 对象使用的小批量数据。
一旦执行训练,输出将显示在进度写入器中,如下截图所示:

CNTK 测试模型
为了测试 CNTK 训练模型,我们需要从 MNIST 数据集获取的路径中加载 Test-28x28_cntk__text.txt。我们需要设置 MinibatchSource 来读取我们的测试数据,并且还需要为测试数据分配输入映射:
# Load test data path = "C:\\Users\\CNTK\\Examples\\Image\\DataSets\\MNIST\\Test-28x28_cntk_text.txt"#Reading of data using MinibatchSourcereader_test_val = MinibatchSource(CTFDeserializer(path, StreamDefs( features=StreamDef(field='features', shape=input_dimension), labels=StreamDef(field='labels', shape=number_output_classes))))#mapping of input dataset using feature & labelinput_map = { feature_val: reader_test_val.streams.features, label_val: reader_test_val.streams.labels }
...
使用 Azure 容器(Docker)部署 CNTK 工具
要在 Docker 容器上运行 CNTK Jupyter Notebooks 并从 Docker 中拉取 CNTK 镜像,请确保您使用基于 Linux 的虚拟机或 Azure Linux 数据科学/深度学习虚拟机。
可以使用以下命令通过使用 Azure DSVM 的 Docker 容器拉取 CNTK 的最新构建版本:
docker pull microsoft/cntk 
docker pull microsoft/cntk:2.6-gpu-python3.6 可以用于特定于 GPU 的 Python 版本。执行 CNTK Jupyter Notebooks 的 GPU 版本需要 Nvidia-docker 驱动程序:

要在 Azure 深度学习虚拟机的 Docker 容器中运行 CNTK Jupyter Notebooks,需要创建并启动 CNTK 容器,并在默认端口 8888:8888 中以分离模式公开 IP 端口:
docker run -d -p 8888:8888 --name cntk-jupyter-notebooks -t microsoft/cntk
然后,以下命令启动并激活了 CNTK for Jupyter Notebooks。您需要在 网络安全组(NSG)配置设置中的入站网络规则中公开端口 8888:
docker exec -it cntk-jupyter-notebooks bash -c "source /cntk/activate-cntk andand jupyter-notebook --no-browser --port=8888 --ip=0.0.0.0 --notebook-dir=/cntk/Tutorials --allow-root"
输出截图看起来如下图像所示:

在 Linux 环境中在 Docker 容器上以 GPU 模式执行 CNTK 的更多详细信息可以在以下链接中找到:docs.microsoft.com/en-us/cognitive-toolkit/CNTK-Docker-Containers。
Keras 作为 Microsoft CNTK 的后端
Keras 是一个用 Python 编写的用于高级神经网络的 API,它抽象了复杂的配置,并使用矩阵代数构建生产级训练模型。Keras 能够在 Microsoft CNTK、Google TensorFlow 或 Theano 之上执行,并且旨在通过一系列或图中的独立、完全可配置的模块实现快速实验:
- 
Keras 支持卷积和循环网络,并在 CPU/GPU 上执行。
 - 
在 CNTK 激活后,可以通过使用
pip简单地安装 Keras。keras.json文件可以用作 CNTK 的后端。 - 
在 Windows 上的
%USERPROFILE%/.keras或 Linux 上的$HOME/.keras更新keras.json: 
{    "epsilon": 1e-07, "image_data_format": ...
Microsoft Machine Learning Library for Apache Spark (MMLSpark)概述
Microsoft Machine Learning Library for Apache Spark (MMLSpark)帮助在大数据集上提供可扩展的机器学习模型,特别是用于构建深度学习问题。MMLSpark 与 SparkML 管道协同工作,包括 Microsoft CNTK 和 OpenCV 库,它们为图像输入数据的入口和加工、图像分类以及使用预训练的深度学习算法进行文本分析提供端到端支持。它们还通过应用特征化来训练和检索分类和回归模型的分数。
MMLSpark 的环境设置
在 Azure 上为深度学习项目设置 MMLSpark 库的以下先决条件是强制性的:
- 
可以使用 Azure ML 工作台使用
MMLSpark库 - 
MMLSpark也可以集成到 Azure HDInsight Spark 集群中 - 
Databricks Cloud 的使用
 - 
Azure GPU VM 的使用
 - 
Spark/pyspark/Scala(SBT)包的使用
 - 
Docker 容器的使用
 
使用 Docker 容器执行 MMLSpark 笔记本
为了通过 Docker 容器执行MMLSpark Jupyter Notebooks,你可以在 PowerShell 提示符中运行以下命令:
docker run -d --name my-mmlsparkbook -p 8888:8888 -e ACCEPT_EULA=yes microsoft/MMLSpark
在 Docker 容器上运行的 MMLSpark Jupyter Notebooks 的执行输出如下截图所示:

在这里,笔记本被标记为mmlsparkbook,默认接受 EULA 协议。接下来,需要启动和激活mmlsparkbook的 Docker 容器,这将打开以下 URL 的 MMLSpark 笔记本:http://localhost:8888:

Azure HDInsight Spark 集群设置用于 MMLSpark
可以通过使用现有的 Spark 集群并应用--packages选项来安装 MMLSpark 库,如下所示:
- 
spark-shell --packages Azure:MMLSpark:0.13 - 
pyspark --packages Azure:MMLSpark:0.13 - 
spark-submit --packages Azure:MMLSpark:0.13 MyMMLSparkApp.jar 
类似地,它也可以应用于 Spark 上下文,这可以通过在.aztk/spark-default.conf文件中使用 MMLSpark 来完成。
更多关于 MMLSpark 库的详细信息可以在以下 GitHub 链接中找到:github.com/Azure/MMLSpark。
Azure 上 TensorFlow 概述
TensorFlow 是由 Google 引入的开源深度学习库,用于解决一系列任务。TensorFlow 的引入是为了满足构建和训练复杂神经网络的需求,以便检测和解析模式、识别和相关性,类似于人脑的学习过程。Google 引入了 TPU(Tensor Processing Unit)云平台,用于运行 TensorFlow Python API 并利用 TensorFlow 图单元。
为了在 Azure 上开始使用 TensorFlow,两个最简单的方法如下:
- 
使用数据科学虚拟机(Deep Learning VM)的深度学习工具包:提供能够在 GPU-NC、N 系列或 FPGA 基础设施上运行的 Windows GPU 版本的 mxnet、CNTK、TensorFlow 和 Keras。
 - 
使用 Azure 数据科学虚拟机:默认安装了对 CNTK、TensorFlow、MXNet、Caffe、Caffe2、DIGITS、H2O、Keras、Theano 和 PyTorch 的支持,并且已经配置好,可以与 NVidia CUDA 和 cuDNN 一起使用。Jupyter Notebooks 和带有 AI 的 VS 工具也已预先配置。
 
TensorFlow 上的简单计算图
TensorFlow 库基于计算图,如a = d * e、d = b + c 和 e = c+ 2,因此这个公式可以写成a = (b+c) * (c+2),如下面的图所示:

前面的图计算可以通过执行(d = b + c 和 e = c + 2)以及将计算在 CPU 和 GPU 上分割来并行化。对于复杂的深度学习问题,特别是在卷积神经网络(CNNs)和循环神经网络(RNNs)架构中,这是必不可少的。TensorFlow 背后的概念是能够在代码中提供这些计算图的能力,并允许 ...
TensorFlow 操作
TensorFlow 支持一系列操作,以便可以初始化图的结构:
#Declare few TensorFlow operations
 d = tensorf.add(b, c, name='d')
 e = tensorf.add(c, 2, nname='e')
 a = tensorf.multiply(d, e, nname='a')
#setup the initialization of variables
 init_operation = ttensorf.global_variable_initializer()
为了在变量之间运行操作,我们需要启动一个 TensorFlow 会话,例如tensorf.Session。TensorFlow 会话是一个对象,所有这些操作都可以在其中运行。在 TensorFlow 会话的run函数中,操作初始化需要初始化的变量。接下来是一个操作。这需要运行,可以使用tfsess.run(a)命令执行。我们可以将输出分配给a_graphout,以便可以打印:
#Start the Tensorflow Session
 with tensorf.Session() as tfsess:
 #initialize the variables
 tfsess.run(init_operation)
 #computation of the output from the graph
 a_graphOut = tfsess.run(a)
 print("Variable a is the value of {}".format(a_graphOut))
TensorFlow 占位符的声明
TensorFlow 通过使用如下占位符变量声明来分配数据的基本结构:
def run_simple_tensorGraph_multiple(): #first lets create a constant for TensorFlow constant = tensorf.constant(2.0, name="constant")
#Next create those TensorFlow variables b = tensorf.placeholder(tensorf.float32,[None, 1], NameError='b') c = tensorf.Variable(1.0, name='c')
使用 TensorFlow 构建神经网络
TensorFlow 指定神经网络结构以解决复杂现实生活中的问题,尤其是在 CNN 或 RNN 上。例如,我们可以使用 TensorFlow 的 MNIST 数据集包,其中数据集包含大约 55k 行的 28 x 28 像素的灰度图像,10k 行测试数据和 5k 行验证手写数字数据:
def nn_example():
 mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
# Python optimisation variables
 learning_rate = 0.5
 epochs = 10
 batch_size = 100
对于训练数据和参数,可以提供占位符变量:
 # declare the training data placeholders
 # input x - for 28 x 28 pixels = 784
 x = tensorf.placeholder(tensorf.float32, [None, 784])
 # now declare the output data placeholder - 10 digits
 y = tensorf.placeholder(tensorf.float32, [None, 10])
在这里,x 输入数据层由 28 x 28 = 784 个像素组成,以及 10 个数字节点。此外,对于神经网络,还需要初始化权重和偏差。在 TensorFlow 中,存在 L-1 个权重/偏差张量或图的可能性:
# now declare the weights connecting the input to the hidden layer
 W1 = tensorf.Variable(tensorf.random_normal([784, 300], stddev=0.03), name='W1')
 b1 = tensorf.Variable(tensorf.random_normal([300]), name='b1')
 # and the weights connecting the hidden layer to the output layer
 W2 = tensorf.Variable(tensorf.random_normal([300, 10], stddev=0.03), name='W2')
 b2 = tensorf.Variable(tensorf.random_normal([10]), name='b2') 
首先,我们需要为 W1 和 b1 声明一些变量,用于输入层和隐藏层之间的权重和偏差,其中神经网络在隐藏层将有 300 个节点。权重张量 W1 的大小是 [784, 300]。同样,TensorFlow 支持 NumPy 随机正态函数,它分配一个给定大小的矩阵,用随机样本填充。以类似的方式,权重变量 W2 和偏差变量 b2 将隐藏层连接到神经网络的输出。
隐藏层的输出是通过使用 relu 函数(应用修正线性单元)来计算的:
# calculate the output of the hidden layer
 hidden_out = tensorf.add(tensorf.matmul(x, W1), b1)
 hidden_out = tensorf.nn.relu(hidden_out)
权重与隐藏层输出的乘积,以及 b2 偏置值的加和,通过使用输出层的 softmax 激活函数应用。这可以通过 TensorFlow 的 softmax 函数 tf.nn.softmax 找到:
 # now calculate the hidden layer output - in this case, let's use a softmax activated
 # output layer
 y_ = tensorf.nn.softmax(tensorf.add(tensorf.matmul(hidden_out, W2), b2))
对于优化器,我们需要包含一个成本或损失函数。交叉熵成本函数用于此目的。以下是我们在 TensorFlow 中设置优化器的方式:
# add an optimiser
 optimiser = tensorf.train.GradientDescentOptimizer(learning_rate=learning_rate).minimize(cross_entropy)
TensorFlow 提供梯度下降优化器以及一个学习率,用于指定已提供的最小化交叉熵成本操作。该函数将执行以下梯度下降和反向传播:
# finally setup the initialisation operator
 init_operation = tensorf.global_variables_initializer()
# define an accuracy assessment operation
 correct_prediction = tensorf.equal(tensorf.argmax(y, 1), tensorf.argmax(y_, 1))
 accuracy = tensorf.reduce_mean(tensorf.cast(correct_prediction, tensorf.float32))
# add a summary to store the accuracy
 tensorf.summary.scalar('accuracy', accuracy)
merged = tensorf.summary.merge_all()
 writer = tensorf.summary.FileWriter('c:\\users\\anbasa\\source\\repos')
正确预测操作提供 correct_prediction,它利用 TensorFlow 的 tensorf.equal 提供一个基于布尔值参数的真/假读取。tensorf.argmax 与 NumPy 的 argmax 函数类似工作,因为它返回特定张量或向量中最大值的索引。
从此以后,correct_prediction 操作分配一个大小为 (mx1) 的张量,表示是否神经网络正确预测了数字值。
TensorFlow 训练
对于提供 TensorFlow 训练,首先需要设置 TensorFlow 会话并初始化变量。
它还提供了可以用于神经网络的小批量训练方案的详细信息。它还通过计算每个训练周期和初始化一个 avg_cost 变量来计算每个周期需要运行的批次数。TensorFlow 提供了一个具有实用函数(如 next_batch)的 MNIST 数据集,这使得提取训练数据批次变得更容易:
# start the session with tensorf.Session() as tfsess: # initialise the variables tfsess.run(init_operation) total_batch = int(len(mnist.train.labels) / batch_size) for epoch in range(epochs): avg_cost = 0 for i ...
使用 Docker 容器服务在 Azure 上执行 TensorFlow
TensorFlow 可以在 Azure Linux 虚拟机之上使用 Docker 容器服务执行。需要在 NSG 端口 8888 上公开端点,并执行以下命令,该命令在 Jupyter Notebook 内初始化运行 TensorFlow 的 Docker 容器:
docker run -d -p 8888:8888 -v /notebook:/notebook xblaster/TensorFlow-jupyter

在 Azure Kubernetes Cluster (AKS) 上运行 TensorFlow 容器
使用开源工具包 DLWorkspace (microsoft.github.io/DLWorkspace/) 配置了一个示例 Kubernetes 集群在 Azure 容器服务(AKS)上。该仓库提供了标准 Azure VMs 在 CPU/GPU 上。可以创建示例 k8 集群和启用 Alluxio-FUSE 的 k8 pods。
示例 pod 配置的 GitHub 链接为:github.com/jichang1/TensorFlowonAzure/tree/master/Alluxio。
可以使用以下命令在参数服务器 pod 和工作 pod 上执行 TensorFlow 作业:
python tf_cnn_benchmarks.py --local_parameter_device=gpu --num_gpus=2 --batch_size=128 --model=googlenet --variable_update=parameter_server ...
其他深度学习库
微软在 MNIST 和 CIFAR10 等数据集上提供了 Theano、Caffe、MXNet、Chainer、PyTorch 和 Keras 等深度学习工具的示例。运行这些示例的先决条件如下:
- 您需要安装带有 VS tools for AI 和 MNIST 数据集的 Visual Studio 2017。VS tools for AI 可从“工具”下的“扩展和更新”中下载:
 

- 
根据需要,安装 NVIDIA GPU 驱动程序/CUDA 9.0/cuDNN 7.0 和 Python 3.5/3.6。Python 2.x 仍然不支持(截至编写本文时)。
 - 
需要安装的深度学习库包括 NumPy、SciPy、Matplotlib、ONNX、CNTK、TensorFlow、Caffe2、MXNet、Keras、theano 和 PyTorch:
 

- 
AI 示例仓库的 GitHub 链接为
github.com/Microsoft/samples-for-ai。 - 
Apache MXNet:Apache MXNet 是一个可扩展的深度学习库,用于训练和部署可在 GPU 或 CPU 上扩展的深度神经网络。MXNet 提供了对 Azure 的支持。有关 MXNet 的更多详细信息,请访问
mxnet.incubator.apache.org/。 - 
Caffe:这个深度学习框架提供了表达式、速度、可扩展性、模块化、开放性和庞大的社区支持,用于构建和训练复杂的神经网络。Caffe 2.0 已预安装在 Azure 深度学习工具包和 DSVM 中。
 - 
Theano:这是一个基于 Python 的深度学习库,它使用 NumPy 式的语法来评估复杂的数学和统计表达式,并通过 CPU/GPU 架构进行编译。
 - 
Pytorch:Pytorch 再次是一个基于 Python 的科学计算框架,用于在 GPU 上执行 Numpy 操作和深度学习交互式研究。Pytorch 允许使用混合高级和低级 API 支持进行交互式调试,具有清晰的动态图。这适用于人工神经网络(ANNs)、回归和卷积神经网络(CNNs)。
 - 
Chainer:这是一个基于 Python 的开源深度学习库,它使用 NumPy 和 CuPy
libraries.supportsCUDA 实现,并提供了直观、灵活的深度学习框架,允许使用前馈网络、卷积网络、循环网络和递归网络。更多详细信息请参阅chainer.org/。 
摘要
在本章中,我们学习了深度学习方法论以及 Microsoft Azure AI 平台所支持的工具。我们展示了各种 AI 工具,如 CNTK、MMLSpark 和 TensorFlow,以及它们在 Azure 深度学习工具包/数据科学虚拟机上的执行过程,以及其他开源深度学习库和实用工具。
在下一章中,我们将逐步概述如何将其他 Azure 服务与 Microsoft AI 平台集成。
第十一章:与其他 Azure 服务集成
除了直接使用 Azure AI 服务外,Azure 还提供了从其他非 AI 服务使用这些服务的选项。许多 Azure AI 服务提供 REST API 接口,可以从其他服务中消费。因此,AI 服务可以用作其他应用程序的子组件,以提供洞察和预测。Azure 中的许多非 AI 服务都内置了对 AI 服务的集成,因此通常只需点击几下即可将 AI 组件添加到应用程序中。
一些 AI 服务不包含任何自动化功能。重复性任务,如重新训练机器学习模型或运行批量工作负载,需要与其他提供这些功能的服务集成。在接下来的章节中,我们将介绍自动启动 AI 作业的各种选项。除了传统的按时间计划的工作负载外,Azure 服务还提供称为触发器的对象,在发生某些事件后启动任务。触发器允许服务以特定方式对事件做出反应,例如在创建或修改 blob 文件后处理其内容。
在本章中,我们将学习如何将 Azure AI 服务与四个非 AI 服务集成:
- 
逻辑应用
 - 
Azure 函数
 - 
数据湖分析
 - 
数据工厂
 
使用这些服务,可以构建复杂的应用程序管道,其中机器学习模型只是解决方案的一部分。在 Azure 中,不同服务之间的集成尽可能简单,不会牺牲安全性。因此,获取结果既快又高效,开发 Azure 应用程序可以非常有趣!
逻辑应用
Azure 逻辑应用是一个用于自动化各种类型任务的图形工具,例如从 Web API 获取数据并将其保存到云存储中。逻辑应用可以在不编写任何代码的情况下进行开发,因此不需要编程技能。然而,逻辑应用为编程语言提供了一些基本功能,例如条件执行和循环。
逻辑应用适用于轻量级任务,这些任务不需要复杂的逻辑或闪电般的性能。这些任务可能包括在 SharePoint 列表被修改时发送电子邮件,或者在 Dropbox 和 OneDrive 之间复制文件(如果文件已被修改)。
对于 AI 开发,逻辑应用提供了一系列基本功能。有一些内置的 ...
触发器和操作
逻辑应用基于两个主要概念:触发器和操作。触发器是持续等待特定类型事件的监听器。这些事件可能是在Blob文件夹中创建新文件时产生的,或者它们可能每天在同一时间发生以自动化日常任务。操作是在触发器触发时执行的常规程序。操作通常需要一些输入数据,对其进行处理,最后将结果保存或发送到某个地方。
Logic Apps 支持所有 Azure 数据存储服务:数据湖存储、Blob 存储、Cosmos DB 等。例如,Blob 存储触发器会在目录中添加新文件或目录中的文件被修改时执行 Logic Apps。然后我们可以将文件作为输入传递给 Logic Apps,处理文件内容,并将结果保存回 Blob。
Logic Apps 设计器包含许多认知服务操作:计算机视觉 API、自定义视觉、文本分析等。要查看完整列表,在创建操作时搜索认知操作,如下所示:

Azure Machine Learning Studio 中也有一些操作。这些操作可以用来评分示例或重新训练 ML 模型,如下所示:

连接器可能自编写时已经更新,因此请检查 Microsoft 官方文档中的最新信息。
Twitter 情感分析
社交媒体已成为许多组织的日常工具。除了在这些平台上进行自我推广外,监控有关公司品牌的讨论还可以提供有关客户如何看待其产品和公司形象的重要信息。
在本节中,我们将展示如何创建一个应用程序,该应用程序读取包含关键字 Azure 的推文,并将这些推文保存到云存储中。这是一个真实的数据收集场景:一旦推文被永久存储在云中,我们就开始收集有关公司品牌的历史数据。作为下一步,我们可以开始基于这些数据创建分析和机器学习模型。这些模型可以包括主题分析或查看...
添加语言检测
在上一个示例中,我们创建了一个工作流,该工作流读取包含特定关键字的推文,对这些推文进行情感分析,并将结果保存到 Blob 存储。如果您完成了示例并仔细查看结果,您可能会注意到推文中可能包含许多不同的语言,因为我们的关键字(Azure)并不特定于任何一种语言。在这个示例中,我们将展示如何将语言检测添加到管道中,并过滤掉所有不是特定语言的推文。
- 
要开始示例,请在 Azure 门户中创建一个新的 Logic App,打开 Logic Apps 设计器,并选择与上一个示例相同的触发器作为起点(当出现新的推文时)。
 - 
从文本分析 API 添加 Detect Language 模块。对于文本字段,选择要由文本分析 API 分析的 Tweet 文本参数。此模块的输出将包含从推文中检测到的语言列表。请注意,默认检测到的语言数量为 1。如果预期文本包含多种语言,可以在模块的高级选项中更改此设置:
 

- 
一旦检测到推文语言,我们需要添加一个模块,只选择特定语言的推文。为此,在管道中创建一个新的步骤,搜索
Control操作并选择Condition操作。 - 
当
Condition模块添加到管道中时,我们必须使用模块中的三个字段指定过滤器条件。第一个字段表示我们想要比较的值,第二个字段指定条件类型,最后一个字段包含要比较的值。对于第一个字段,选择detectedLanguages项。请注意,检测语言模块将语言作为列表返回,即使我们只检测一种语言。detectedLanguages项指的是列表中的每个项。因此,Logic Apps 设计器将向管道添加一个新的For each控制模块,之前创建的Condition模块将被放置在For each模块内部。For each模块遍历detectedLanguages列表中的所有值,如果检测到多种语言。 - 
现在,我们的
Condition模块已经放置在For each模块内部,我们可以将Condition模块的第一个字段更改为Language code。第二个字段应设置为is equal to,最后一个字段应包含两位字母语言代码。为了仅保留英语语言的推文,我们将参数设置为en。请注意,语言检测模块可能无法检测到所有语言,因此请检查最新微软文档中提供的可用语言列表。 - 
在条件模块之后,管道现在根据条件是否为
true分支为两个方向。在true分支中,我们可以为英语语言推文添加任何处理步骤。在false分支中,我们可以指定对剩余推文要执行的操作。在这个例子中,我们使用之前示例中开发的情感检测管道来处理英语语言推文。我们对非英语推文不感兴趣,因此我们可以通过留空false分支来忽略它们。完成所有这些步骤后,管道如下所示: 

保存应用后,触发器将开始运行,并将推文保存到 Blob 中。由于我们使用了与之前示例中相同的情感检测模块,因此文件格式应相同,唯一不同的是只有英语推文被保存到 Blob 中。
Azure Functions
虽然 Logic Apps 提供了一种快速自动化任务的方法,但其动作集合仅限于预选选项,无法进行自定义。此外,Logic Apps 的可编程性相当有限,开发更复杂的程序并不一定比编写代码更容易。如果需要更多灵活性,使用 Azure Functions 开发应用程序可能更有效率。函数可以使用熟悉于 Web 开发者的多种编程语言进行开发。
Azure Functions 是一个云中的无服务器编码平台,其中底层操作系统已经被虚拟化。这意味着许多维护任务,例如更新操作系统或语言版本,由 ... 管理。
触发器
Azure Functions 触发器的工作原理与上一节中介绍的 Logic Apps 触发器相同:它们监听特定事件,并在事件发生时启动函数。例如,HTTP 触发器会在函数的 Web URL 被调用时执行函数。计划触发器可以定期执行函数,例如,每天执行一次。Azure Functions 最大的优势之一是其触发器集合。触发器集合允许您响应许多不同类型的事件,而基于代码的方法使得能够以编程语言的全部灵活性对这些事件做出反应。
对于数据相关任务,最有用的触发器是存储触发器。类似于 Logic Apps 可以在 blob 事件上触发,Azure Functions 可以在存储服务(如 Blob Storage 或 Cosmos DB)中文件被添加或更新时触发。考虑一种方案,其中原始数据存储在云中,例如,由 Web 应用程序生成的 JSON 文件,我们希望将这些文件转换为列式格式以添加到关系型数据库中,例如。使用 Azure Functions 和 Blob Storage 触发器,这项任务可以完全自动化,无需任何外部服务。因此,Azure Functions 在其他方面提供了执行此类格式转换的另一种方式。
Azure Functions 最有趣的应用之一是处理来自物联网(IoT)设备的的数据。通过事件中心和 IoT 中心触发器,Azure Functions 可以用作下游处理引擎,处理由 IoT 设备发送的数据。Azure 中的事件中心和 IoT 中心资源是数据摄取服务,能够在短时间内处理大量请求。它们是为连续数据流设计的,其中每个消息的大小很小,但消息的数量可以很大。因此,它们是接收来自大量 IoT 传感器的数据的理想服务,这些传感器在短时间内发送它们的测量值。事件中心和 IoT 中心触发器被设置为在从 IoT 设备接收到新事件时触发,因此我们可以使用 Azure Functions 为每个事件定义一个处理程序。这个程序可以包括对机器学习服务的评分调用并将结果保存到数据库中,例如。
对于大多数触发类型,触发器还会传递一些关于触发事件的详细信息。例如,Blob 存储触发器会传递创建或更改的文件内容,或者 HTTP 触发器会传递 POST 请求的内容。在 Azure Functions 中处理不同类型的输入数据变得非常简单:根据来源,将输入数据的句柄作为参数传递给主函数。在下一节中,我们将展示一个示例,说明如何在 blob 触发器被触发后读取 blob 文件的内容。
Blob 触发的函数
在本例中,我们将演示如何创建一个简单的函数来读取 blob 文件的内容。我们不会对文件进行任何处理;相反,我们只需将其内容打印到日志文件中。
当你在门户中创建 Azure Functions 服务时,除了函数应用本身,它还会创建一些其他资源。需要一个存储帐户来存储函数应用产生的日志。应用服务计划是一个容器资源,它决定了应用的价格和资源扩展。可选地,你还可以创建一个应用洞察资源来监控你的应用使用情况。这对于错误分析和跟踪你的应用被触发的频率非常有用。
要开始开发,...
Azure 数据湖分析
Azure 数据湖(ADL)是微软为大数据提供的存储和分析服务。它能够存储 PB 级的数据,并对存储的数据进行高效的查询。在 Azure 中,存储和分析服务是分开的,ADL 服务实际上由两个不同的产品组成:Azure 数据湖存储(ADLS)和Azure 数据湖分析(ADLA)。在本节中,我们将重点关注 ADLA,但也会在适当的地方提及 ADLS。
数据湖存储是一种基于文件的存储,文件被组织到目录中。这种存储类型被称为无模式,因为在数据湖中存储的数据类型没有限制。目录可以包含文本文件和图像,数据类型仅在从数据湖读取数据时指定。这在大数据场景中特别有用,因为写入数据湖的数据量很大,实时运行数据验证步骤会消耗太多资源。数据验证步骤可以在读取数据时在查询中合并,或者可以定期批量运行。
ADLA 是查询引擎,使您能够对 ADLS 进行高效查询。ADLA 帐户始终需要一个 ADLS 帐户作为其后端。此主帐户是查询的默认源。ADLA 查询使用 U-SQL 编写,这是一种类似于 SQL 的语言,它从 C#借用了某些编程功能。以下是一些查询 ADLS 和存储 Blob 的 U-SQL 脚本示例。
除了主要的 ADLS 源之外,ADLA 实例还可以有二级源。您可以从门户的数据源选项卡添加其他 ADLS 帐户或 Azure 存储 Blob,如下所示:

一旦将帐户注册为数据源,就可以像主要 ADLS 帐户一样在查询中使用它。通过使用多个数据源,如果您的数据位于多个存储帐户中,您可以避免将数据移动到单个数据湖。
作为旁注,始终可以创建一个不与 ADLA 帐户关联的 ADL 存储帐户。但在此情况下,ADLS 只能作为文件存储,无法对文件内容进行查询。也不会阻止您创建多个 ADLA 帐户,这些帐户都使用相同的 ADLS 帐户作为其主源。这种灵活性是因为 ADLS 和 ADLA 在 Azure 门户中是独立的产品。
ADL 最大的优势之一是其用户权限控制。可以为每个文件和目录分别设置权限。如果数据湖中的某些数据是机密的,不应对所有用户可见,则可以将其放置在单独的目录中,并且该目录只能对选定用户组可见。数据湖还与 Azure AD 集成,可以将权限分配给 Azure AD 组而不是特定用户。基于角色的访问控制在此不再进一步讨论,因为重点是分析。要将用户添加到 ADLA 帐户,他们应该使用 Azure 门户中 ADLA 实例的添加用户向导授予数据湖分析开发者角色。
本节中的材料涉及数据湖存储 Gen1(数据湖存储)。ADLS Gen2 在撰写本文时处于私有预览阶段。ADLA 与 Gen2 的工作方式可能会有所变化,因此请检查 Microsoft 文档中的最新信息。
使用 U-SQL 进行开发
如前所述,ADLA 查询是用 U-SQL 编写的,这是一种由微软专门为大数据开发的查询语言。与其他许多 Azure 服务类似,查询可以在 Azure 门户中编写和执行,这对于小型和快速任务非常有用。对于高级开发,VS Code 和 Visual Studio IDEs 有扩展,提供了更多功能。
虽然在许多方面编写 U-SQL 查询与编写 SQL 查询相似,但也存在一些差异。例如,ADLA 不会像 SQL Server Management Studio 那样将交互式输出到查询编辑器,结果总是被定向到某个特定输出,通常是 ADLS 中的一个文件。要检查查询的结果,...
U-SQL 数据库
尽管 ADLS 是一个基于文件的存储系统,但它也包含了一些来自关系数据库的熟悉功能,例如表和视图。ADLA 数据库是这些对象的集合。ADLA 数据库对于管理数据湖存储中的数据非常有用,因为它们提供了一些有用的功能,如表索引。另一方面,ADLA 数据库表具有严格的架构,因此必须在将数据输入到表中之前对其进行验证。然后,我们就失去了数据湖最大的优势之一,即在章节开头讨论的无模式存储原则。
当创建 ADLA 资源时,也会创建一个主数据库。这个数据库用作 U-SQL 查询的默认数据库。可以使用CREATE DATABASE命令创建新数据库,并使用USE DATABASE命令更改数据库。可以在 ADLA 数据探索器中的目录中查看数据库的内容。
U-SQL 数据库中有两种类型的表:托管表和外部分布式表。托管表在很多方面与 SQL 表相似:一个表由元数据(例如,表架构)和数据本身组成。在实践中,数据以结构化文件的形式存储在数据湖存储目录中。托管表强制实施写时模式,这意味着除非数据符合表架构,否则无法向表中输入数据。
外部分布式表在某种程度上类似于 SQL 视图:仅在数据库中存储元数据,但数据本身可以位于数据湖之外。外部分布式表可以引用各种 Azure 服务:Azure SQL 数据库、Azure SQL 数据仓库或虚拟机上的 SQL 服务器。与托管表相比,外部分布式表强制实施读时模式:在定义架构后,底层数据的格式可以更改,因为架构在写入时并未强制实施。如果数据架构发生变化,外部分布式表定义可以修改以匹配新的数据。
使用托管表而不是将数据作为文件存储在目录中有一些优点。例如,如果你的数据存储在一个巨大的 CSV 文件中,可能很难向文件中追加新值。使用INSERT语句,托管表可以实现此操作。(注意,托管表是追加只读的,没有更新值的可能性。)托管表还定义了一个聚集索引,可以用来进行更有效的查询。
简单的 blob 格式转换
在本节中,我们将演示在 Azure 门户中执行 U-SQL 脚本并与次要数据源(Blob 存储)集成。我们将从 Blob 存储中读取CSV(代表逗号分隔值)文件并将整个文件内容写入另一个以TSV(代表制表符分隔值)格式存储的 blob 文件。换句话说,我们将执行从 CSV 到 TSV 的文件格式转换。这种格式转换在数据管理中很常见,因为不同的应用程序通常需要不同格式的数据。
运行此示例的要求是有一个 Blob 存储账户(包含一些数据),以及 ADLS 和 ADLA 账户。
要读取输入数据,必须使用 U-SQL 模块Extractors ...
与认知服务的集成
在前面的章节中,我们看到了如何将逻辑应用与认知服务集成。我们使用了文本分析 API 来评估每条推文的情感并存储结果到 Blob 存储。在这个例子中,我们将展示如何使用 ADLA 实现相同的步骤。除了获取情感评分,我们还将提取每条推文的关键词以获得更多信息。
完成此示例需要一个认知服务文本分析 API 账户。
在 U-SQL 脚本中使用认知服务之前,必须将 ADLA 实例注册到认知扩展中。这可以通过在 Azure 门户中打开 ADLA 实例并选择示例脚本选项卡来完成,如下所示:

安装成功后,认知扩展就准备好在 U-SQL 脚本中使用。这意味着现在可以使用REFERENCE ASSEMBLY语句来导入认知服务模块。
在这个例子中,输入来自一个包含多个文件的目录。查询可以限制为仅匹配目录中的某些文件,根据文件名。在这种情况下,选择了输入目录中的所有 CSV 文件。输入文件具有与之前示例中 Logic App 生成的文件相同的格式:
2018-09-22 11:55:20|Nadeem_ahamed_r|RT @msdev: .@JimBobBennett would like to help you build #Azure #CognitiveServices speech API into your Android app in this three part serie…|1
创建一个新的作业并输入以下脚本:
DECLARE @inputFiles string = "HandsOnAI/twitter/2018-09-21/{*}.csv";
DECLARE @sentimentOutput string = "HandsOnAI/twitter/sentiment.csv";
REFERENCE ASSEMBLY [TextSentiment];
@query =
    EXTRACT Timestamp DateTime,
            Username string,
            Text string,
            SentimentScore float
    FROM @inputFiles
    USING Extractors.Text(delimiter:'|', quoting:false, silent:true);
// Extract the sentiment for each tweet
@sentiment =
    PROCESS @query
    PRODUCE Username,
            Text,
            Sentiment string,
            Conf double
    READONLY Username, Text
    USING new Cognition.Text.SentimentAnalyzer();
OUTPUT @sentiment
    TO @sentimentOutput
    USING Outputters.Csv();
前面的脚本使用Extractors.Text()模块读取输入数据。模块选项表明值由竖线|字符分隔,文本值未加引号,并且Extractor应忽略所有错误数据而不是抛出错误并退出(静默模式)。最后一个属性在不需要担心错误的情况下非常有用。
通过PROCESS命令访问认知服务模块。由于我们在脚本开头引用了TextSentiment程序集,因此现在可以使用Cognition.Text.SentimentAnalyzer模块进行处理。
最后,用户名、推文文本、推文情感和情感得分被保存到输出(数据湖目录)中。输出文件应如下所示:
"treyjohnson","Delta got me this far.  Waiting on the MARTA train and then a quick UBER to #SQLSatATLBI.  Feels like an episode of the Amazing Race! #Evangelism #Azure #BusinessIntelligence @ZAP_Data","Positive",0.74410326366140189
"LouSimonetti","RT @fincooper: Getting ready for #MSIgnite? Check out my sessions BRK3267 and THR2104 in the schedule builder: https://t.co/NYiEWCAfr5 . I'…","Neutral",0
注意,在前面的脚本中,输出模式是在PRODUCE语句之后定义的。在这种情况下,输入模式中的一些字段被忽略(Timestamp、SentimentScore)。输出通过认知服务返回的新情感和置信度值得到丰富。新的置信度分数可以取-1到1之间的值。
除了情感检测之外,文本分析 API 还包括许多其他功能。我们可以从文本样本中提取最相关的关键词,在这种情况下是推文文本。可以使用Cognition.Text.KeyPhraseProcessor模块从Text列中提取关键词,如下面的脚本所示:
// Add this to the beginning of the script
DECLARE @keyphrasesOutput string = "HandsOnAI/split_keyphrases.csv";
REFERENCE ASSEMBLY [TextKeyPhrase];
// Extract key phrases for each tweet
@keyphrase =
    PROCESS @query
    PRODUCE Username,
            Text,
            KeyPhrase SQL.ARRAY<string>
    READONLY Username, Text
    USING new Cognition.Text.KeyPhraseProcessor();
// Tokenize the key phrases
@split_keyphrases =
    SELECT Username,
           Text,
           T.KeyPhrase
    FROM @keyphrase
        CROSS APPLY EXPLODE (KeyPhrase) AS T(KeyPhrase);
OUTPUT @split_keyphrases
    TO @keyphrasesOutput
    USING Outputters.Csv();
前面的脚本使用CROSS APPLY语句为关键词列表中的每个项目生成新行。
通过将前面的脚本与前面的脚本合并,我们创建了一个简单的数据管道,该管道从 CSV 文件中读取推文,调用认知服务文本分析 API 以查找推文情感和关键词,最后将结果保存到 ADLS 中。
Azure 数据工厂
Azure 数据工厂(ADF)是一个云数据集成平台,允许您自动化各种数据相关任务,例如在数据存储之间复制数据、运行分析工作负载和重新训练机器学习模型。它支持广泛的不同的数据存储,包括其他供应商的产品。通过其集成运行时模型,ADF 还可以连接到本地位置,例如自托管 SQL 数据库。
ADF 可以利用 Azure 目录中的多种不同类型的计算资源。这包括机器学习工作室、ADLA、Databricks 和 HDInsight。ADF 还可以向任何公开 REST API 的服务发出请求,例如认知服务。
数据工厂是使用 ADF Visual 开发的 ...
数据集、管道和链接服务
ADF 中的三个主要概念是数据集、管道和链接服务。数据集代表存储在特定位置的数据,例如 Blob 存储中的文件或 SQL 数据库中的表。管道是用于在数据集之间复制或修改数据的程序。管道由一系列活动组成,这些活动对输入数据集进行转换,并生成输出数据集作为结果。最简单的管道由两个数据集组成,即输入和输出数据集,以及它们之间的复制活动。这个简单的管道可以用来在数据存储之间移动数据,例如,从本地 SQL 数据库到 Azure SQL 数据库。
数据集定义本身只包含有关数据格式和模式的信息,而不包含数据的位置信息。所有连接信息都分离到称为链接服务的模块中。链接服务包含所有用于集成的信息,例如连接字符串、服务器地址和密码。每个数据集都必须与一个链接服务相关联,否则 ADF 将不知道数据存储在哪里。链接服务集合定义了 ADF 可以连接的所有数据源。这个集合包括许多 Azure、本地和第三方产品和服务。完整的列表可以在 ADF 文档中找到,如果您喜欢的服务缺失,您也可以通过 Azure 反馈系统请求更多连接器。
活动是在管道内移动和转换数据的任务。这包括控制语句,如循环和条件执行,以及使用各种 Azure 服务的计算任务。计算服务包括 Azure Batch 服务和许多机器学习服务,如 AML Studio、Azure Databricks 和 Azure HDInsight。因此,数据工厂提供了一种自动化许多与 AI 相关的任务的好方法,包括重新训练机器学习模型和运行定期的分析工作负载。与数据集类似,计算活动需要指向 Azure 中现有计算资源的链接服务定义。
还需要注意的是,存储和计算资源的使用不包括在数据工厂的计费模型中。数据工厂的计费仅包括数据管理,数据传输成本和计算成本将作为服务费用附加在数据工厂账单之上。作为一般建议,始终测试使用非常小的数据集的管道,并密切关注随着数据量的增长而产生的成本。
文件格式转换
在这里,我们将展示在云中执行文件格式转换的另一种方法。要开始开发数据工厂管道,请打开数据工厂可视化工具门户,并从左侧菜单中选择作者标签。创建并配置您的存储账户的链接服务,其中包含输入和输出数据。链接服务创建成功后,创建输入文件和输出文件的数据集,并将这些数据集附加到链接服务。
在创建数据集时,请注意配置与您的数据格式匹配。同时,确保您正确指定了数据模式。
当数据集配置完成后,向数据工厂添加一个新的管道。 ...
自动化 U-SQL 脚本
在前面的章节中,我们开发了 U-SQL 脚本来在云中传输和转换数据。ADL 分析引擎本身不包含任何自动化功能,因此我们必须使用外部服务来自动化此类数据工作流。ADF 具有定期触发数据湖分析作业的能力,因此它是自动化 U-SQL 脚本的好选择。
完成此示例需要 ADLS 和 ADLA 账户以及一个要运行的 U-SQL 脚本。第一步是创建 ADLS 链接服务。ADLS 链接服务用于存储要运行的 U-SQL 脚本。U-SQL 脚本应上传到 ADLS,以便在运行时被数据工厂读取。
使用 ADLS 实例进行身份验证有两种方式:托管服务标识(MSI)和服务主体。在本例中,我们将使用 MSI 身份验证。有关使用服务主体身份验证的说明,请参阅文档。在创建链接服务时,请注意服务标识应用程序 ID,它将在屏幕上显示如下:

为了修改数据湖内容,数据工厂实例必须对数据湖拥有正确的访问权限。要授予这些访问权限,请将应用程序 ID 复制到剪贴板,并在 Azure 门户中导航到数据湖存储。从数据资源管理器视图打开您想要存储数据的目录。点击“访问”并使用+添加按钮添加新权限,如下所示:

使用服务标识应用程序 ID 查找数据工厂账户,并授予此账户所有访问权限(rwx)。这给数据工厂提供了读取和写入指定目录文件的权限。
除了目标目录外,Data Factory 还需要父目录的权限。在这种情况下,x 权限就足够了。授予这些权限的最简单方法是转到根目录并授予根目录及其所有子目录的 x 访问权限。这意味着服务帐户可以导航到数据湖中的所有子目录,但除非为这些目录特别授予 rw 权限,否则它不能读取或写入这些目录中的任何文件。如果您希望 Data Factory 能够修改数据湖中的所有文件,您可以一次性授予根目录及其所有子目录的 rwx 权限。这样,您就无需再担心权限问题,因为 Data Factory 默认具有所有必要的权限。
接下来,创建一个 ADLA 链接服务。有关配置 ADLA 服务主体身份验证的详细信息,请参阅文档。
最后一步是创建一个新的管道并将一个 U-SQL 活动添加到管道中。配置活动以使用之前创建的用于 ADLS 和 ADLA 的链接服务,并指定 U-SQL 脚本可以找到的路径。以下是一个示例配置:

注意,U-SQL 模块没有与之关联的任何数据集。输入数据和输出数据在 U-SQL 脚本中指定,如 Azure Data Lake Analytics 部分所述。然而,可以向 U-SQL 脚本传递参数。这些可以在脚本选项卡的高级属性中指定,它们将在 U-SQL 脚本中作为变量可用。这对于传递输入和输出数据的文件名或表名很有用,例如。
运行 Databricks 任务
Azure Databricks 是一种基于云的机器学习服务,能够以非常高的效率处理重负载。基于 Apache Spark,它旨在实时处理大数据和高吞吐量流。通过 ADF,可以安排 Databricks 作业定期运行批量工作负载。
要完成此示例,您需要访问 Databricks 工作区。如果您没有现有的 Databricks 账户,请首先在 Azure 门户中创建一个。
一旦您有权访问 Databricks 工作区,请打开 Data Factory 可视化工具并创建一个用于 Databricks 的链接服务。Databricks 链接服务是计算类型。选择要连接的 Databricks 账户并配置链接服务 ...
摘要
正如我们在本章中看到的,将 Azure AI 服务与其他非 AI 服务集成很容易,配置这些集成可以通过几个简单步骤完成。对于无代码方法,Logic Apps 和 Data Factory 提供工具来自动化许多数据相关任务。通过利用认知服务或 ML Studio Web 服务等 AI 服务,可以增强传入数据,使其包含 AI 服务生成的见解和预测。
基于触发的事件处理系统允许您对不同类型的事件做出反应,例如当在云存储中创建或修改新文件时。在数据移动不频繁且基于时间的数据处理可能会引入延迟的情况下,可以使用触发器来启动数据处理管道,因为系统必须等待预定时间流逝。基于存储的触发器,每当源数据更新时,数据管道可以自动启动。
数据湖分析是一个批量处理引擎,可以对大量数据进行高效查询。U-SQL 语言结合了 SQL 风格的查询和 C#命令,作为大数据的高度灵活查询语言。虽然数据湖分析引擎本身不包含自动化服务,但可以通过使用 U-SQL 模块从数据工厂启动数据湖分析作业。这样就可以使用数据工厂中所有可用的触发器来自动化数据湖分析作业。
在下一章中,我们将学习由微软推出的 Azure 机器学习服务。
第十二章:端到端机器学习
在本章中,我们将学习关于与 Azure 机器学习服务一起推出的新功能,这些功能可以帮助数据科学家和 AI 开发者进行端到端(E2E)机器学习。
在开发 AI 应用时,我们可以使用第三章中描述的认知服务,即[Cognitive Services]。或者,我们可以使用自己的数据创建定制的机器学习模型,因为认知服务并不适用于所有可能的场景。在这些情况下,我们必须训练自己的机器学习算法。Azure 机器学习服务有一个 SDK、CLI 和 API,可以帮助你创建这些定制的模型。
在本章中,我们将学习如何使用 Azure 机器学习 ...
使用 Azure 机器学习 SDK 进行端到端机器学习
如以下图所示,端到端机器学习的第一步是数据准备,这包括数据清洗和特征化。然后,在模型训练步骤中,我们必须创建和训练一个机器学习模型。之后,我们有模型部署,这意味着将模型作为 Web 服务部署以执行预测。最后一步是监控,这包括分析模型的性能,然后触发模型的重新训练。

Azure ML SDK 使专业数据科学家和 DevOps 工程师能够执行端到端机器学习。它允许我们无缝使用云的力量来训练和部署我们的模型。我们可以通过在任何 Python 环境中使用pip轻松安装它来开始使用 Azure ML SDK。我们可以通过使用 CPU 或 GPU 集群来扩展训练的计算能力。我们还可以使用 SDK 轻松跟踪所有实验的运行历史。这个运行历史存储在一个可共享的工作区中,这使得团队能够共享资源和实验结果。SDK 的另一个优点是,它允许我们根据我们指定的指标,例如,例如,最高的准确率或最低的错误率,从实验的多次运行中找到最佳的模型。
一旦我们有一个满足我们需求的机器学习模型,我们就可以使用 Azure ML 服务将其投入使用。我们可以从模型创建一个可以在 Azure 管理的计算机或 IoT 设备上部署的 Web 服务。SDK 可以安装在任何 IDE 中,因此即使你不使用 Jupyter Notebooks 或 Databricks,你也可以使用 VS Code 或 PyCharm 来部署模型。对于开发测试场景,我们可以将 Web 服务部署到Azure 容器实例(ACI)。要部署生产环境中的模型,我们可以使用Azure Kubernetes 服务(AKS)。在 Web 服务部署到 AKS 后,我们可以启用监控并查看 Web 服务的性能。
以下示例代码显示了如何使用 SDK 进行端到端机器学习。首先,为您的机器学习项目创建一个工作区。这将创建在您的 Azure 订阅中,并且可以与组织中不同的用户共享。这个工作区逻辑上分组了我们将需要的计算、实验、数据存储、模型、镜像和部署,以进行端到端机器学习:

这个工作区可以通过代码或在我们的订阅中的 Azure 门户内访问。我们可以管理工作区的所有逻辑组件,我们还可以管理用户权限。以下截图显示了门户中看到的工作区组件:

一旦我们创建了一个工作区,我们就可以创建一个可以根据我们的训练需求自动扩展的训练计算。这个计算可以使用 CPU 或 GPU,我们可以使用我们喜欢的任何框架。例如,我们可以使用 scikit-learn 进行经典机器学习,或者使用 TensorFlow 进行深度学习。任何框架或库都可以使用pip安装,并使用 SDK 使用。我们可以将实验运行提交给这个计算,我们将在我们的环境和 Azure 门户中看到结果。我们还可以将指标作为我们训练脚本的一部分进行记录。以下是实验运行和相应指标在 Azure 门户中可能出现的示例截图。我们还可以使用 SDK 中的代码访问这些指标。
以下截图显示了实验的数量以及运行每个实验所需的时间:

这张截图显示了特定运行中正在监控的指标:

如前所述,我们可以根据感兴趣的特定指标找到最佳运行。以下是一个用于找到最佳运行的代码片段示例:

一旦我们找到了最佳运行,我们可以将模型作为 Web 服务部署到 ACI 或 AKS。为此,我们需要提供一个评分脚本和一个环境配置,以及我们想要部署的模型。以下是可以用于部署模型的示例代码:

当模型在生产中部署到 AKS 并启用监控时,我们可以查看我们的 Web 服务性能的见解。我们还可以为我们的模型添加自定义监控。以下截图显示了 Web 服务在几天内的表现:

您可以在以下网站上获取有关 Azure 机器学习服务的更多详细信息:docs.microsoft.com/en-us/azure/machine-learning/service/overview-what-is-azure-ml。
您也可以在以下网站上获取示例笔记本,以开始使用 Azure 机器学习 SDK:github.com/Azure/MachineLearningNotebooks。
摘要
在本章中,我们学习了 Azure 机器学习服务的新功能,这使得执行端到端机器学习变得容易。我们还学习了专业数据科学家和 DevOps 工程师如何从 Azure 机器学习 SDK 的实验和模型管理功能中受益。

                    
                
                
            
        
浙公网安备 33010602011771号