共用方式為


在 機器學習 Studio 中執行 Python 機器學習腳本(傳統版)

適用於:適用於 。機器學習 Studio(傳統版)不適用於 。Azure 機器學習

重要

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

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

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

Python 是許多數據科學家工具箱中寶貴的工具。 它用於一般機器學習工作流程的每個階段,包括數據探索、特徵擷取、模型定型和驗證,以及部署。

本文說明如何使用執行 Python 腳本模組,在 機器學習 Studio (傳統) 實驗和 Web 服務中使用 Python 程式代碼。

使用執行 Python 腳本模組

Studio 中 Python 的主要介面是透過 執行 Python 腳本 模組。 它最多接受三個輸入,併產生最多兩個輸出,類似於 執行 R 腳本 模組。 Python 程式代碼會透過名為 azureml_main的特別具名進入點函式,進入參數方塊中。

執行 Python 腳本模組

模組參數方塊中的 Python 程式代碼範例

輸入參數

Python 模組的輸入會公開為 Pandas DataFrame。 函 azureml_main 式最多接受兩個選擇性 Pandas DataFrame 作為參數。

輸入埠與函式參數之間的對應是位置:

  • 第一個連接的輸入埠會對應至函式的第一個參數。
  • 第二個輸入 (如果連線) 對應至函式的第二個參數。
  • 第三個輸入是用來匯入 其他 Python 模組

以下顯示輸入埠如何對應至函式參數的 azureml_main 更詳細語意。

輸入埠組態和產生的 Python 簽章數據表

輸出傳回值

azureml_main 式必須傳回以 Python 序列 封裝的單一 Pandas DataFrame,例如 Tuple、list 或 NumPy 陣列。 此序列的第一個專案會傳回至模組的第一個輸出埠。 模組的第二個輸出埠用於 視覺效果 ,而且不需要傳回值。 此配置如下所示。

將輸入埠對應至參數,並將值傳回至輸出埠

輸入和輸出數據類型的翻譯

Studio 數據集與 Panda DataFrame 不同。 因此,Studio (傳統) 中的輸入數據集會轉換成 Pandas DataFrame,而輸出 DataFrame 會轉換成 Studio (傳統) 數據集。 在這裡轉換程式期間,也會執行下列翻譯:

Python 數據類型 Studio 翻譯程式
字串和數值 已轉譯為is
Pandas 'NA' 已轉譯為 「遺漏值」
索引向量 支援*
非字串數據行名稱 呼叫 str 數據行名稱
重複的數據行名稱 新增數位後綴:(1)、(2)、(3)等等。

*Python 函式中的所有輸入數據框架一律有 64 位數值索引,從 0 到數據列數減 1

匯入現有的 Python 腳本模組

用來執行 Python 的後端是以 Anaconda 為基礎,這是廣泛使用的科學 Python 散發。 它隨附近 200 個最常見的 Python 套件,用於以數據為中心的工作負載。 Studio (傳統版) 目前不支援使用 Pip 或 Conda 等套件管理系統來安裝和管理外部連結庫。 如果您發現需要併入其他連結庫,請使用下列案例作為指南。

常見的使用案例是將現有的 Python 腳本併入 Studio (傳統) 實驗。 執行 Python 腳本 模組會接受 ZIP 檔案,其中包含第三個輸入埠上的 Python 模組。 檔案會由運行時間的執行架構解壓縮,且內容會新增至 Python 解釋器的連結庫路徑。 進入 azureml_main 點函式接著可以直接匯入這些模組。

例如,請考慮包含簡單 「Hello, World」 函式的檔案 Hello.py。

Hello.py 檔案中的使用者定義函式

接下來,我們會建立包含 Hello.py 的檔案Hello.zip:

包含使用者定義 Python 程式代碼的 Zip 檔案

將 zip 檔案以數據集的形式上傳至 Studio (傳統)。 然後,建立並執行實驗,其使用Hello.zip檔案中的 Python 程式代碼,方法是將它附加至執行 Python 腳本模組的第三個輸入埠,如下圖所示。

使用Hello.zip作為執行 Python 腳本模組輸入的範例實驗

上傳為 zip 檔案的使用者定義 Python 程式代碼

模組輸出顯示 zip 檔案已解除封裝,且 print_hello 函式已執行。

顯示使用者定義函式的模組輸出

存取 Azure 儲存體 Blob

