本教程适合从未使用过 Azure 机器学习工作室的用户。
本教程介绍如何在首次使用工作室时创建机器学习试验。 此试验将测试一个分析模型,该模型使用制造商和技术规格等各种变量来预测汽车的价格。
备注
本教程介绍各种基础知识:如何将模块拖放到试验中、如何将模块连接到一起、如何运行试验,以及如何查看结果。 我们不讨论机器学习这一宽泛主题,也不讨论如何选择和使用工作室中包括的 100 多种内置算法和数据操作模块。
如果不熟悉机器学习,可先观看视频系列:适合初学者的数据科学。 该视频系列使用日常语言和概念对机器学习进行了很好的介绍。
如果已熟悉机器学习,但想获取有关机器学习工作室的更多常规信息,以及工作室所包含的机器学习算法,则可参考下述资源:
- 什么是机器学习工作室? - 对工作室的概述。
- 机器学习基础知识及算法示例 - 以信息图方式图文并茂地详细介绍了机器学习工作室包含的各类机器学习算法。
- Machine Learning Guide(机器学习指南)- 此指南介绍的内容与上面的信息图类似,只是采用了交互的方式。
- 机器学习算法备忘和如何选择 Microsoft Azure 机器学习的算法 - 可供用户下载的海报及深度讨论工作室算法的相关文章。
- Machine Learning Studio: Algorithm and Module Help(机器学习工作室:算法和模块帮助)- 包括机器学习算法在内的所有工作室模块的完整参考。
机器学习工作室有什么作用?
借助机器学习工作室,可以轻松使用拖放模块(使用预测模型技术预先编写)来设置试验。
用户可通过交互式视觉工作区将数据集 和分析模块 拖放到交互式画布上。 将它们连接到一起就是一个可在机器学习工作室中运行的试验。 先创建模型,然后对模型定型,最后再对模型进行评分和测试。
可以反复进行模型设计,不断地编辑和运行试验,直至获得所要的结果。 模型就绪以后,可将其作为 Web 服务 发布,方便其他用户向其发送新的数据并获得预测结果。
打开机器学习工作室
若要开始使用工作室,请访问 https://studio.azureml.net。 如果以前登录过机器学习工作室,请单击“登录”。 否则,请单击“在此注册”并选择免费或付费选项。
登录到机器学习工作室
创建试验需执行的五个步骤
在本机器学习教程中,我们按照以下五个基本步骤在机器学习工作室中构建试验,以便对模型进行创建、定型以及评分:
- 创建模型
- 模型
- 对模型进行评分和测试
提示
可在 Cortana Intelligence Gallery(Cortana Intelligence 库)中找到以下试验的工作副本。 请访问 Your first data science experiment - Automobile price prediction(你的第一个数据科学试验 - 汽车价格预测),然后单击“在工作室中打开”将试验副本下载到机器学习工作室的工作区。
步骤 1:获取数据
若要进行机器学习,首先需获取数据。 可以使用机器学习工作室随附的多个示例数据集,也可以从多种源导入数据。 本示例将使用工作区中包含的示例数据集“汽车价格数据(原始)”。 此数据集包含各辆汽车的条目,包括制造商、车型、技术规格、价格等方面的信息。
下面介绍如何将数据集导入试验中。
-
创建新的试验,方法是:单击“机器学习工作室”窗口底部的“+新建”,选择“试验”,然后选择“空白试验”。
-
试验有一个默认名称,显示在画布顶部。 选中该名称,将试验重命名为某个有意义的名称,例如“汽车价格预测”。 名称不需唯一。
-
试验画布左侧是数据集和模块的控制板。 在此控制板顶部的“搜索”框中键入汽车,找到标有“汽车价格数据(原始)”的数据集。 将该数据集拖放到试验画布上。
找到汽车数据集并将其拖放到试验画布上
若要查看此数据的大致外观,请单击汽车数据集底部的输出端口,然后选择“可视化”。
单击输出端口,然后选择“可视化”
提示
数据集和模块都有由小圆圈表示的输入和输出端口 - 输入端口位于顶部,输出端口位于底部。 若要通过试验创建数据流,需将一个模块的输出端口连接到另一个模块的输入端口。 可以随时单击数据集或模块的输出端口,查看数据流中的数据在该时刻的情况。
在此示例数据集中,一辆汽车显示为一行,与之相关的变量显式为多个列。 有了特定汽车的变量以后,我们就可以尝试预测汽车的价格,如最右列(第 26 列,名为“价格”)所示。
在数据可视化窗口中查看汽车数据
单击右上角的“x”关闭可视化窗口。
步骤 2:准备数据
数据集通常需要经过一定的预处理才能进行分析。 例如,你可能已注意到,在多个行的列中存在缺失值。 需要清除这些缺失值,使模型能够正确分析数据。 在本例中,将删除包含缺失值的所有行。 此外,“规范化损失”列包含较大比例的缺失值,因此要将该列从模型中完全排除。
提示
使用大多数模块时,都必须从输入数据中清除缺失值。
首先添加一个彻底删除“规范化损失”列的模块,然后添加另一个删除有数据缺失的行的模块。
-
在模块控制板顶部的“搜索”框中键入“选择列”,查找“选择数据集中的列select-columns”模块,然后将其拖放到试验画布上。[] 使用此模块可以选择要将哪些列包含在模型中,或者从模型中排除。
-
将“汽车价格数据(原始)”数据集的输出端口连接到“选择数据集中的列select-columns”模块的输入端口。[]
将“选择数据集中的列”模块添加到试验画布并进行连接 -
单击“选择数据集中的列select-columns”模块,然后单击“属性”窗格中的“启动列选择器”。[]
- 在左侧单击“使用规则”
- 在“开头为”下面,单击“所有列”。 这会指示“选择数据集中的列select-columns”传递所有列(但要排除的列除外)。[]
- 在下拉列表中,选择“排除”和“列名称”,然后在文本框内部单击。 此时将显示列的列表。 选择“规范化损失”,该列随即添加到文本框中。
-
单击复选标记(“确定”)按钮,关闭列选择器(右下角)。
启动列选择器,排除“规范化损失”列此时“选择数据集中的列”的属性窗格指示它将传入数据集中的所有列,但“规范化损失”除外。
属性窗格显示“规范化损失”列已排除提示
可以双击模块并输入文本,为模块添加注释。 这有助于快速查看模块在实验中的运行情况。 在本例中,请双击“选择数据集中的列”select-columns模块,然后键入注释“排除规范化损失”。[]
![双击要添加注释的模块][add-comment]
<br/>
***双击要添加注释的模块***
-
将“清理缺失数据clean-missing-data”模块拖到试验画布,然后将其连接到“选择数据集中的列select-columns”模块。[][] 在“属性”窗格的“清理模式”下选择“删除整行”。 这会指示“清理缺失数据clean-missing-data”清理数据,删除存在缺失值的行。[] 双击该模块并键入注释“删除缺失值行”。
将“清理缺失数据”模块的清理模式设置为“删除整行” -
通过单击页面底部的“运行”运行此试验。
试验运行完以后,所有模块都会出现绿色复选标记,表示已成功完成。 另请留意右上角的“已完成运行”状态。
运行以后,试验看起来应与上图类似
提示
为什么我们现在运行此试验? 运行此试验,数据的列定义就会从数据集传入“选择数据集中的列select-columns”模块和“清理缺失数据clean-missing-data”模块。[][] 这意味着,只要连接到“清理缺失数据clean-missing-data”,任何模块也都会有此类相同信息。[]
试验到目前为止所完成的工作就是清理数据。 若要查看已清理的数据集,请单击“清理缺失数据clean-missing-data”模块左侧的输出端口,然后选择“可视化”。[] 请注意,此时不再包含“规范化损失”列,并且也没有缺失值。
现已清理数据,接下来可以指定要在预测模型中使用哪些特征。
步骤 3:定义特征
在机器学习中, 特征 是用户感兴趣的某些内容的各个可测量属性。 在此处的数据集中,每个行代表一辆汽车,每个列是该汽车的特征。
若要找到一组理想的特征来创建预测模型,需要针对要解决的问题进行试验,并且具有相关知识。 有些特征比其他特征更适合用于预测目标。 另外,某些特征与其他特征有很强的关联性,可以将其删除。 例如,city-mpg(市区油耗)和 highway-mpg(高速公路油耗)密切相关,因此可以保留一个,删除另一个,不会对预测产生明显影响。
让我们构建一个模型,它使用数据集中的一部分特征。 以后还可以返回此处,选择不同的特征,再次运行试验,然后确认是否获得了理想的结果。 不过,让我们先尝试使用以下特征:
make, body-style, wheel-base, engine-size, horsepower, peak-rpm, highway-mpg, price
-
将另一“选择数据集中的列select-columns”模块拖放到试验画布上。[] 将“清理缺失数据clean-missing-data”模块左侧的输出端口连接到“选择数据集中的列select-columns”模块的输入端口。[][]
将“选择数据集中的列”模块连接到“清理缺失数据”模块 -
双击该模块,然后键入“选择要预测的特征”。
-
单击“属性”窗格中的“启动列选择器”。
-
单击“使用规则”。
-
在“开头为”下面,单击“没有列”。 在筛选器行中,选择“包括”和“列名”,然后在文本框中选择列名列表。 这会指示模块不要传入任何列(特征),我们指定的列除外。
-
单击复选标记(“确定”)按钮。
选择要包括在预测中的列(特征)
此时会生成经过筛选的数据集,只包含需要传递到下一步使用的学习算法中的特征。 稍后可以返回,选择不同的特征重试生成结果。
步骤 4:选择并应用学习算法
准备好数据后,构造预测模型的过程包括训练和测试。 我们将使用数据对模型定型,然后测试模型,看其预测价格时准确性如何。
分类 和回归 是两种监督式机器学习算法。 分类可以从一组定义的类别预测答案,例如颜色(红、蓝或绿)。 回归用于预测数字。
由于要预测价格(一个数字),因此需使用回归算法。 就此示例来说,我们将使用简单的线性回归 模型。
提示
若需详细了解不同类型的机器学习算法和使用时机,可以观看“适合初学者的数据科学”系列的第一个视频:数据科学回答的五大问题。 也可参阅带信息图的机器学习基础知识及算法示例,或查看机器学习算法备忘。
对模型定型时,我们会为其提供一组包含价格的数据。 模型会扫描数据,查找汽车特征与其价格的关联性。 然后,我们会测试模型 - 我们会为模型提供一组熟悉的汽车特征,看模型预测已知价格的准确性如何。
我们会将数据拆分为单独的定型数据集和测试数据集,用于模型定型和测试。
-
选择“拆分数据split”模块并将其拖到试验画布,然后将其连接到最后一个“选择数据集中的列select-columns”模块的输出。[][]
-
单击“拆分数据split”模块将其选中。[] 找到“第一个输出数据集中的行的比例”(位于画布右侧的“属性”窗格中),将其设置为 0.75。 这样,我们将使用 75% 的数据进行模型定型,保留 25% 的数据用于测试(可在以后使用不同的百分比进行试验)。
将“拆分数据”模块的拆分比例设置为 0.75提示
更改“随机种子”参数可为训练和测试生成不同的随机样本。 此参数控制伪随机数生成器的种子。
-
运行试验。 运行试验时,“选择数据集中的列select-columns”和“拆分数据split”模块会将列定义传递到接下来要添加的模块。[][]
-
若要选择学习算法,请在画布左侧的模块控制板中展开“机器学习”类别,然后展开“初始化模型”。 此时将显示多个可用于初始化机器学习算法的模块类别。 对于本试验,请选择“回归”类别下的“线性回归linear-regression”模块,然后将其拖放到试验画布上。[] (也可以在控制板的“搜索”框中键入“线性回归”找到该模块。)
-
找到“训练模型train-model”模块并将其拖到试验画布。[] 将“线性回归linear-regression”模块的输出连接到“定型模型train-model”模块左侧的输入,将“拆分数据split”模块的定型数据输出(左端口)连接到“定型模型train-model”模块右侧的输入。[][][][]
将“定型模型”模块连接到“线性回归”和“拆分数据”模块 -
选择“训练模型train-model”模块,单击“属性”窗格中的“启动列选择器”,然后选择“价格”列。[] 这是模型要预测的值。
在列选择器中选择“价格”列,方法是将其从“可用列”列表移至“所选列”列表。
选择“定型模型”模块的“价格”列 -
运行试验。
我们现在获得了一个经过定型的回归模型,用来为新的汽车数据评分,以便进行价格预测。
运行以后,试验现在看起来应与上图类似
步骤 5:预测新汽车价格
使用 75% 的数据训练模型后,可以使用该模型为另外 25% 的数据评分,确定模型的运行情况。
-
找到“评分模型score-model”模块并将其拖放到试验画布上。[] 将“定型模型train-model”模块的输出连接到“评分模型score-model”的左侧输入端口。[][] 将“拆分数据split”模型的测试数据输出(右侧端口)连接到“评分模型score-model”[][]
将“评分模型”模块连接到“定型模型”和“拆分数据”模块 -
运行试验,查看“评分模型score-model”模块的输出(单击“评分模型score-model”的输出端口,然后选择“可视化”)。[][] 输出显示价格预测值,以及来自测试数据的已知值。
“评分模型”模块的输出 -
最后,我们对结果的质量进行测试。 选择“评估模型evaluate-model”模块并将其拖放到试验画布上,然后将“评分模型score-model”模块的输出连接到“评估模型evaluate-model”的左侧输入。[][][]
提示
之所以“评估模型evaluate-model”模块上有两个输入端口,是因为可将其用于并列比较两个模型。[] 可在以后向试验添加另一算法,并使用“评估模型evaluate-model”查看哪一个算法的结果更好。[]
-
运行试验。
若要查看“评估模型evaluate-model”模块的输出,请单击输出端口,然后选择“可视化”。[]
试验的评估结果
针对本例中的模型显示了以下统计信息:
- 平均绝对误差 (MAE):绝对误差的平均值( 误差 是指预测值与实际值之间的差异)。
- 均方根误差 (RMSE):对测试数据集所做预测的平均误差的平方根。
- 相对绝对误差:相对于实际值与所有实际值平均值之间的绝对差异的绝对误差平均值。
- 相对平方误差:相对于实际值与所有实际值平均值之间的平方差异的平方误差平均值。
- 决定系数:也称为 R 平方值,这是一个统计度量值,表示模型的数据拟合度。
每个误差统计值越小越好。 值越小,表示预测越接近实际值。 对于 决定系数,其值越接近 1 (1.0),预测就越精确。
最终试验
最终试验看起来应与下图类似:
最终试验
后续步骤
完成第一篇机器学习教程并设置试验后,可以继续改进模型,然后将其作为预测型 Web 服务进行部署。
-
通过反复尝试改进模型 - 例如,可以更改预测时使用的特征。 或者,可以修改线性回归算法的属性,或尝试完全不同的算法。 甚至可以同时在试验中添加多个机器学习算法,使用“评估模型evaluate-model”模块进行比较(两两相比)。[] 有关如何在单个试验中比较多个模型的示例,请参阅 Cortana Intelligence Gallery(Cortana Intelligence 库)中的 Compare Regressors(比较回归量)。
提示
若要复制试验的任何迭代,请使用页面底部的“另存为”按钮。 可以单击页面底部的“查看运行历史记录”来查看试验的所有迭代。 有关详细信息,请参阅 在 Azure 机器学习工作室中管理试验迭代。
- 将模型部署为预测型 Web 服务 - 如果对模型感到满意,可将其部署为 Web 服务,以便使用新数据预测汽车价格。 有关详细信息,请参阅部署 Azure 机器学习 Web 服务。