建立 R 模型

重要

Machine Learning 工作室 (傳統) 的支援將於 2024 年 8 月 31 日結束。 建議您在該日期之前轉換成 Azure Machine Learning

自 2021 年 12 月 1 日起,您將無法建立新的 Machine Learning 工作室 (傳統) 資源。 在 2024 年 8 月 31 日之前,您可以繼續使用現有的 Machine Learning 工作室 (傳統) 資源。

ML 工作室 (傳統) 文件即將淘汰,未來將不再更新。

使用自訂資源建立 R 模型

類別: 資料轉換/操作

注意

適用于僅限機器學習 Studio (傳統)

Azure Machine Learning 設計工具中提供類似的拖放模組。

模組概觀

本文說明如何使用機器學習 Studio (傳統) 中的 [建立 r 模型] 模組,從 R 腳本建立未定型的模型。

您可以根據機器學習環境中 R 套件所包含的任何學習模組來建立模型的基礎。

建立模型之後,您可以使用定型模型,將資料集上的模型定型,如同機器學習中的任何其他學習模組。 定型的模型可以傳遞至 評分模型 ,以使用模型進行預測。 然後可以儲存已定型的模型,並可將計分工作流程發佈為 Web 服務。

警告

目前不可能傳遞 R 模型的計分結果來 評估模型交叉驗證模型。 如果您需要評估模型,您可以撰寫自訂 R 腳本,並使用「 執行 R 腳本 」模組來執行它。

除了使用 Create r 模型 儲存和重複使用自訂 r 模組之外,您還可以使用 R 來建立您自己的模型和資料管理程式的執行、以壓縮格式將檔案上傳至您的工作區,然後將套件註冊為自訂模組。 如需詳細資訊,請參閱 自訂 R 模組

如何設定建立 R 模型

使用此模組需要 R 的中繼或專業知識。此模組支援使用已安裝在機器學習中的 R 套件所包含的任何學習模組。

Azure AI 資源庫的這個範例會使用熱門的封裝: + Create R 模型,來執行雙類別的通用 e1070 貝氏機率分類分類器。 建議您將範例複製到您的工作區,並遵循。

  1. 將這些模組新增至您的實驗: 建立 R 模型定型模型評分模型

  2. 在 [建立 R 模型] 的 [屬性] 窗格中,提供下列腳本:

    • 定型器R 腳本:您在這裡提供的 r 腳本會用來定型模型。 當您執行實驗時,它會部署到「 定型模型 」模組。

    • 計分器 r 腳本:您在此輸入上提供的 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,其中包含我們想要使用的貝氏機率分類演算法。 因為這是預先安裝在機器學習環境中的其中一個套件,所以您不需要下載或安裝套件。

  • 接下來的幾行從資料集取得特徵資料行和標籤資料行,並將它們合併至名為 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)
    
  • 請注意,使用這些預先定義的函式:

    • get.label.columns() 傳回在「 定型模型 」模組中選取做為類別標籤的資料行。

    • get.feature.columns()選取已指定為資料集中功能的資料行。

      根據預設,標籤資料行以外的所有資料行都會被視為 Studio (傳統) 中的功能。 因此,若要將特定的資料行標示為特徵,請使用 [ 編輯中繼資料],或在 R 腳本中選取一組資料行。

    • 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 介面 未定型的模型

另請參閱

執行 R 指令碼
R 語言模組