James McCaffrey

下载代码示例

没有一致的协议上到底什么词"机器学习"(毫升) 的手段。在我心中,ML 是任何系统,使用数据来帮助做出预测。例如,您可能想要预测谁会赢得超级碗,或哪一组 (群集) 的人一个新的客户将最相似。

从零开始使用 C# 或其他任何编程语言书写毫升系统令人着迷,但它很耗时,需要具备专业的知识,常是困难的。新的微软 Azure 毫升工作室 (2014 年七月发布) 使得创建毫升系统更容易、 更快、 更高效。在这篇文章中,我将带您通过一个完整的示例,将让你建立和运行以毫升工作室。

看到这篇文章将走向何方是的最好方法是检查屏幕快照中的 图 1 。该图像显示已完成的 ML 工作室实验。该实验的目的是预测美国成员政治党派 (民主党人或共和党人) 众院基于以前的投票行为。

图 1 完整蔚蓝毫升工作室实验

在图像的顶部,请注意毫升工作室运行在 Internet explorer 中 — — 它是一个基于 Web 的应用程序。更多规格­巧毫升工作室是微软 Azure 机器学习服务的前端。从这里开始,为简单起见,我将使用"毫升工作室"一词来指这两个客户端前端和 Azure 回来结束。在地址栏中,您可以看到我使用一个内部 URL"passau.cloupapp.net"。在发展中,毫升工作室项目是代号为"帕绍",你可能会碰到这个词在文档中。你读这篇文章的时候的公用 URL 为毫升工作室将发售 azure.microsoft.com

使用 ML 工作室创建毫升系统是大致类似于使用Visual Studio来创建可执行程序,但你不应该太过得意忘形,这一概念。若要使用Visual Studio,可以购买该工具,或者可以使用免费的试用版。毫升的工作室,你负责对使用这项服务,但会免费试行这一制度的方法。确切的细节都一定会频繁改变 — — 不断变化是一个重大的缺点,在我看来,与基于云计算的系统工作。我喜欢在我的台式机上安装的产品也完全是我的决定的任何更改。在云计算的勇敢新世界,你必须准备,改变不再是完全在你控制下的工作环境。

毫升工作室有三个主要工作领域。在左边你可以看到项目的名字,如保存数据集、 数据输入和输出和机器学习。这些都是类别,如果你扩展它们,你看到可以拖到中心设计曲面的具体项目。这是有点类似于Visual Studio工具箱中,在那里可以将所需的 UI 控件拖动到设计图面上。然而,毫升工作室模块通常代表什么你能想到的方法 — — 那就是,预先编写执行某种形式的 ML 任务的代码。

毫升工作室中心地区被称为实验。这是类似于Visual Studio编辑器 — — 你做你的大部分工作的地方。在 图 1 ,实验题为投票实验。实验题目是大致类似于Visual Studio解决方案名称。矩形框是被拖动到设计图面上的模块。例如,标记为"投票数据"的模块是原始数据源,同时标记为"后勤回归二元分类模型"(标签部分切掉) 的模块是使用的核心 ML 算法。

弧形的线条建立输入-­输出模块之间的流动。老实说,我作为一名开发人员的第一印象并不完全积极:"哦伟大。弯曲的线条。我不喜欢曲线。那不是真正编程。"但它没有带我长适应毫升工作室视觉样式的创建系统,而现在我是一个信徒。

毫升工作室的右侧显示详细说明是什么­曾经当前选定在主要工作区。在 图 1 ,因为选定逻辑斯蒂回归二元分类模型模块 (其边框是粗体) 中的右侧的区域,例如"优化容忍",与 1.0E 的值的信息-07,具体指的是该模块。你能想到的右侧的区域中作为参数值 (或等价地,参数值,取决于你的观点) 的每个进行选定的模块的信息。

