建立 R 模型
重要
Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning。
自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。
ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。
使用自訂資源建立 R 模型
類別: 資料轉換/操作
模組概觀
本文說明如何使用機器學習 Studio (傳統) 中的 [建立 r 模型] 模組,從 R 腳本建立未定型的模型。
您可以根據機器學習環境中 R 套件所包含的任何學習模組來建立模型的基礎。
建立模型之後,您可以使用定型模型,將資料集上的模型定型,如同機器學習中的任何其他學習模組。 定型的模型可以傳遞至 評分模型 ,以使用模型進行預測。 然後可以儲存已定型的模型,並可將計分工作流程發佈為 Web 服務。
除了使用 Create r 模型 儲存和重複使用自訂 r 模組之外,您還可以使用 R 來建立您自己的模型和資料管理程式的執行、以壓縮格式將檔案上傳至您的工作區,然後將套件註冊為自訂模組。 如需詳細資訊,請參閱 自訂 R 模組。
如何設定建立 R 模型
使用此模組需要 R 的中繼或專業知識。此模組支援使用已安裝在機器學習中的 R 套件所包含的任何學習模組。
Azure AI 資源庫的這個範例會使用熱門的封裝: + Create R 模型,來執行雙類別的通用 e1070
貝氏機率分類分類器。 建議您將範例複製到您的工作區,並遵循。
在 [建立 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,其中包含我們想要使用的貝氏機率分類演算法。 因為這是預先安裝在機器學習環境中的其中一個套件,所以您不需要下載或安裝套件。
接下來的幾行從資料集取得特徵資料行和標籤資料行,並將它們合併至名為
train.data
的新 R 資料框架中: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")
程式碼的最後一行定義了簡單的貝氏機率分類分類器演算法,作為變數 (功能) 和結果 (標籤) 在資料框架中
train.data
。model <- naiveBayes(Class ~ ., train.data)
在模型建立、定型和計分腳本中,您必須使用變數名稱
model
。
評分指令碼
下列程式碼說明您將在 計分器 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 服務。
如需有關如何從 Studio (傳統) 實驗建立 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 | True 標籤資料行類型 |
ScoredLabelType | 計分標籤資料行類型 |
RawScoreType | 原始分數資料行類型 |
CalibratedScoreType | 校正的分數資料行類型 |
ScoredProbabilitiesMulticlassColumnTypePattern | 用來為多級分類準備計分機率資料行類型的模式 |
BayesianLinearRegressionScoresFeatureChannel | 使用 Bayesian 線性迴歸分數的特徵通道名稱 |
BinaryClassificationScoresFeatureChannel | 使用二元分類分數的特徵通道名稱 |
MulticlassClassificationScoresFeatureChannel | 使用多級分類分數的特徵通道名稱 |
OrdinalRegressionScoresFeatureChannel | 使用序數迴歸分數的特徵通道名稱 |
RegressionScoresFeatureChannel | 使用迴歸分數的特徵通道名稱 |
範例
如需如何在機器學習實驗中使用此模組的其他範例,請參閱 Azure AI 資源庫。
預期的輸入
名稱 | 類型 | 說明 |
---|---|---|
定型模組 R 指令碼 | 指令碼 | 一種 R 指令碼,會使用資料集做為輸入,並輸出未定型的模型。 |
計分器 R 指令碼 | 指令碼 | 一種 R 指令碼,會使用模型和資料集做為輸入,並輸出指令碼中指定的分數。 |
輸出
名稱 | 類型 | 說明 |
---|---|---|
模型 | ILearner 介面 | 未定型的模型 |