適用於:
機器學習 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 模組的輸入會公開為 Pandas DataFrames。 函數 azureml_main 最多可接受兩個可選的 Pandas DataFrame 參數。
輸入埠與函式參數之間是依位置對應。
- 第一個連接的輸入埠會對應至函式的第一個參數。
- 如果連線,第二個輸入被映射到函式的第二個參數。
- 第三個輸入是用來匯入 其他 Python 模組。
輸入埠對應到azureml_main函式參數的更詳細語意如下所示。
輸出傳回值
函 azureml_main 式必須傳回一個 Pandas DataFrame,這個 DataFrame 必須被包裝在 Python 的 序列 中,例如 tuple、list 或 NumPy 陣列。 此序列的第一個元素會返回至模組的第一個輸出埠。 模組的第二個輸出埠用於 視覺效果 ,而且不需要傳回值。 此配置如下所示。
輸入和輸出數據類型的翻譯
Studio 數據集與 Panda DataFrame 不同。 因此,Studio(傳統版)中的輸入數據集會被轉換為 Pandas DataFrame,而輸出 DataFrame 則會被轉換回 Studio(傳統版)數據集。 在此轉換過程中,也會執行下列翻譯:
| Python 數據類型 | Studio 翻譯流程 |
|---|---|
| 字串和數值 | 原樣翻譯 |
| 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.zip:
將 zip 檔案以數據集的形式上傳至 Studio (傳統)。 然後,建立並執行實驗,其使用Hello.zip檔案中的 Python 程式代碼,方法是將它附加至執行 Python 腳本模組的第三個輸入埠,如下圖所示。
模組輸出顯示 zip 檔案已解除封裝,且 print_hello 函式已執行。
存取 Azure 儲存體 Blob 物件
您可以使用下列步驟來存取儲存在 Azure Blob 儲存體 帳戶中的數據:
- 在本機下載適用於 Python 的 Azure Blob 儲存體 套件。
- 將 zip 檔案上傳至您的 Studio (傳統) 工作區作為數據集。
- 使用
protocol='http'建立您的 BlobService 物件
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')
- 停用儲存體組態設定索引標籤中的安全傳輸要求
執行 Python 腳本
當發佈為 Web 服務時,會呼叫評分實驗中使用的執行 Python 腳本 模組。 例如,下圖顯示評分實驗,其中包含評估單一 Python 表達式的程式代碼。
從此實驗建立的 Web 服務會採取下列動作:
- 接受 Python 運算式作為輸入(以字串形式)
- 將 Python 運算式傳送至 Python 解釋器
- 傳回包含表達式和評估結果的數據表。
使用視覺效果
使用 MatplotLib 建立的 繪圖可由執行 Python 腳本傳回。 不過,繪圖不會像在使用 R 時那樣自動轉換成影像。因此,使用者必須明確地將任何繪圖儲存為 PNG 文件。
若要從 MatplotLib 產生影像,您必須採取下列步驟:
- 將後端切換至預設 Qt 型轉譯器中的 「AGG」。。
- 建立新的圖形物件。
- 取得座標軸,並將所有圖表生成到其中。
- 將圖表儲存至 PNG 檔案。
下列影像說明此程式,這些影像使用 Pandas 中的scatter_matrix函式來建立散佈圖矩陣。
可以將多個圖形儲存到不同的影像中以傳回。 Studio(傳統版)運行時間會收集所有影像,並將其串連以產生視覺效果。
進階範例
安裝在 Studio 中的 Anaconda 環境(傳統版)包含一般套件,例如 NumPy、SciPy 和 Scikits-Learn。 這些套件可以有效地用於機器學習管線中的數據處理。
例如,下列實驗和腳本說明在 Scikits-Learn 中使用合奏學習工具來計算數據集的特徵重要性分數。 分數可用來執行受監督的功能選取,再饋送至另一個模型。
以下是用來計算重要性分數並根據分數排序功能的 Python 函式:
下列實驗接著會計算並傳回「Pima Indian Diabetes」數據集中特徵的重要性分數,此數據集位於機器學習 Studio(經典版)中。
限制
執行 Python 腳本 模組目前有下列限制:
沙箱化執行
Python 運行時間目前已沙盒化,且不允許以持續性方式存取網路或本機文件系統。 在模組完成後,所有儲存在本機的檔案都會隔離並刪除。 Python 程式代碼無法存取其執行之電腦上的大部分目錄,例外狀況為目前目錄及其子目錄。
缺乏複雜的開發和偵錯支援
Python 模組目前不支援 INTELlisense 和偵錯等 IDE 功能。 此外,如果模組在運行時間失敗,則會提供完整的 Python 堆疊追蹤。 但它必須在模組的輸出記錄檔中檢視。 我們目前建議您在 IPython 之類的環境中開發和偵錯 Python 腳本,然後將程式代碼匯入模組。
單一資料框輸出
Python 進入點只允許傳回單一數據框架做為輸出。 目前無法將任意的 Python 物件,例如訓練過的模型,直接傳回至 Studio(傳統版)的運行時間環境。 如同 執行 R 腳本具有相同的限制,在許多情況下,可以將對象序列化成位元組陣列,然後在資料框中傳回該物件。
無法自定義 Python 安裝
目前,新增自定義 Python 模組的唯一方式是透過稍早所述的 zip 檔案機制。 雖然這適用於小型模組,但對於大型模組(特別是具有原生 DLL 的模組)或大量的模組而言,這很麻煩。
下一步
如需詳細資訊,請參閱 Python 開發人員中心。