您可以通过点击位于底部的工具的运行图标运行实验。这是某种程度上相当于打Visual Studio在调试器中执行程序中的 F5 键。每个模块完成,毫升工作室将显示模块内部的绿色的复选标记。您还可以看到一个保存图标,但默认情况下,毫升工作室会自动保存你的实验每隔几秒钟 — — 在云工作可以是危险一样滴落的网络连接问题。

以下各节将,,我将带您通过实验建立 图 1 这样你可以复制它。这样做会给你一个坚实的基础,为调查毫升演播室上你自己的或为探索早期发布的文档。这篇文章假设你有至少开始水平 (了解毫升工作室和Visual Studio的类比和术语) 的编程技能,但不是承担你知道任何有关毫升工作室或机器学习。

得到的结果吗?

如果你是新到 ML 的工作室,你可能想知道在哪里可以找到输出的实验。事实证明,一个典型的 ML 工作室实验通常具有多个输出。底线的输出,可以说,所示 图 2 。我砍出的中心部分,以使图像以查看更容易一点。

图 2 蔚蓝毫升工作室实验结果

为了查看这些结果,我最右记分模型实验模块上用鼠标右键单击并从上下文菜单中选择可视化选项。这与结果打开一个单独的窗口,如图所示。现在,看看底部的图像,类似于:

unknown-party  y  n  y  n . . y  n  democrat    0.0013
unknown-party  y  y  y  y . . n  n  republican  0.7028

此输出指示预测模型被创建后,它提出了两个新的数据项目。第一,与未知的党,是数据假设有关立法的条例草案 》 投票"是"的代表残疾人 (如果你仔细看,这些列都具有标题) 的婴儿,"不会"上有关水工程等等,通过"不是"表决南非有关条例草案的条例草案。由毫升工作室创建的模型预测假设的代表是一位民主党人。第二个数据项目是假设的代表投了赞成票"yes"前, 八个法案和"不是"第二八项条例草案 ; 该模型预测的人是一名共和党人。

现在,您了解该演示实验的目的,你在更好地了解如何创建的实验。它是相当安全的说,所有毫升工作室实验都开始与一些数据,和一个或多个问题有待回答。在这里,演示数据是一家知名 (毫升社会,至少) 基准数据集通常被称为国会的投票记录数据集 (或 UCI 投票数据集,因为该文件的主要位置位于一台服务器保持由加利福尼亚大学欧文分校)。原始的数据,一个简单的文本文件,命名为房子-票-84.data,可以通过互联网搜索发现。

原始数据的前四行是:

republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y
republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,?
democrat,?,y,y,?,y,y,n,n,n,n,y,n,y,y,n,n
democrat,n,y,y,n,?,y,n,n,n,n,y,n,y,n,n,y

共有 435 以逗号分隔的数据的行,另一个用于每一个美国 435 成员 众议院于 1984 年。 每个场第一的列是党和民主党人或共和党人 (有当时没有独立或其他当事方)。在每一行上的下一步 16 项代表赞成票 (y)、 反对票 (n) 或缺少表决 (?)。

毫升工作室可以读取数据直接关闭网页,或从 Azure 存储空间,但是我更喜欢创建自己的数据存储。要做到这一点,我在我本地机器上,将文本文件复制到记事本,然后添加列标题 UCI Web 站点上的文件描述的基础,像这样:

political-party,handicapped-infants, . . ,south-africa
republican,n,y,n,y,y,y,n,n,n,y,?,y,y,y,n,y
republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,?
democrat,?,y,y,?,y,y,n,n,n,n,y,n,y,y,n,n

当从头开始编写毫升代码,具有列标头的工作可以很烦人,标头是经常省略掉的数据文件。但与毫升工作室,使用列标题是容易忽略这些,尽可能使数据更易理解,其实。我将本地文件重命名为 VotingRawWithHeader.txt,并保存在我的机器上。如果你想要使用相同的页眉,像我一样,你可以得到我的代码下载中用于在这篇文章的数据文件 msdn.microsoft.com/magazine/msdnmag0914