您可以使用下列步驟來存取儲存在 Azure Blob 儲存體 帳戶中的數據:

  1. 在本機下載適用於 Python 的 Azure Blob 儲存體 套件。
  2. 將 zip 檔案上傳至您的 Studio (傳統) 工作區作為數據集。
  3. 使用 建立 BlobService 物件 protocol='http'
from azure.storage.blob import BlockBlobService

# Create the BlockBlockService that is used to call the Blob service for the storage account
block_blob_service = BlockBlobService(account_name='account_name', account_key='account_key', protocol='http')
  1. 停用記憶體組態設定索引標籤中所需的安全傳輸

停用 Azure 入口網站 中所需的安全傳輸

運作 Python 腳本

當發佈為 Web 服務時,會呼叫評分實驗中使用的執行 Python 腳本 模組。 例如,下圖顯示評分實驗,其中包含評估單一 Python 表達式的程式代碼。

Web 服務的 Studio 工作區

Python Pandas 運算式

從此實驗建立的 Web 服務會採取下列動作:

  1. 接受 Python 運算式作為輸入(以字串形式)
  2. 將 Python 運算式傳送至 Python 解釋器
  3. 傳回包含表達式和評估結果的數據表。

使用視覺效果

使用 MatplotLib 建立的 繪圖可由執行 Python 腳本傳回。 不過,繪圖不會在使用 R 時自動重新導向至影像。因此,用戶必須明確地將任何繪圖儲存至 PNG 檔案。

若要從 MatplotLib 產生影像,您必須採取下列步驟:

  1. 將後端切換至預設 Qt 型轉譯器中的 「AGG」。。
  2. 建立新的圖形物件。
  3. 取得座標軸,併產生其中的所有繪圖。
  4. 將圖表儲存至 PNG 檔案。

下列影像說明此程式,這些影像使用 Pandas 中的scatter_matrix函式來建立散佈圖矩陣。

將 MatplotLib 數位儲存至影像的程式代碼

按兩下 [執行 Python 腳本] 模組上的可視化以檢視表

使用 Python 程式代碼將範例實驗的繪圖可視化

將多個數據儲存到不同的影像中,可以傳回多個數據。 Studio (傳統) 運行時間會挑選所有影像,並將其串連以取得視覺效果。

進階範例

安裝在 Studio 中的 Anaconda 環境(傳統版)包含一般套件,例如 NumPy、SciPy 和 Scikits-Learn。 這些套件可以有效地用於機器學習管線中的數據處理。

例如,下列實驗和腳本說明在 Scikits-Learn 中使用合奏學習工具來計算數據集的特徵重要性分數。 分數可用來執行受監督的功能選取,再饋送至另一個模型。

以下是用來計算重要性分數並根據分數排序功能的 Python 函式:

依分數排名特徵的函式

下列實驗接著會計算並傳回 機器學習 Studio 中 “Pima Indian Diabetes” 數據集中特徵的重要性分數(傳統):

使用 Python 在 Pima Indian Diabetes 數據集中排名特徵的實驗

執行 Python 腳本模組輸出的視覺效果

限制

執行 Python 腳本 模組目前有下列限制:

沙箱化執行

Python 運行時間目前已沙盒化,且不允許以持續性方式存取網路或本機文件系統。 在模組完成後,所有儲存在本機的檔案都會隔離並刪除。 Python 程式代碼無法存取其執行之電腦上的大部分目錄,例外狀況為目前目錄及其子目錄。

缺乏複雜的開發和偵錯支援

Python 模組目前不支援 INTELlisense 和偵錯等 IDE 功能。 此外,如果模組在運行時間失敗,則會提供完整的 Python 堆疊追蹤。 但它必須在模組的輸出記錄檔中檢視。 我們目前建議您在 IPython 之類的環境中開發和偵錯 Python 腳本,然後將程式代碼匯入模組。

單一數據框架輸出

Python 進入點只允許傳回單一數據框架做為輸出。 目前無法傳回任意 Python 物件,例如直接回到 Studio (傳統) 運行時間的定型模型。 如同 執行 R 腳稿具有相同的限制,在許多情況下,可以將對象挑選成位元組陣列,然後在數據框架內傳回該物件。

無法自定義 Python 安裝

目前,新增自定義 Python 模組的唯一方式是透過稍早所述的 zip 檔案機制。 雖然這適用於小型模組,但對於大型模組(特別是具有原生 DLL 的模組)或大量的模組而言,這很麻煩。

下一步

如需詳細資訊,請參閱 Python 開發人員中心