创建 R 模型
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用自定义资源创建 R 模型
类别: 数据转换/操作
模块概述
本文介绍如何使用 机器学习 Studio (经典) 中的"创建 R 模型"模块,从 R 脚本创建未训练的模型。
可以将模型基于任何包含在 R 包中的学习器,机器学习环境。
创建模型后,可以使用"训练模型"在数据集上训练模型,就像在数据集中训练任何其他机器学习。 训练的模型可以传递给评分模型,以便使用该模型进行预测。 然后就可以保存训练后的模型,并且可以将评分工作流作为 Web 服务发布。
除了使用"创建 R 模型"保存和重新使用自定义 R 模块外,还可以使用 R 创建自己的建模和数据管理过程的实现,将压缩格式的文件上传到工作区,然后将包注册为自定义模块。 有关详细信息,请参阅 自定义 R 模块。
如何配置创建 R 模型
使用此模块需要具备 R 的中级或专家知识。该模块支持使用已安装在 机器学习 中的 R 包中包含的任何学习器。
此示例 来自 Azure AI 库使用 常用包实现双类 Naïve Bayes e1070
分类器:+ 创建 R 模型。 建议将示例复制到工作区,然后继续操作。
在" 创建R 模型"的"属性"窗格中,提供以下脚本:
示例实验还包括执行 Python 脚本 模块,该模块用于绘制用于模型评估的图形。 此模块在发布到 Web 服务时是可选的,但在开发试验时很有用。
- 若要查看 Python 脚本中的图表,请右键单击 Python 模块,选择 "Python 设备",然后选择"可视化 "。
- 若要仅查看模型指标,请右键单击 Python 模块,选择 "Python 数据集",然后选择"可视化 "。
有关可选 Python 模块中的代码,请参阅 用于模型评估的 Python 模块。
培训脚本
以下示例演示了在训练程序 R 脚本中 可能使用的代码类型。
此脚本加载 R 包、使用包中的学习器创建模型,以及使用创建 R 模型中提供的预定义常量和函数配置功能和标签 列。
library(e1071)
features <- get.feature.columns(dataset)
labels <- as.factor(get.label.column(dataset))
train.data <- data.frame(features, labels)
feature.names <- get.feature.column.names(dataset)
names(train.data) <- c(feature.names, "Class")
model <- naiveBayes(Class ~ ., train.data)
第一行加载 R 包 e1071,其中包含我们想要使用的 Naïve Bayes 分类器算法。 由于这是预安装在 机器学习 包之一,因此无需下载或安装包。
接下来的行从数据集获取特征列和标签列,然后将它们合并到名为 的新 R 数据帧中
train.data
:features <- get.feature.columns(dataset) labels <- as.factor(get.label.column(dataset)) train.data <- data.frame(features, labels) feature.names <- get.feature.column.names(dataset)
请注意使用这些预定义函数:
组合数据集中的名称指定为
train.data
中列的名称,并且为Class
标签列创建临时名称。names(train.data) <- c(feature.names, "Class")
代码的最后一行将 Naïve Bayes 分类器算法定义为变量的函数 (特征) 和结果 (数据) 标签
train.data
。model <- naiveBayes(Class ~ ., train.data)
在整个模型创建、训练和评分脚本中,必须使用变量名称
model
。
评分脚本
下面的代码演示了在 Scorer R 脚本中提供的 R 代码类型。
library(e1071)
probabilities <- predict(model, dataset, type="raw")[,2]
classes <- as.factor(as.numeric(probabilities >= 0.5))
scores <- data.frame(classes, probabilities)
第一行是加载程序包。
第二行使用训练脚本中的训练模型(由所需的变量名称 指定)计算评分数据集的预测概率
model
。第三行是在分配预测的类标签时对概率应用 0.5 的阈值。
最后一行是将类标签和概率组合成输出数据框架
scores
。
可选的 Python 评估脚本
示例实验包括Azure AI 库 Python 脚本,该脚本用于生成用于模型评估的指标和图表。
def azureml_main(dataframe):
import matplotlib
matplotlib.use("agg")
from sklearn.metrics import accuracy_score, precision_score, recall_score, roc_auc_score, roc_curve
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
scores = dataframe.ix[:, ("Class", "classes", "probabilities")]
ytrue = scores["Class"]
ypred = np.array([float(val) for val in scores["classes"]])
probabilities = scores["probabilities"]
accuracy, precision, recall, auc = \
accuracy_score(ytrue, ypred),\
precision_score(ytrue, ypred),\
recall_score(ytrue, ypred),\
roc_auc_score(ytrue, probabilities)
metrics = pd.DataFrame();
metrics["Metric"] = ["Accuracy", "Precision", "Recall", "AUC"];
metrics["Value"] = [accuracy, precision, recall, auc]
# Plot ROC Curve
fpr, tpr, thresholds = roc_curve(ytrue, probabilities)
fig = plt.figure()
axis = fig.gca()
axis.plot(fpr, tpr, linewidth=8)
axis.grid("on")
axis.set_xlabel("False positive rate")
axis.set_ylabel("True positive rate")
axis.set_title("ROC Curve")
fig.savefig("roc.png")
return metrics,
将自定义 R 模型工作流发布为 Web 服务
运行试验后,可以将整个试验发布为 Web 服务。
有关如何从工作室创建 Web 服务的更新说明 (经典) ,请参阅演练步骤 5:部署 机器学习 Web 服务
默认情况下,Web 服务根据要提供的训练数据来预计所有输入列,其中包括标签列。 可以在输入数据源和评分模型模块之间添加"选择数据集中的列"实例,以排除尝试预测的标签。
技术说明
" 创建 R 模型" 模块仅支持使用 CRAN R。 不能选择其他 R 版本,也不能使用 Microsoft R Open。
该模型将在首次运行模块后进行缓存,除非输入脚本中出现更改,否则,后续运行时不会调用该模块。 如果 R 脚本使用以下任一函数,请考虑此行为:
- 生成随机数的函数
- 生成随机数的函数
- 其他非确定性函数
通过此模块创建的自定义 R 模型不能用于以下模块:
R 模型不会自动执行分类数据的特征标准化或是处理丢失的值。 此类变量的处理应当在训练和评分 R 脚本内完成。
预定义函数表
使用情况 | 说明 |
---|---|
get.feature.columns(dataset) |
获取所有特征列。 |
get.label.column(dataset, label.type=TrueLabelType) |
获取给定类型的标签列。 有关可用类型的列表,请参阅常量部分。 |
get.label.column.names(dataset) |
获取所有标签列的名称。 |
get.label.column.name(dataset, label.type=TrueLabelType) |
获取给定类型的标签列的名称。 有关可用类型的列表,请参阅常量部分。 |
get.label.column.types(dataset) |
获取所有标签列的类型。 |
get.feature.column.names(dataset) |
获取所有特征列的名称。 |
dataset < - set.score.column(dataset, score.type, column.name) |
设置给定类型的评分列。 有关可用类型的列表,请参阅常量部分。 |
dataset < - set.feature.channel(dataset, channel.name, column.names) |
设置给定名称的特征通道。 有关可用名称的列表,请参阅常量部分。 |
预定义常量表
返回的常量 | 说明 |
---|---|
TrueLabelType | 真正的标签列类型 |
ScoredLabelType | 评分的标签列类型 |
RawScoreType | 原始评分列类型 |
CalibratedScoreType | 校准评分列类型 |
ScoredProbabilitiesMulticlassColumnTypePattern | 用于为多类分类器准备评分概率列类型的模式 |
BayesianLinearRegressionScoresFeatureChannel | 具有贝叶斯线性回归评分的特征通道的名称 |
BinaryClassificationScoresFeatureChannel | 具有二进制分类评分的特征通道的名称 |
MulticlassClassificationScoresFeatureChannel | 具有多类分类评分的特征通道的名称 |
OrdinalRegressionScoresFeatureChannel | 具有顺序回归评分的特征通道的名称 |
RegressionScoresFeatureChannel | 具有回归评分的特征通道的名称 |
示例
有关如何在机器学习试验中使用此模块的其他示例,请参阅 Azure AI 库。
预期输入
名称 | 类型 | 说明 |
---|---|---|
训练器 R 脚本 | Script | 输入为数据集、输出为未经训练的模型的 R 脚本。 |
评分器 R 脚本 | Script | 输入为模型和数据集、输出为脚本中指定的评分的 R 脚本。 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
建模 | ILearner 接口 | 未经训练的模型 |