Microsoft Azure Machine Learning Studio是微软弱小的机器学习平台,在设计器中,微软内置了15个场景案例,但网上仿佛没有对这15个案例深度刨析的剖析材料,所以我就打算写一个系列来实现。既然是深度刨析,就不再是简略的介绍操作,而是深刻每一个细节,宁愿适度具体扩大,也不简略扫过。

微软MVP实验室研究员

这次咱们刨析的案例是:应用Vowpal Wabbit模型进行二分类 - 成人支出预测。

准备常识

▍数据集

该数据集是美国人口年收入数据集,原始数据来源于1994年美国人口普查数据库。该数据集共32560条数据,15列。但不建议您下载,在前面的步骤中,咱们会探讨如何从Azure Machine Learning Studio的存储中取得该数据集。

咱们要预测的是新记录的可能的支出范畴,在这个样本集中,支出的范畴只有两个:>50K和<=50K,所以是典型的分类( Classification)问题。分类模型可用来预测离散值。当机器学习模型最终目标(模型输入)是布尔或肯定范畴的数时,例如判断一张图片是不是特定指标,后果是不是0或者1,或者输入是1-10之间的整数等等,这类需要则大多数能够通过分类问题来解决。典型的就是猜输赢。当咱们对预测的后果曾经有了明确的选项,就能够应用Classification计划。
下载地址:https://archive.ics.uci.edu/m...

▍Vowpal Wabbit数据格式

Vowpal Wabbit,简称VW,是一个功能强大的开源,在线(online)和外存学习(out-of-core machine learning)零碎,由微软研究院的John Langford及其共事创立。Azure ML 通过 Train VW 和 Score VW 模块对 VW 提供本机反对。能够应用它来训练大于 10 GB 的数据集,这通常是 Azure ML 中学习算法容许的下限。它反对许多学习算法,包含OLS回归(OLS regression),矩阵合成(matrix factorization),单层神经网络(single layer neural network),隐狄利克雷调配模型(Latent Dirichlet Allocation),上下文赌博机(Contextual Bandits)等VW的输出数据每行示意一个样本,每个样本的格局必须如下

label | feature1:value1 feature2:value2 ...

简略的说,每一条样本的第一个是标签(Label),前面是特色(Feature)。也就是每一条样本都是有标签样本(labeled)

▍Parquet 列式存储格局

Parquet 是 Hadoop 生态圈中支流的列式存储格局,最早是由 Twitter 和 Cloudera 合作开发,2015 年 5 月从 Apache 孵化器里毕业成为 Apache 顶级我的项目。有这样一句话流传:如果说 HDFS 是大数据时代文件系统的事实标准,Parquet 就是大数据时代存储格局的事实标准。Parquet 列式存储格局的压缩比很高,所以IO操作更小。Parquet 是与语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,可能与 Parquet 适配的查问引擎包含 Hive, Impala, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL等,计算框架包含 MapReduce, Spark, Cascading, Crunch, Scalding, Kite 等,数据模型包含 Avro, Thrift, Protocol Buffer, POJOs 等。所以Parquet就是一个数据存储,提供引擎疾速查问数据的格局。深入分析

这个案例一共九个工作节点,咱们一一剖析每一个节点中值得关注的细节和外围信息。

▍Adult Census Income Binary Classification dataset节点

这个节点是数据的输出,外围有三个信息Datastore name:azureml_globaldatasets是一个链接,点击能够跳转到数据存储的地位Relative path:形容在Datastore中以后文件的地位,默认是GenericCSV/Adult_Census_Income_Binary_Classification_dataset点击azureml_globaldatasets将跳转到Datastore浏览器,您能够在这个浏览器下察看到您存储的数据。大抵的界面如下

在左侧咱们最须要关注的文件是_data.parquet,该文件是Parquet 列式存储格式文件。建议您下载,在后续的步骤中,咱们将操作和剖析这个文件。

▍Select Columns in Dataset节点

这个节点是对数据列(特色)的抉择要害信息是察看抉择的列

▍Execute Python Script节点

这个节点是将Parquet 列式存储格式文件转为VW(Vowpal Wabbit),该节点外围是一段Python代码,咱们来具体了解和剖析这些代码(在这之前确保您曾经下载了_data.parquet和您曾经有了Python开发环境)

azureml_main函数是Azure ML必须的入口函数。
其余代码的外围就是装载parquet,设置标签和特色,生成vw格局。

为了更好的帮忙您了解这些代码,我从新写了一段脚本,确保您能够在本地加载_data.parquet,并残缺的了解整个过程。

先确保您装置了如下组件

python -m pip install pandaspython -m pip install pyarrow

具体代码和解释

