创建 R 模型

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

使用自定义资源创建 R 模型

类别: 数据转换/操作

注意

适用于:机器学习 Studio (经典) 应用

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何使用 机器学习 Studio (经典) 中的"创建 R 模型"模块,从 R 脚本创建未训练的模型。

可以将模型基于任何包含在 R 包中的学习器,机器学习环境。

创建模型后,可以使用"训练模型"在数据集上训练模型,就像在数据集中训练任何其他机器学习。 训练的模型可以传递给评分模型,以便使用该模型进行预测。 然后就可以保存训练后的模型,并且可以将评分工作流作为 Web 服务发布。

警告

目前无法将 R 模型的评分结果传递给 评估 模型或 交叉验证模型。 如果需要评估模型,可以编写自定义 R 脚本,然后使用执行 R 脚本模块 运行 它。

除了使用"创建 R 模型"保存和重新使用自定义 R 模块外,还可以使用 R 创建自己的建模和数据管理过程的实现,将压缩格式的文件上传到工作区,然后将包注册为自定义模块。 有关详细信息,请参阅 自定义 R 模块

如何配置创建 R 模型

使用此模块需要具备 R 的中级或专家知识。该模块支持使用已安装在 机器学习 中的 R 包中包含的任何学习器。

此示例 来自 Azure AI 库使用 常用包实现双类 Naïve Bayes e1070 分类器:+ 创建 R 模型。 建议将示例复制到工作区,然后继续操作。

  1. 将以下模块添加到试验: 创建 R 模型训练模型评分模型

  2. 在" 创建R 模型"的"属性"窗格中,提供以下脚本:

  3. 示例实验还包括执行 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)
    
  • 请注意使用这些预定义函数:

    • get.label.columns() 返回在训练模型模块中选为类 标签的 列。

    • get.feature.columns()选择在数据集中指定为特征的列。

      默认情况下,除标签列之外的所有列都被视为工作室 (经典) 。 因此,若要将特定列标记为特征,请使用"编辑 元数据",或在 R 脚本中选择一组列。

    • 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

  • 传递给评分模型模块的数据帧必须具有名称 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 接口 未经训练的模型

另请参阅

执行 R 脚本
R 语言模块