2018 年 1 月

第 33 卷,第 1 期

本文章是由機器翻譯。

人工智慧 - 在 Azure ML Workbench 中建立模型

Frank La La |2018 年 1 月

Frank LaVigne在我的最後一個資料行,我會引進 Azure 機器學習 Workbench (Azure ML Workbench) 專業人員的資料科學家和機器學習服務 (ML) 專業人員的新工具。這代表黑白強烈對比在 Azure Machine Learning Studio (Azure ML Studio 中),這是主要是專為初學者所設計的工具。不過,這不表示 Azure ML Workbench 是只適用於有經驗的資料科學家。中繼和甚至入門級資料科學家也可以從 Azure ML 工作臺] 中所提供的工具獲益。

載入光圈分類器專案範本

我的前一個資料行中所述,Azure ML Workbench 提供 (我使用線性迴歸範本) 的許多專案範本。這次我利用分類光圈專案範本,以示範 Azure ML 工作臺] 的更多的功能。如果您尚未安裝 Azure ML 工作臺,請參閱文件,網址bit.ly/2j2NVdH

光圈資料集是包含 50 個範例,範例的三種光圈多變量資料集。四個功能已從每個樣本測量: sepals 和花瓣的寬度和長度。根據這些四個功能的組合,您可以判斷光圈種。它是在資料科學和 ML oft 使用範例資料集。 

開啟 Azure ML 工作臺中,選取專案,然後按一下加號。在出現的內容功能表,選擇新的專案來建立新的專案。IrisClassifier 將專案命名。尋找分類光圈專案範本中,按一下它,然後按一下 [建立] 按鈕 (請參閱圖 1)。

選擇歸類光圈專案範本
圖 1 選擇歸類光圈專案範本

檢視程式碼

一旦專案載入 Azure ML 工作臺時,按一下資料夾圖示,在左側以顯示包含的所有檔案。按一下 iris_sklearn.py 檔案在編輯器中檢視其內容。它看起來應該類似圖 2

Iris_sklearn.py 檔案在 Azure ML Workbench 文字編輯器
圖 2 iris_sklearn.py 檔案在 Azure ML Workbench 文字編輯器

您已知道,程式碼為 Python 資料科學家和 ML 從業受歡迎的語言。Python 喜歡的休閒活動多樣化的 ML,提供豐富的生態系統的工具和公用程式語言的科學與繪圖程式庫。下列其中一種是 scikit-了解,常用的 ML 程式庫。各種區段 scikit-了解,稱為 sklearn 程式碼中,會匯入到 14 七行中的專案。完整的教學課程的 Python 語言超出本文的範圍,而語法應該很熟悉任何 C# 開發人員。此處的重點會在建立模型以 scikit-了解。

Azure ML Workbench 專案的工作流程

在任何 ML 專案中的第一個步驟載入資料。第二個步驟通常是更耗費人力且最耗時: wrangling 資料。這是在 Azure ML Workbench 固然。若要查看的未經處理資料看起來像 iris.csv 檔上按一下。請注意,此檔案沒有資料行名稱。現在,按一下螢幕左側 iris.dprep 檔案清單。請注意採取清理資料的步驟數目。這些步驟加入至資料行的名稱,並移除資料列,其中指定資料行是 null。按一下篩選器指定步驟右邊的向下箭頭。在出現的內容功能表中按一下 [編輯] 以顯示篩選資料行] 對話方塊中顯示圖 3。此規則設定以移除任何資料列,其中指定資料行是 null。請注意,若要加入額外的條件的其他選項。這個對話方塊會是非常寶貴資料科學專案中的工具,因為很少的資料會成為 ML 演算法可取用的全新格式。