import pandas as pdfrom pandas.api.types import is_numeric_dtypelabel_col = 'income'true_label = '>50K'# 读取_data.parquetdataframe=pd.read_parquet('_data.parquet')# 输入每一列的数据类型for col in dataframe:    print(col)print('----------------------------------')# 特色列的汇合(不蕴含income)feature_cols = [col for col in dataframe.columns if col != label_col]for col in dataframe:    print(col)print('----------------------------------')# 所有数字列numeric_cols = [col for col in dataframe.columns if is_numeric_dtype(col)]for col in dataframe:    print(str(col) +'type is :' + str(dataframe[col].dtype))print('----------------------------------')def parse_row(row):        line = []        # vw样本的第一个元素,定义该样本的权重,这里因为就两个状态,所以定义1和-1        line.append(f"{1 if row[label_col] == true_label else -1} |")        # 增加样本的后续值        for col in feature_cols:            if col in numeric_cols:                # 具备数字的值,格局为列名:值                line.append(f"{col}:{row[col]}")            else:                # 非数字的值,格局为列值                line.append("".join((str(row[col])).split()).replace("|", "").replace(":", ""))        print(line)        vw_line = " ".join(line)        return vw_linevw = dataframe.apply(parse_row, axis=1).to_frame()

输入样例
['-1 | 39 77516 Bachelors 13 Never-married Not-in-family White Male 2174 0 40']

['1 | 31 84154 Some-college 10 Married-civ-spouse Husband White Male 0 0 38']

▍Split Data节点

这个节点比较简单,按即将数据集分为50%和50%。

▍Train Vowpal Wabbit Model节点

这个节点就是将之前咱们生成的vw数据集进行训练建模,须要关注的信息有

  • VW arguments(VW 参数):这个是Vowpal Wabbit可执行文件的命令行参数,loss_function参数开关可选有:classic、expectile、hinge、logistic、poisson、quantile、squared,默认时squared。

这里抉择的是

--loss_function

  • logisticlogistic回归由Cox在1958年提出,它的名字尽管叫回归,但其实这是一种二分类算法,并且是一种线性模型。因为是线性模型,因而在预测时计算简略,在某些大规模分类问题,如广告点击率预估(CTR)上失去了胜利的利用。如果你的数据规模微小,而且要求预测速度十分快,则非线性核的SVM、神经网络等非线性模型曾经无奈应用,此时logistic回归是你为数不多的抉择。Specify file type(指定文件类型):VW示意Vowpal Wabbit应用的外部格局,SVMLight是其余一些机器学习工具应用的一种格局。显然咱们应该抉择VW。
  • Output readable model file(输入可读模型):抉择True,文件会保留在与输出文件雷同的存储帐户和容器中
  • Output inverted hash file(输入反转哈希):抉择True,文件会保留在与输出文件雷同的存储帐户和容器中

▍Score Vowpal Wabbit Model节点

Score Vowpal Wabbit Model和 Train Vowpal Wabbit Model差不多,差别的参数是VW arguments(VW 参数):link开关的参数可选有glf1、identity、logistic、poisson,默认是identity。这里抉择的是--link logistic

▍Execute Python Script节点

这个节点也是一段Python脚本,目标是增加一个评估列,这段脚本比较简单要害代码

# 阈值设定,通过和后果概率比拟,失去标签threshold = 0.5# 二分的后果标签binary_class_scored_col_name = "Binary Class Scored Labels"# 二分的评估概率,这个值会被反映为标签binary_class_scored_prob_col_name = "Binary Class Scored Probabilities"output = dataframe.rename(columns={"Results": binary_class_scored_prob_col_name})output[binary_class_scored_col_name] = output[binary_class_scored_prob_col_name].apply(        lambda x: 1 if x >= threshold else -1)

▍Edit Metadata节点

Edit Metadata的外围是定义列的元数据,其有两个重要作用

  • 从新定义列的数据类型,但要留神的是数据集中的值和数据类型实际上并未更改;更改的是机器学习外部的元数据,它通知上游组件如何应用该列。比方把一个数字列从新定义为分类值,通知机器学习将从新对待这个数据列。
  • 批示哪一列蕴含类标签,或者要分类或预测的值。这个性能比拟重要,能够帮忙机器学习理解哪一列的的训练含意。

所以这次咱们须要对Labels做定义,不扭转数据类型,但将训练含意定义为Labels类型。这个形容有点绕,咱们应该这么说:将一个名为Labels的列定义为标签(Labels)类型

这个元数据的定义,就是为了下一个Evaluate Model做筹备,通知Evaluate Model晓得哪一个列是须要评估的标签。

▍Evaluate Model节点

评估模型返回的指标取决于您正在评估的模型类型:

  • 分类模型
  • 回归模型
  • 聚类分析模型

在这个节点咱们次要关怀在训练实现后输入的图表