导航到毫升工作室主页之后, 我点击数据集类别中的左侧窗格。在主要的工作区域中,毫升工作室显示内置的数据集,例如虹膜两类数据和望远镜数据的列表。你最初看到这些数据集的绝大多数都是更多或更少知名的基准集 (从 UCI 存储库中的多),可用于探索毫升工作室。在左下角的 ML 工作室,我位于新的图标,点击它。

从那里我可以选择新的数据集或一个新的实验,所以我点击数据集,然后从本地文件图标上。至此,在对话框中显示图 3。我用浏览按钮来针对本地文件、 命名数据集"投票数据,"所选类型"标题 (.csv) 通用 CSV 文件",键入数据集的简短说明。

图 3 创建新的数据集

点击了 OK 复选标记和 ML 工作室的本地文件上载到 Azure 存储空间,并将其保存。返回在数据集视图中毫升工作室,我做页面刷新,投票数据现在可以看到演示数据集。请注意在毫升工作室我用的预发行版本,不可能完全删除数据集。所以,当你正在调查,我强烈建议您创建单个数据集与像假数据的通用名称。然后,当你需要一个不同的数据集,使用"这是一个现有的数据集的新版本"选项,所以你毫升工作室工作区不会成为超支与孤立、 哑不能被删除的数据集。

若要创建实验,我点击左下角的 ML 工作室的新图标,然后点击实验选项。接下来,在左侧的窗格中,单击保存数据集类别,然后滚动到投票的数据项目,我只是创建并拖到设计窗格上。在设计曲面图的顶部,我进入投票实验作为标题。在这一点上,你可以投票数据模块的底部输出节点上右键单击,并选择的可视化选项以验证您的数据集正确。

许多开发人员,包括我自己,当第一次使用毫升,严重低估多少努力参与 ML 算法在应用之前操作的源数据。典型任务包括重新排列数据列,删除不需要的列,处理缺失值,编码非数值型数据和将数据分解到训练集和测试集。从开发人员的角度出发为投票数据实验,这些任务可能会采取这样的代码的形式:

string[][] rawData = LoadData("VotingRawWithHeader.txt");
rawData = ProcessMissing(rawData, '?', 'n');
rawData = SwapColumns(rawData, 0, 16);
double[][] data = Encode(rawData);
double[][] trainData;
double[][] testData;
MakeTrainTest(data, 0.80, out trainData, out testData);

图 4 显示前四毫升工作室模块,用于执行这些任务的一个特写镜头。在很多毫升场景中,最常见的方法来处理缺失值是只需删除所有数据项目行包含一个或更多的缺失值和 ML 工作室给你该选项。然而,与投票数据,我的假设是失踪的票是真的隐含"否定"投票。所以,对于缺少值洗涤器模块,在右侧的窗格中,我规定,所有缺少的值 ("?") 应改为"n"的值。

图 4 处理数据

项目列模块允许您指定您想要忽略任何的列。在这种情况下,我选择"选择所有列"选项。毫升工作室检查您的数据,并且使聪明的猜测列中的值是否分类数据: 字符串或数值数据。元数据编辑器模块允许您重写毫升的假设,并还允许您指定标签列,那就是,要预测的变量。我所选的"政党"列 (这里的地方有列标题是很大的帮助),指定它是标签列。我离开其他 16 列作为功能 (预测) 的列。

拆分模块做了,就像将数据划分为训练集,用于创建毫升模型和测试集,用来估计模型的准确性。在这里,我指定 0.8 的模块参数窗格中,因此培训数据将 80%的项目的 435 项 (348 项) 和测试集将余下的 20%(87 项)。拆分模块也有一个布尔型参数,名为"分层分裂"。当与毫升工作室工作,你肯定会遇到参数不明白其含义。在右下角的问号图标使您可以访问到毫升工作室帮助。

在模型训练过程