篩選資料行對話方塊視窗
圖 3 的 [篩選資料行對話方塊視窗

之後參考的各種程式庫,並初始化本機環境,程式碼會藉由執行該行 28,而載入的資料檔和執行已定義的所有步驟 iris.dprep 檔案載入資料:

iris = run('iris.dprep', dataflow_idx=0, spark=False)

輸出是熊資料框架的已清除的資料。熊資料框架是二維的資料結構類似於資料表中的 SQL 資料庫或試算表中。閱讀更多有關在資料框架bit.ly/2BlWl6K

既然已清除並載入資料,就可以將資料分隔成功能和標籤開始。功能可讓進行預測時所需的各種欄位。在此情況下,Sepals 和花瓣指定寬度和長度,此演算法會預測光圈哪種植物所屬。在此案例中的功能包括:Sepal 長度、 Sepal 寬度、 瓣花瓣長度和瓣花瓣寬度。標籤或預測的值會指定。行 32 iris_sklearn.py 檔案中會將資料框架,分成兩個陣列:如下所示的 [標籤] X 的功能和 Y (嚴格來說,X 和 Y 是 NumPy 陣列,從 NumPy 程式庫的資料結構):

X, Y = iris[['Sepal Length', 'Sepal Width', 'Petal Length', 
  'Petal Width']].values, iris['Species'].values

一旦將資料分成標籤及功能,就可以將資料分成定型集和測試集開始。下列程式碼行隨機保留 35%的資料列中輸入的資料集,並將它放入 Y_train 和 Y_test;其餘的 65%進入 X_train 和 X_test:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.35,
  random_state=0

在受監督的學習已知至標籤的正確值。藉由傳遞給它的功能和標籤已定型演算法。關聯性和模式之間的功能以及正確的標籤,然後探索演算法。下列程式會使用羅吉斯迴歸演算法,根據定型資料建立 ML 模型:

clf1 = LogisticRegression(C=1/reg).fit(X_train, Y_train)

羅吉斯迴歸是一種統計方法分析的資料集有決定結果的一個或多個變數 (bit.ly/2zQ1hVe)。在此情況下的 sepals 和花瓣判斷光圈指定。

定型之後,就演算法是藉由呼叫計分法模型測試的精確度:

accuracy = clf1.score(X_test, Y_test)
print ("Accuracy is {}".format(accuracy))

若要了解,最好是實際執行的程式碼。不過,可以完成之前,是一個步驟。這個專案會使用 matplotlib,Python 的熱門繪圖程式庫。若要安裝它,請從 [檔案] 功能表中選取開啟命令提示字元。在命令列中,輸入下列命令:

pip install matplotlib

安裝之後,輸入下列命令列:

python iris_sklearn.py

在幾分鐘後,輸出應該看起來圖 4

Iris_sklearn.py 程式的輸出
圖 4 iris_sklearn.py 程式的輸出

顯示命令視窗中,模型的精確度是 0.6792452830188679,也就是說,它正確猜測測試資料中指定的 Iris 67.92%的時間。

執行的程式碼從 Azure ML 工作臺內

雖然執行命令列中的程式碼很有用,Azure ML Workbench 提供能夠讓這更簡單,並擷取已執行之作業的相關資訊。尋找 [執行] 按鈕。它的左邊,有兩個下拉式清單和文字方塊。根據預設,它看起來應該像圖 5。按一下 [執行]。

Azure ML 工作臺] 中執行檔案
圖 5 Azure ML 工作臺] 中執行檔案

這會執行指令碼在本機,並透過 Azure ML 工作臺中 [工作] 索引標籤中追蹤執行指令碼。在程式執行之後,就會出現輸出,以及執行詳細資料。若要看到它,請按一下 iris_sklearn.py 中的項目執行的清單。選擇第一個記錄執行資料格中。檢閱要查看執行中的基本效能統計資料的執行內容區段。捲動以查看度量和視覺效果各節,以查看指令碼的輸出中所示圖 6

度量和 Azure ML 工作臺] 中顯示的視覺效果
圖 6 度量和 Azure ML 工作臺] 中顯示的視覺效果

在先前的文章中,我將說明如何瀏覽作業的結果,並檢視作業歷程記錄。請參閱,以取得詳細資料 (msdn.com/magazine/mt814414)。

保存定型的模型

在執行 iris_sklearn.py 指令碼可能是透過 Azure ML Workbench 或命令列時,可能會注意到這個程序需要幾秒鐘的時間。在我 Surface Book,花大約 9 秒。不同的硬體組態將會產生不同的結果,而此處理序難以瞬間完成。大部分的處理時間為專用於定型模型。幸運的是,為幾乎不需要持續定型模型。線條 82 到 79 需要將定型的模型和保存到磁碟使用 Pickle 程式庫 (bit.ly/2im9w3O):

print ("Export the model to model.pkl")
f = open('./outputs/model.pkl', 'wb')
pickle.dump(clf1, f)
f.close()

X86 和 87 行示範如何從磁碟還原定型的模型:

f2 = open('./outputs/model.pkl', 'rb')
clf2 = pickle.load(f2)

下一個步驟是建立一些範例資料,以及使用模型來預測指定,會對 89 和 98 行:

# Predict on a new sample
X_new = [[3.0, 3.6, 1.3, 0.25]]
print ('New sample: {}'.format(X_new))
# Add random features to match the training data
X_new_with_random_features = np.c_[X_new, random_state.randn(1, n)]
# Score on the new sample
pred = clf2.predict(X_new_with_random_features)
print('Predicted class is {}'.format(pred))

