无需代码经验的机器学习第二天 - 使用设计器训练模型
分类: Azure机器学习 ◆ 标签: #Azure #人工智能 #机器学习 #设计器 #JupyterBook ◆ 发布于: 2023-06-12 17:25:33

我们在前一天学习了使用Azure Machine Learning Studio
的Auto ML任务
创建Azure Auto ML
模型训练,在这个过程中,我们无需任何代码经验,只需要简单的界面点击就可以训练出需要的模型,虽然Azure AutoML
非常容易使用,但是我们也需要注意到Azure Auto ML
的限制,也就是Azure Auto ML
仅仅使用三种模型的训练:分类模型
, 回归模型
, 基于时序预测模型
, 如果你的应用场景超出了这三种模型仅仅依靠Auto ML
是无法满足实际的需求的, 除了直接使用Azure Auto ML任务
你还可以使用Azure Machine Learning Studio
推出的设计器
来创建自己的AML pipeline
来完成机器学习的其他模型的训练,同样使用这个工具你仍然无需任何的代码经验,接下来在本节,我们将使用一个例子使用设计器
来训练一个回归模型,借此抛砖引玉。
开始之前
在开始本章之前,你需要:
- 一个Azure订阅
- 创建一个
Azure Machine Learning
的workspace - 启动
Azure Machine Learning studio
Azure Machine Learning Pipeline
我们在学习微软的技术的时候,有个概念叫管道(Pipeline)
, 在微软的很多产品中都有提及,例如我们在学习ASP.net core
这个框架的时候使用过pipeline
的概念,在使用Azure的Data Factory
的时候也用过pipeline
的概念,如果你熟悉Azure Devops
那么也会提到pipeline
的概念,可见微软的技术和工具对于pipeline
这个概念和设计方式是非常的请求独钟,就像大家在学习面向对象设计以及Java
的时候,Java
中提及最多的一个概念就是设计模式
, 方法论
是对于技术的一个总结和升华,建议学习技术的朋友应该更认真的思考这个问题。
微软技术中使用pipeline
这个概念来表示很多业务中的一个可以复用的流程,我们的designer
是为无代码设计的,虽然不需要编写代码,但是在处理一项业务的时候,任然需要处理各种业务逻辑,需要判断,循环,跳转等等标准的流程,同时我们写代码时需要用代码的形式将所有的逻辑描述出来,并且以类,函数等各种形式进行复用,那么pipeline
就是对代码的更高一层次的复用,使用pipeline
来设计业务中的各种逻辑,并且保存这个pipeline, 在需要的时候再调用该pipeline
, 这就是它的主要租用。
Azure Machine Learning Designer 使用Azure Machine Learning Pipeline来达到这个效果,实际上designer大部分的工作都在设计pipeline
。
训练模型
通过前面的铺垫,相信大家已经对于基本的概念有了一些了解,同时如果还不了解Azure机器学习的基本概念和基本工具,建议可以参考我们前面的文章,包括使用Python SDK
以及jupyter
来对于机器学习的基本概念如何和Azure进行集成有一个基本的了解,然后再来使用可视化的工具,会更加事半功倍。
创建Pipeline
进入stuido
之后,选择左侧的菜单栏,然后找到设计器
, 选择设计器
之后,即可打开设计器
的界面,如下图:
点击那个大大的'+' 号之后,即创建了一个新的pipeline, 点击标题栏,将pipeline
的标题改为汽车价格预测
, 同时点击旁边的设置
按钮,可以打开该pipeline
的设置界面:
设计默认的计算目标
打开设计器的设置面板之后,可以看到最重要的就是要设置整个pipeline默认运行的计算集群:
点击选择计算目标
, 我们可以选择预定义的计算集群配置,选择新建之后,输入名字,会使用默认配置创建一个集群,如果你不想使用默认配置,也可以事先创建好计算集群,然后在现有集群里选择:
虽然等待创建完成,创建需要一定的时间,可以稍微等一等,点击刷新,等新创建的集群可以使用了,然后保存。
至此我们已经准备好了需要的pipeline
的初步设置,也选择好了,默认用于计算的计算集群,接下来我们要开始导入数据了。
导入并处理数据
我们本节使用现有的开源数据集,同时需要对该数据集需要进行如下几个步骤的处理:
- 选择用于训练的数据列
- 清洗缺失的数据
- 拆分数据成两个部分,一个部分用于训练模型,另外一个部分用于模型打分
选择用于训练的数据
这里说一下设计器的基本使用,设计器左边按照不同的功能罗列了很多易于使用的模块,例如数据处理,模型训练等等,你完全可以按照模块的不同划分,一个一个的浏览模块,你也可以通过上面的搜索栏进行模块的搜索,如下图:
, 可以看到目前设计器支持多达96个模块用于机器学习。
我们在本章中要使用开源数据集, 因此你可以找到模块分类Sample Datasets
, 并且找到Automobile price data(raw)
, 然后将该数据模块拖到设计器的画布中,或者你可以直接通过搜索来找到该模块,并拖到画布中
您可以使用输出功能大致查看一下该数据集的基本情况:
选择用于训练的数据列
通过上述介绍的查找模块的功能,找到模块Select Columns in Dataset
并拖到画布中,同时将两个模块按照图中所示链接起来:
选择模块,出现模块设置属性,然后选择编辑列
在出现的对话框中,按照下图设置:
在选择列的对话框中,按照规则来选择,首选包含所有列,然后从所有列中移除列normalized-losses
, 点击保存。
添加注释
清洗数据
我们上一步已经将需要的数据列选择完毕了,那么我们这一步需要处理假如某一列的数据缺失,训练中该如何处理这种情况?
使用搜索的功能找到模块Clean Missing Data
, 并拖到画布中,将上一步的模块链接到该模块,并如上一步打开设置的界面, 并选择编辑列
, 如上一步,选择所有列,但是这一步我们无需排除任何列,因为在这里我们需要所有的列的数据,保存子厚,回到设置界面,如下图:
另外我们需要设置Cleaning model
, 选择Remove entire row
, 表示当某行中,如果有某一列的数据缺失,我们就会移除整行数据。
这样我们完成了数据清洗的动作了。
拆分数据
目前通过选择需要的数据列,并且清洗掉了缺失的数据,我们现在已经有了可以用于训练的数据,我们任然需要再进一步的处理,需要将准备好的数据,拆分为两个部分,一部分用于完成模型训练,另外一部分用于模型的评估。
通过模块搜索找到模块Split Data
, 并将它拖放到画布中,点击该模块,显示属性配置,进行如下的配置:
需要注意的是: Splitting mode
要选择Split rows
, Fraction of rows in the first output dataset
中选择0.7
, 表示70%的数据用于模型训练,剩下30%的数据,我们保留,后面会用这部分的数据对模型进行打分。
至此我们终于完成了数据预处理的部分,到目前,完成的图如下:
大家一定要注意的是链接每个模块的时候,每个连接线的链接是需要注意的,因为可以观察到Clean missing data
的输出是由两个,左边的表示清洗之后的数据,右边表示脏数据,同时Split Data
也有两个输出,左边的表示70%, 右边的表示30%
模型训练
我们现在正是开始模型训练了。
设置训练步骤
从模块搜索框里搜索出Train model
,模块并拖放到画布中,并将split data
和该模块链接起来,这里需要注意该模块有两个数据,数据输出要链接到右边的输入,如下图:
然后选择该Train Model
, 出现设置界面,再设置界面编辑列
选择需要预测的数据列,我们这里是预测价格,因此选择price
选择算法
我们已经将数据和训练模块链接了,但是还没有为该训练任务选择必要的算法,因此在模块搜索里搜索:Linear
, 选择Linear Regression
, 并拖放到画布中
同时将该模块的输出和train model
的左侧输入相链接,支持我们已经完成了为训练任务选择算法了。
给模型打分
在模块搜索里搜索Score
, 然后选择模块Score Model
, 然后拖放至画布中,将train model
的输出和该模块的左侧输入链接,同时将Split Data
模块的右侧输出和该模块的右侧输入相链接:
评估模型
搜索并拖放模块Evaluate Model
, 同时将Score Model
输出和它相连接
最后的完成图如下:
大家可以对比一下自己的设计,特别需要注意连接线的左右连接不能弄错。
训练模型
至此我们终于完成了pipeline
的设计,我们前面学习过使用设计器主要的工作就是设计pipeline
, 如果我们已经完成了,设计,下一步我们需要将它提交为一个experiment
, 然后开始有experiment
管理run
, 用于模型的训练,打分,评估等动作。
因此我们在画布上测点击提交
在新出现的对话框中,选择新创建一个Experiment
提交后,Azure即开始训练模型,您可以通过左侧菜单实验
, 来监控或者观察运行的基本情况。
运行结果评估
训练结束后,在图形里选择Score Model
, 点击右键,选择可视化,即可查看结果:
如果需要查看评估结果,在图像里选择Evaluate Model
, 然后选择可视化,查看结果:
至此我们完成了第一次通过设计器
来完成的模型训练,同样是无需任何代码,设计器可以自有选择支持的算法,支持更多的应用场景,下一节我们将学习如何通过设计器来部署已经训练好的模型。