微软机器学习Machine Learning Studio学习笔记

机器学习可是现在很热门的技术,作为一个编程小白,我也想要赶上赶一下时髦,掌握一点机器学习的知识。刚好Azure有这么一项机器学习的服务:Machine Learning Studio,可以快速的建立机器学习的服务平台,嗯,还提供了调用机器学习的Sample Code,作为一个初学者也可以轻松驾驭。

这里记录一下第一次学习使用Machine Learning Studio来实现一个统计分类模型(是否有糖尿病)的过程。

由于目前Machine Learning Studio在Global Azure提供,因此首先大家需要拥有一个Global Azure的账号,可以申请免费的测试帐号来用。

有了账号以后,首先要创建一个Machine Learning Studio 的workspace

在创建资源的界面里搜索Machine Learning,选择Machine Learning Studio Workspace进行创建。

按照提示输入名称,所属资源组这些参数,位置的话我们选择东南亚就好。为了节约成本,定价层选择免费的就好了,足够我们测试使用了。

很快这个工作区就创建好了,点击右侧的:启动机器学习工作室,开始我们的机器学习探索之旅。

启动机器学习工作室会跳转到一个新的页面,链接是:https://asiasoutheast.studio.azureml.net/,这里是机器学习工作室的正式网址,接下来大部分工作都会在这里进行。

进入机器学习工作室,就会看到以下界面,当然,我们还一个模型都没有创建,所以这里是空白的。

熟悉Azure界面风格的同学会发现这个界面是之前ASM的风格,说明机器学习的服务确实是很早就开始研发了。