可以将一个 ML 模型看作是信息的集合 — — 数值通常称为权重 — — 那用来生成输出和预测。培养模式是找到一组权重值,以便当面对来自训练集 (在这种情况下,16 是和没有选票),输入的数据计算产出 (民主党人或共和党人) 密切配合训练数据中的已知的输出的过程。一旦这些权重已经确定,生成的模型可以提供测试数据。对测试数据 (正确预测的百分比) 模型的精度给你的表现如何,该模型将时给出了新的数据,知道真实的输出并不是一个粗略的估计。

对于投票的演示中,基于代码的训练可能类似于:

int numFeatures = 16;
LogisticModel lm = new LogisticModel(numFeatures);
int maxEpochs = 10000;
lm.Train(trainData, maxEpochs);

图 5 显示一个特写镜头的等效的 ML 工作室培训-­相关模块。在这个演示中,火车模型模块接受作为输入逻辑斯蒂回归二元分类模型模块。不像其他的连接,这的确不是数据流 ; 实际上,它指定到底什么样的 ML 模型是用于。选择到后勤回归二元分类包括模块平均感知二元、 二元提高决策树和神经网络二进制分类器。

图 5 在模型训练过程

所以,你怎么知道要使用哪个模型?因为输出预测有两个可能的值,民主党人或共和党人,你想要一个二进制的模型。但是有几十个毫升接近,可能使用毫升工作室的最困难部分不得不研究不同毫升量词的利弊。Visual Studio开发类比是 Microsoft.NET 框架有几十个数据结构如泛型字典、 HashSet 和泛型队列,它是让你知道每个数据结构做什么。在同样的方式,它是对你了解毫升分类器。

Logistic 回归分析模块有一些你可能不会理解,包括优化公差、 L1 经常化重量和内存大小为 L BFGS 的参数。再次,这得由你来了解这些参数做些什么。 幸运的是,毫升工作室有大多数模块参数的精挑细选的默认值。我接受所有的默认参数值,除非我用零的"随机编号的种子"。

在火车模型模块中,你必须告诉毫升工作室培训数据的列是标签列中 ; 也就是说,哪一列是要预测的变量。与选定的火车模型模块,在模块的参数窗格中发射列选择器按钮上单击选择按名称选择在下拉列表控件中,然后键入政党。我可以用列的索引,1,因为政党位于第一列中 (1 为基础,而不是基于 0 作为开发人员所习惯的毫升工作室指数是)。请注意指定标签列火车模型模块需要即使你这样做在元数据编辑器中。

演示模型已经过培训之后,接下来的步骤是饲料训练数据和测试数据对该模型、 计算的计算的输出,和计算的准确性 (针对已知的输出) 的计算输出。在代码中,这可能看起来像:

lm.ComputeOutputs(trainData); // Score
double trainAccuracy = lm.Accuracy(trainData); // Evaluate
lm.ComputeOutputs(testData); // Score
double testAccuracy = lm.Accuracy(testData); // Evaluate

图 6 显示有关评分和评价模块的一个特写镜头。这两个分数模型模块接受两个输入流。第一个输入是训练的模型 (计算产出所需的信息) 和第二个输入是一个训练集或测试集 (所需的数据输入)。这两个评分模块的结果被发送到该评价模型模块,计算精度。

图 6 得分及评价模型研究

图 7 评价模型模块中显示结果。在右上角,第二个数据集的两个项目的通知已被选中 (它会被加亮),这意味着结果的测试数据。最重要是结果的 0.989 的精度值。记得测试集是 435 的原始数据项目或 87 项的 20%。Logistic 回归模型正确的预测 86 87 测试项目的政党。还有很多其他评价模型模块结果中的信息。例如,图被称为接收器操作特征 (ROC) 图。它绘制的"真阳性"百分比 (正确的预测) 关于 y 轴 vs。 "误报"的百分比 (不正确预测) 在 x 轴上。

图 7 模型试验数据的准确性

以上只是一个工具

Azure 毫升工作室中的应用,以及它的后端引擎,微软 Azure 机器学习 (毫升) 的服务,很多比这篇短文中所描述的客户端工具。从开发人员的角度来看,毫升工作室大大简化了创建预测系统。但有附加价值主张的就不那么明显。

