共计 7175 个字符,预计需要花费 18 分钟才能阅读完成。
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 pandas
python -m pip install pyarrow
具体代码和解释
import pandas as pd
from pandas.api.types import is_numeric_dtype
label_col = 'income'
true_label = '>50K'
# 读取_data.parquet
dataframe=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_line
vw = 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
点击获取相干文档~