ROC 曲线(ROC curve):也称“受试者工作特色曲线”,或者感受性曲线。ROC曲线次要是用于X对Y的预测准确率状况。最后ROC曲线是使用在军事上,当初更多利用在医学畛域,判断某种因素对于某种疾病的诊断是否有诊断价值。


ROC曲线图是反映敏感性与特异性之间关系的曲线。咱们个别这么看:横坐标X轴为 1 – 特异性,也称为假阳性率/假正率(误报率),X轴越靠近零准确率越高;纵坐标Y轴称为敏感度,也称为真阳性率/真正率(敏感度),Y轴越大代表准确率越好。

依据曲线地位,把整个图划分成了两局部,曲线下方局部的面积被称为AUC(Area Under Curve),用来示意预测准确性,AUC值越高,也就是曲线下方面积越大,阐明预测准确率越高。曲线越靠近左上角(X越小,Y越大),预测准确率越高。也就是说AUC越靠近1.0,检测办法真实性越高,小于等于0.5时,则真实性最低,无利用价值。

所以能够看出ROC曲线非常适合形容个二分问题,行将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会呈现四种状况。如果一个实例是正类并且也 被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。

精度-召回曲线(Precision-recall curve):召回率是指正确预测为正的占全副理论为正的比例,召回率是针对原样本而言的,其含意是在理论为正的样本中被预测为正样本的概率。高的召回率意味着可能会有更多的误检,然而会尽力找到每一个应该被找到的对象。

精确度 - 召回曲线显示了不同阈值时精度和召回之间的衡量。曲线下的高区域代表高召回率和高精度,其中高精度与低假正率无关,高召回率与低假负率无关。两者的高分都表明分类器正在返回精确的后果(高精度),并且返回所有正样本的大部分(高召回率)。

因为精度和召回的矛盾,所以咱们引入了F1分数(F1 Score),用来掂量二分类模型精确度。它同时兼顾了分类模型的准确率和召回率。F1分数能够看作是模型准确率和召回率的一种和谐均匀,它的最大值是1,最小值是0。

晋升曲线(Lift curve):与ROC曲线不同的是lift思考分类器的准确性,也就是应用分类器取得的正类数量和不应用分类器随机获取正类数量的比例。晋升曲线是评估一个预测模型是否无效的一个度量;这个比值由使用和不使用这个模型所得来的后果计算而来。

举例来说就是:一个公司的客群有10000个,随着业务的变动,其中有500个客户的资信开始变差。如果给1000个客户提供授信也就是说,可能会遇到50个客户因为资信问题,将遇到危险。然而如果使用模型对坏客户加以预测,只抉择模型分数最高的1000个客户授信,如果这1000个客户体现进去最终平安有危险的只有8户,阐明模型在其中是起到作用的,此时的LIFT就是大于1的。如果反过来最终证实呈现危险的客户超过或等于50个,LIFT小于等于1,那么从成果上来看这个模型用了还不如不必。LIFT就是这样一个指标,能够掂量应用这个模型比随机抉择对坏样本的预测能力晋升了多少倍。

通常计算LIFT的时候会把模型的最终得分依照从低到高(危险概率从高到低)排序并等频分为10组,计算分数最低的一组对应的累计坏样本占比/累计总样本占比就等于LIFT值了。


到这里,Binary Classification using Vowpal Wabbit Model - Adult Income Prediction案例的剖析咱们实现了,在这个过程中,咱们具体的理解到各个节点的外围信息和相干的概念。从数据源、数据处理、Python脚本、元数据定义和模型品质报告。也同时接触到了大量的机器学习概念,本篇十分值得举荐作为Microsoft Azure Machine Learning Studio和机器学习的入门和深刻读物。

在这之后,我将持续编写其余Microsoft Azure Machine Learning Studio案例。每一篇案例都能够独立浏览,因而有些概念会反复呈现在每一篇中。

微软最有价值专家(MVP)

微软最有价值专家是微软公司授予第三方技术专业人士的一个寰球奖项。29年来,世界各地的技术社区领导者,因其在线上和线下的技术社区中分享专业知识和教训而取得此奖项。

MVP是通过严格筛选的专家团队,他们代表着技术最精湛且最具智慧的人,是对社区投入极大的激情并乐于助人的专家。MVP致力于通过演讲、论坛问答、创立网站、撰写博客、分享视频、开源我的项目、组织会议等形式来帮忙别人,并最大水平地帮忙微软技术社区用户应用 Microsoft 技术。

更多详情请登录官方网站:https://mvp.microsoft.com/zh-cn

理解如何应用 Azure 机器学习训练和部署模型以及治理 ML 生命周期 (MLOps)。教程、代码示例、API 参考和其余资源。

长按辨认二维码关注微软开发者MSDN                         

点击获取相干文档~