在开始设计机器学习模型并训练之前,我们首先要做的是准备数据,这里是用了微软提供的测试数据,可以在这里下载diabetes.csv(https://lyqblog.blob.core.chinacloudapi.cn/lyqblog/diabetes.csv)和doctors.csv(https://lyqblog.blob.core.chinacloudapi.cn/lyqblog/doctors.csv)。点击左侧的Datasets,然后可以在左下方看到 “+NEW” 按钮,点击之,开始准备数据。

开始添加数据集,我们选择上传之前准备好的2个数据文件,按提示操作就可以了。

上传了数据集以后,我们来创建第一个实验experiment,点击左侧菜单的EXPERIMENTS,再点击左下方的“+NEW” 按钮,我们会看到Machine Learning Studio其实提供了很多模板,大家可以根据自己的实际需要选择一个模板来修改,而不需要从头来配置模型。不过这次我们只要创建一个空白的实验模板Blank Experiment就行了。

创建完成后如下图所示,我们可以直接修改实验模板的名字。

在左侧菜单的第一项就是Saved Datasets,点开后在My Datasets里可以看到刚才上传的两个数据集,把它们拖拽到右侧的设计区域,如下图所示。

对的,就像你想的那样,在Machine Learning Studio里,只要鼠标点点,就可以实现机器学习的设计了。而且可以很方便的把数据进行可视化操作。我们来试一下,在设计区域的数据集里,随便哪个都可以,右键点击下方的输出口,选择Visualize,我们就可以看到可视化的数据了。

这个就是刚才上传的diabetes文件可视化结果,可以看到数据集包含了病人ID,血压,血糖,胰岛素,BMI,年龄等参数,随便选择一个看下数据,在右侧显示,最大值,最小值,平均数,中位数还有偏差等,由于是测试数据集,可以看到Missing Values是0,所以数据很完整。

我们之前导入了两个数据集,diabetes和doctors,现在把这两个数据集整合起来,在Data Transformation下的Manipulation下找到Join Data,把它拖拽到设计区,将两个数据集的输出端分别连接到Join Data的两个输入接口上。

在右侧的属性栏里设置整合数据的参数,毫无疑问,病人的ID,PatientID 参数是结合两个数据集唯一的参数,因此在属性栏的Join keycolumns for L 和 Join key columns for R 下点击 Launch Column selector 按钮,打开选择界面,并将PatientID加入到右侧的SELECTED COLUMNS中

完成所有设置后在页面的最下方找到SAVE和RUN,先把当前的实验模型保存一下,然后执行,等执行好以后,就可以查看整合以后的数据。

准备好数据以后,我们先对数据做一些处理,首先我们添加一个数学运算,在StatisticalFunctions里找到Apply Math Operation,将它加到右侧,将Join Data的输出作为数学计算的输入。

在这里我们对Age取自然对数,因为之前在可视化数据时发现年龄这一项太过于偏向年轻人,因此通过自然对数运算将这项参考值变得平缓一些。Apply Math Operation的参数设置如下图所示:选择计算方式为自然对数ln,在Selected columns中选择Age,Output mode选择为:Append。将运算结果附加在原数据集后面

配置完成后记得保存和执行。然后就可以进行下一步工作,对数据进行规范化,在这个实验里,对于不同的数据采用不同的规范方法,因此需要添加2个Normalize Data操作。

在左侧的菜单里,Data Transformation下的Scale and Reduce下找到Normalize Data 项,把它拖拽到右侧,并和Apply Math Operation的输出端连接起来,如下图所示:

在第一个Normalize Data的参数设置里按下图设置:Transformation method 设置为 ZScore ,Selected columns里选择PlasmaGlucose、DiastolicBloodPressure、TriceptsThickness、SerumInsuin、BMI,这几项值的方差都很大,为了便于模型处理数据,引入Z-Score作为方差的单位。

在第二个Normalize Data的参数设置里按下图设置:Transformation method 设置为 MinMax,Selected columns里选择Pregnancies、DiabetesPedigree、Age、Ln(Age),将这几个因素的值规范到0-1之间。

数据规范完成后,需要将用不到的数据剔除,当然我们不需要把那些数据删除掉(当然这也是一个办法),通过Edit Metadata可以对数据进行指定的处理,在左侧的Data Transformation下的Manipulation下找到Edit Metadata,拖拽到右侧,并将Normalize Data的输入作为Edit Metadata的输入,如下图所示:

设置Edit Metadata的参数如下图所示:Selected columns选择为:PatientID 和 Physician ,将Fields设置为:Clear feature。很明显,病人的号码和医生的名字对病人是否得糖尿病没有任何关联。

这样我们就完成了数据规范化的工作,接下来可以进行机器学习的模型训练了。要训练模型的话,我们不能把所有的数据都作为训练数据,这样就没有对照数据了,所以首先要把数据拆分成2组,然后才可以添加训练模型,如下图所示:在左边菜单的Data Transformation下的Sample and Split下找到 Split Data选项。在Machine Learning下的Train里找到Train Model,分别拖拽到右侧,并将Edit Metadata的输出作为Split Data的输入,将Split Data左边的输出(训练数据)作为Train Moodel的数据输入(右侧接口)。

并在Split Data的参数设置里按下图进行配置:Splitting mode设置为Split Rows,按行进行分割。设置70%的数据作为训练数据,并设置一个随机数种子。

Train Model的设置就很简单了,因为我们是要预测糖尿病,所以Selected columns设置为Diabetic就可以了。

但是Train Model本身并不知道用什么算法来进行学习,所以需要选择一个算法,在左侧的Machine Learning下的Classifacation下,找到Two-Class Logistic Regression,逻辑回归是一种比较常用的受监督的学习方法,在这里因为对得了糖尿病的判断是0或1的判断,所以采用Two-ClassLogistic Regression方法。连接如下图所示:

在右侧设置算法的参数,基本都保持不变就好了,只需要赋予算法一个随机数种子。

加入了算法后需要对学习结果评分,并生成一个最终的模型,因此加入Score Model(在Machine Learning下的Score里)和Evaluate Model(在Machine Learning下的Evaluate里)。还记得之前Split Data里指定的70%的数据进Train Model,其余的数据需要进入Score Model进行评价,所以将Split Data的右侧的输出连接到Score Model右侧的输入,将Train Model的输出连接到Score Model的左侧输入。然后将Score Model连接到Evaluate Model,如下图所示:

在到这里我们就完成了整合实验模型的设计,先保存下模型,然后选择Run,来运行整个模型。等待模型运行完成后,我们可以在Evaluate Model的输出接口选择Visualize来查看学习的结果,如下图所示:

在这里解释一下评价结果的几个主要参数:

Threshold 阀值,按照scoredprobabilities的值和阀值比较添加标签,小于阀值为Negative,高于阀值为Positive,现在设置为50

AUC,ROC曲线图线下面积,表示分类的准确性,0.5为完全随机,1为完全分类,现在得分0.861只能说还可以

Ture Positive 大于阀值的预测准确数

Fales Positive 大于阀值的预测错误数

Ture Negative小于阀值的预测准确数

Fales Negative 小于阀值的预测错误数

Accuracy 预测准确率,越接近1越好

Precision 预测精度,预测的分散程度,越接近1越好

Recall 召回数,正确解中TurePositive的情况,越接近1越好

F1 Score,表现精度和召回值的综合数值,,越接近1越好

综合来看采用逻辑回归的训练效果一般,所以我们来换一种算法看看结果会不会好一些:找到Two-ClassBoosted Decision Tree,决策树算法。如果配置都正确的话,一般决策树算法会是最简单的实现方法。同样建立一个新的Train Model,引入决策树算法,加入Score Model,如下图所示,记得设置算法的参数,主要是随机数种子。最后保存并运行。

同样在在Evaluate Model的输出接口选择Visualize来查看学习的结果,红色是决策树算法的结果,很明显比逻辑回归的结果好很多,预测准确率有0.99,可以说很完美了。

然后我们就可以删除Two-Class Logistic Regression算法以及对应的Train Model和Score Model。只保留Two-Class Boosted Decision Tree那一段。所以可以看到在MachineLearning Studio里微软已经把大量的学习算法做好了,我们只要引入需要学习分析的数据集,选择相应的算法并对参数进行调整,就可以实现整个机器学习的过程了,可以说对于像我这样的小白用户十分友好了。

当然,实现了预测模型并没什么用,因为我们不知道要怎么才能去使用这个模型,在MachineLearning Studio很贴心的提供了一个服务,可以将我们生成的这个模型发布为一个Web服务

在实验的页面下方,我么你可以看到一个按钮:Setup Web Service,点击一下,他会生成一个新的experiments。

进入新生成的experiments,我们可以将原来的数据集删掉,换上 Enter Data Manually这个组件

在Enter Data Manually的参数设置里,我们可以设置输入的数据,在这里我输入了以下几个数据,当然我们也可以随便输入一些数字,只要符合格式就可以。

PatientID,Pregnancies,PlasmaGlucose,DiastolicBloodPressure,TricepsThickness,SerumInsulin,BMI,DiabetesPedigree,Age

在Score Model下添加一个新的组件:Apply SQL Transformation。用它来选择输出那些结果。

在Apply SQL Transformation的参数SQL Query Script设置里,输入以下语句,输出这几个值。

SELECT PatientID,

Physician,

[Scored Labels] ASDiabetesPrediction,

[Scored Probabilities] ASProbability

FROM t1;

做完这一切后,我们先保存,并执行一遍这个实验模型,然后就可以选择Deploy Web Service了。

创建Web服务,会将我们引导到一个新的网站:https://services.azureml.net

按照提示,输入Web服务的名称,选择部署的存储账号,以及相应的服务计划,然后点击Deploy。过了一会你就会看到服务部署完成了。

部署完成后,点击页面上的Configure,然后可以将Sample Data Enable设置为Yes,这样Web Service就会将刚才在Enter Data Manually里输入的那几个数据下载到Web Service,我们可以用这几个数据来进行测试。

好,我们可以忽略掉上面这步,来看最重要的部分,点击页面上的Consume连接,我们可以看到给出了几个重要的内容,连接字串:Request-Response 以及 2个 Key。在代码中,我们需要用这几个参数来连接机器学习Web服务。

最后,大家把页面往下翻,微软已经为大家提供几个标准的Sample Code,包括 C#,Python和R,把代码复制出来,用上面的连接串和Key替换掉Sample Code中对应的内容,我们就可以在自己的应用中随意调用机器学习的成果了。

最后打个广告,这本机器学习实战手册,从怎么申请测试帐号开始到在MachineLearning Studio里怎么创建模型,一步步怎么设置,每一项的概念是什么都给写了,可以说是非常好的入门学习材料了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180807G0A4BN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券