如果您參考回圖 4,您可以看到中間較低的螢幕擷取畫面預測的類別是 [' 光圈-setosa']。

傳遞參數

您可能已注意到 [執行] 按鈕旁邊的 [引數] 文字方塊。舊版中,我保留此欄位空白。

在 iris_sklearn.py 檔案中,行 47 和 48,檢查有任何參數,將值轉換成浮點數,,然後設定 reg 變數為其值。如果沒有參數傳送至程式時,變數會保留的值,以初始化該行 45:0.01,就像這樣:

if len(sys.argv) > 1:
  reg = float(sys.argv[1])

登錄值做為參數傳遞至 LogisticRegression 方法,並設定正則化速率。正則化速率控制引入的其他資訊,以避免過度配適模型。當模型太好在測試資料上執行時,就會發生過度配適。提供非常精確的結果與測試資料的模型可能會提供超出測試設定在未來的資料時無法使用。正則化和過度配適的詳細資訊將會位於bit.ly/2kfLU1fbit.ly/2iatJpC分別。

輸入數字 10 的引數] 文字方塊中,按一下 [執行一次,並確定您的本機和 iris_sklearn.py 都已選取。完成時,按一下 [工作] 索引標籤上,透過它瀏覽並選擇 iris_sklearn.py。請注意,圖表現在會有第二個資料點,如中所示圖 7

第二個資料點加入 iris_sklearn.py 工作] 索引標籤的圖表
圖 7 A 第二個資料點加入 iris_sklearn.py 工作] 索引標籤的圖表

現在,在 [檔案] 圖示上按一下,然後按一下 run.py 檔案上。此程式會呼叫 iris_sklearn.py 檔案使用新的正則化參數是上一次執行的值的一半,直到取得 0.005 以下的值。我已經執行指令碼,具有 10 個參數,因為我想要變更第七個要五行。不過,您可能已經注意到,因為無法編輯文字。若要編輯的文字,按一下下拉式清單中,切換至編輯模式的文字區域的左上方部份。還有另一個程式,例如 Visual Studio 程式碼中編輯選項。不過,在此情況下,選擇 [編輯] 在 Workbench 文字編輯器 (請參閱圖 8)。

切換至編輯模式
圖 8 切換至編輯模式

登錄來變更線條 7 之後 = 5,請按一下 [儲存] 圖示。接下來,按一下上開啟命令提示字元,從 [檔案] 功能表和類型的項目,下列命令並按 enter 鍵:

python run.py

程式將會執行,並再透過 Azure Azure ML Workbench 系統執行 iris_sklearn.py 檔案基礎的作業系統時傳遞的命令。請注意在命令列視窗,並在 Azure Azure ML Workbench 程式內的工作窗格內的程式輸出:

os.system('az ml experiment submit -c local ./iris_sklearn.py {}'.format(reg))

按一下螢幕左側工具列中的 [工作] 圖示,然後按一下 [iris_sklearn.py 的項目。請注意如何多個資料點有幾個有圖形中。Run.py 程式執行指令碼數次以不同的正則化速率每一次。 

總結

在本文中,我瀏覽 Azure ML 工作臺,示範的功能和彈性的程式與資料科學中常見範例資料集。而不是直接或平易近人為 Azure ML Studio,Azure ML Workbench 會開啟更多的資料科學家和 ML 從業的可能性。第一次和最重要是安裝及使用任何 Python 程式庫,包括 Pickle,matplotlib 和,當然,深入了解 Sci 套件的能力。另外還有命令列介面可以接受命令來安裝 Python 程式庫和 Azure ML 工作臺內追蹤工作的形式執行 Python 程式碼。追蹤的作業都有一個額外的探索結果以圖形方式做出更快速的資料試驗好處。

Azure ML Workbench 包含數個更多的功能,我將會瀏覽在未來發行項,例如 Jupyter 筆記本、 原始檔控制整合和 Docker 映像的支援。此工具真正帶來很棒的功能,以資料科學欄位。


Frank La VigneDataDriven 播客會導致資料和分析練習 Wintellect 和共同的主機。他的部落格定期FranksWorld.com ,您可以在他的 YouTube 頻道,"Frank 的世界電視 」 上監看他 (FranksWorld.TV)。

非常感謝下列技術專家檢閱這篇文章:Andy Leonard


MSDN Magazine 論壇中的這篇文章的討論