这篇文章中未涉及的一个重要课题是 Azure 毫升创建和发布 Web 服务使用只需要拖动并下降和几个点击的能力。蔚蓝毫升自动处理部署、 容量调配、 负载平衡、 自动缩放和健康监测。一个预发布客户估计 Azure 毫升,他们是能够创建业务解决方案 (欺诈检测系统) 在使用商业分析软件的成本的一小部分。

蔚蓝毫升支持研发,编程语言的常用数据科学。数百个现有的开放源码 R 模块可以直接复制到 Azure 毫升系统。

毫升工作室允许容易合作。实验可以轻松地共享在几个人之间。此功能因为自己而使用主意了,比我正常、 和规定的电子邮件谈话方式的更高效。

蔚蓝毫升到开发人员和数据的科学家提供了不仅仅是优势。"部署先进的分析很难,"说JosephSirosh,微软公司的副总裁,信息管理和机器学习。"企业厌倦付高价,招募昂贵的人才,等待数月才能得到结果。有能力迅速建立解析模型,并将它们部署没有这些瓶颈是改变游戏规则。蔚蓝毫升允许解锁他们的数据中的值,并建立系统,以减少开支,增加收入并更好地服务他们最终客户的企业。

一旦毫升工作室模型已创建并进行评估,它可以用于未知产出的数据作出的预测。我想要预测政党的假想的代表投了赞成票"yes","不,""没错,""不,"等等,在 16 立法条例草案及一位投票的第二个代表"是"前八个法案,"不是"其余八项条例草案。

一种办法就是创建并上载新毫升工作室数据集,然后得分中相同的方式进行培训和测试数据集。但对于数量有限的数据,更具互动性的方法是使用输入的数据模块,如中所示图 8,它允许您手动输入数据。

图 8 输入新的数据来预测

在模块中数据的格式必须与用来训练模型,所以列标题都是所需的数据的格式完全匹配。从输入数据模块输出与从火车模型模块输出相结合。在运行实验之后, 你可以看到结果通过点击积分模型模块、 可视化选项如上文所示的图 2

如果你正在使用一种程序的编程语言的预测,该代码可能类似于:

string[] unknown = new string[] { "party", "y", "n", "y", . . "n" };
double result = lm.ComputeOutput(unknown);
if (result < 0.5)
  Console.WriteLine("Predicted party is democrat");
  Console.WriteLine("Predicted party is republican");

再次,一些毫升工作室信息是可能是有点神秘。回顾预测包括两个尾随数值:

unknown-party  y  n  y . . y  n  democrat    0.0013
unknown-party  y  y  y . . n  n  republican  0.7028

看来,后勤回归二进制分类,输出值低于 0.5 表示第一类 (在本示例中的民主党人),产值超过 0.5 表示第二个类 (共和党人)。请记住,喜欢Visual Studio,毫升工作室具有许多功能,生成大量的信息。您将了解各种信息的意思随着时间的推移使用系统和一次处理一个新片而不是做深入探究了文件并试图一次学到的一切。

没有代码吗?

这篇文章只是一点皮毛毫升工作室,但它提供足够的信息,所以你可以复制该投票的实验,并给该工具试一试。你可能已经注意到这篇文章并不包括任何编码。没有码?呸 !但毫升工作室最酷的事之一是您可以编写您自己的自定义模块使用 C# 中,我将会涉及这个主题在以后的文章中。我的预感是毫升工作室将生成开发人员编写复杂的专门的模块,并使其可用两个商业和通过各种渠道,如打开源和博客,生态。

James McCaffrey 适合在雷德蒙的微软研究院  他曾在几个 Microsoft 产品包括 Internet Explorer 和冰。他可以在达成 jammc@microsoft.com

感谢以下的微软技术专家对本文的审阅:Roger 巴尔加 (机器学习) 和MichaelJones(全球产品工程)