訓練
模組
瞭解如何使用自動化機器學習來尋找最佳分類模型(AutoML)。 您將使用 Python SDK (v2) 來設定和執行 AutoML 作業。
認證
Microsoft Certified: Azure Data Scientist Associate - Certifications
使用 Python、Azure Machine Learning 和 MLflow 來管理資料擷取和準備、訓練及部署模型,以及監視機器學習解決方案。
適用於:Azure CLI ml 延伸模組 v2 (目前)
Python SDK azure-ai-ml v2 (目前)
在本文中,瞭解如何使用 Azure 機器學習 Python SDK v2 設定自動化機器學習 (AutoML) 定型作業。 自動化 ML 會為您挑選演算法和超參數,並產生馬上可進行部署的模型。 本文提供可用來設定自動化機器學習實驗的各種選項詳細數據。
如果您偏好無程式代碼體驗,您也可以 使用 Studio UI 設定表格式數據的無程式代碼自動化 ML 定型。
如若要使用 SDK 資訊,請安裝適用於 Python SDK v2 的 Azure Machine Learning。
若要安裝 SDK,您可以:
若要連線到工作區,您必須提供訂用帳戶、資源群組和工作區。
這些工作區詳細資料會為 azure.ai.ml
中的 MLClient
所用,以掌握必要的 Azure Machine Learning 工作區。
下列範例會使用預設 Azure 驗證搭配資料夾結構中檔案的預設工作區組態或組態 config.json
。 如果找不到 config.json
,當您建立 MLClient
時,您需要手動導入訂用帳戶標識碼、資源群組和工作區。
from azure.identity import DefaultAzureCredential
from azure.ai.ml import MLClient
credential = DefaultAzureCredential()
ml_client = None
try:
ml_client = MLClient.from_config(credential)
except Exception as ex:
print(ex)
# Enter details of your Azure Machine Learning workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AZUREML_WORKSPACE_NAME>"
ml_client = MLClient(credential, subscription_id, resource_group, workspace)
若要在 SDK v2 中提供定型資料,您必須透過 MLTable 將其上傳至雲端。
將資料載入 MLTable 的需求:
必須可從遠端計算存取定型資料。 自動化 ML v2 (Python SDK 和 CLI/YAML) 接受 MLTable 資料資產 (v2)。 為了回溯相容性,它也透過相同的輸入數據集屬性,支援 v1 中的 v1 表格式數據集,也就是已註冊的表格式數據集。 建議您使用 v2 中提供的 MLTable。 在此範例中,數據會儲存在本機路徑 ./train_data/bank_marketing_train_data.csv。
您可以使用 mltable Python SDK 建立 MLTable,如下列範例所示:
import mltable
paths = [
{'file': './train_data/bank_marketing_train_data.csv'}
]
train_table = mltable.from_delimited_files(paths)
train_table.save('./train_data')
此程式碼會建立新的檔案 ./train_data/MLTable,其中包含檔案格式和載入指示。
現在,./train_data資料夾具有MLTable定義檔案加上資料檔,bank_marketing_train_data.csv。
如需 MLTable 的詳細資訊,請參閱在 Azure 機器學習 中使用數據表。
您可以指定個別 的定型資料和驗證資料集。 訓練數據必須提供給 training_data
自動化機器學習作業 Factory 函式中的 參數。
如果您未明確指定 validation_data
或 n_cross_validation
參數,自動化 ML 會套用預設技術來判斷驗證的執行方式。 會做出什麼決定取決於資料集內指派給 training_data
參數的資料列數目。
定型資料大小 | 驗證技術 |
---|---|
大於 20,000 個資料列 | 已套用定型和驗證數據分割。 預設值是以 10% 的初始定型資料集做為驗證集。 接著,該驗證集會用於計量計算。 |
小於或等於 20000 個資料列 | 套用交叉驗證方法。 預設的摺疊數目取決於資料列數目。 如果數據集少於 1,000 個數據列,則會使用十個折疊。 如果數據列等於或介於 1,000 到 20,000 之間,則會使用三個折疊。 |
目前只有 Azure 機器學習 遠端計算叢集或計算實例支援 Python SDK v2 的自動化機器學習作業(或 CLI v2)。 如需使用 Python SDKv2 或 CLIv2 建立計算的詳細資訊,請參閱使用 Azure 機器學習 CLI、SDK 和 REST API 將模型定型。
有數個選項可用來設定自動化機器學習實驗。 這些設定參數會在您的工作方法中設定。 您也可以使用 training
和 limits
設定來設定作業定型設定和允出準則。
下列範例顯示分類工作的必要參數,其會將精確度指定為 主要計量 和五個交叉驗證折疊。
from azure.ai.ml.constants import AssetTypes
from azure.ai.ml import automl, Input
# note that this is a code snippet -- you might have to modify the variable values to run it successfully
# make an Input object for the training data
my_training_data_input = Input(
type=AssetTypes.MLTABLE, path="./data/training-mltable-folder"
)
# configure the classification job
classification_job = automl.classification(
compute=my_compute_name,
experiment_name=my_exp_name,
training_data=my_training_data_input,
target_column_name="y",
primary_metric="accuracy",
n_cross_validations=5,
enable_model_explainability=True,
tags={"my_custom_tag": "My custom value"}
)
# Limits are all optional
classification_job.set_limits(
timeout_minutes=600,
trial_timeout_minutes=20,
max_trials=5,
enable_early_termination=True,
)
# Training properties are optional
classification_job.set_training(
blocked_training_algorithms=["logistic_regression"],
enable_onnx_compatible_models=True
)
在提交自動化 ML 作業之前,請先判斷您想要解決的機器學習問題種類。 此問題會決定您的作業所使用的函式,以及其所套用的模型演算法。
自動化 ML 支援不同的工作型態:
表格式數據型工作
計算機視覺工作,包括
自然語言處理工作,包括
如需詳細資訊,請參閱 工作類型。 如需設定預測作業的詳細資訊,請參閱 設定 AutoML 以定型時間序列預測模型。
在自動化和微調程序進行期間,自動化機器學習會嘗試使用不同的模型和演算法。 身為使用者,您不需要指定演算法。
工作方法會決定要套用的演算法或模型清單。 若要使用可用的模型進一步修改反覆專案以包含或排除,請在allowed_training_algorithms
作業的組態中使用 training
或 blocked_training_algorithms
參數。
在下表中,探索每個機器學習工作支持的演算法。
分類 | 迴歸 | 時間序列預測 |
---|---|---|
羅吉斯迴歸* | 彈性網路* | AutoARIMA |
Light GBM* | Light GBM* | Prophet |
漸層停駐提升* | 漸層停駐提升* | 彈性網路 |
決策樹* | 決策樹* | Light GBM |
K 最近鄰演算法* | K 最近鄰演算法* | K 最近鄰演算法 |
線性 SVC* | LARS Lasso* | 決策樹 |
支援向量分類 (SVC)* | 隨機梯度下降 (SGD)* | Arimax |
隨機樹系* | 隨機樹系 | LARS Lasso |
極度隨機樹狀結構* | 極度隨機樹狀結構* | 極度隨機樹狀結構* |
Xgboost* | Xgboost* | 隨機樹系 |
貝氏機率分類* | Xgboost | TCNForecaster |
隨機梯度下降 (SGD)* | 隨機梯度下降 (SGD) | 漸層停駐提升 |
ExponentialSmoothing | ||
SeasonalNaive | ||
平均 | ||
樸素 | ||
SeasonalAverage |
使用其他演演算法:
如需每個工作類型的筆記本範例,請參閱 automl-standalone-jobs。
primary_metric
參數會決定在模型定型期間要用於最佳化的計量。 您選擇的工作類型會決定您可以選取的計量。
選擇自動化機器學習的主要計量以優化取決於許多因素。 建議您優先考慮選擇最能代表您商務需求的計量。 然後考慮計量是否適合您的數據集配置檔,包括數據大小、範圍和類別散發。 下列各節會摘要說明根據工作類型和商務案例所建議的主要計量。
若要了解這些計量的特定定義,請參閱 評估自動化機器學習實驗結果。
這些計量適用於所有分類案例,包括表格式數據、影像或計算機視覺,以及自然語言處理文字(NLP-Text)。
臨界值相依的計量,例如 accuracy
、 recall_score_weighted
、 norm_macro_recall
、 和 precision_score_weighted
,可能無法針對小型數據集進行優化、具有大型類別扭曲(類別不平衡),或當預期的計量值非常接近0.0或1.0時。 在這些情況下,AUC_weighted
會是比較好的主要計量選擇。 自動化機器學習完成之後,您可以根據最適合您業務需求的計量來選擇獲勝模型。
計量 | 範例使用案例 |
---|---|
accuracy |
影像分類、情感分析、客戶流失預測 |
AUC_weighted |
詐騙偵測、影像分類、異常偵測/垃圾郵件偵測 |
average_precision_score_weighted |
情感分析 |
norm_macro_recall |
流失預測 |
precision_score_weighted |
對於文字分類多標籤,目前「精確度」是唯一支援的主要計量。
針對影像分類多標籤,支援的主要計量定義於列舉中 ClassificationMultilabelPrimaryMetrics
。
對於 NLP 文字具名實體辨識(NER),目前「精確度」是唯一支援的主要計量。
r2_score
、 normalized_mean_absolute_error
和 normalized_root_mean_squared_error
都嘗試將預測錯誤降到最低。 r2_score
和 normalized_root_mean_squared_error
都會將均方誤差降至最低,normalized_mean_absolute_error
則會將誤差的平均絕對值降至最低。 絕對值會處理所有大小的錯誤,而平方誤差對於具有較大絕對值的錯誤會有更大的懲罰。 根據較大的錯誤是否應該受到更多懲罰,您可以選擇優化平方誤差或絕對錯誤。
r2_score
和 normalized_root_mean_squared_error
的主要差異在於其正規化方式與其意義。 normalized_root_mean_squared_error
是依範圍正規化的均方根誤差,可解讀為預測的平均誤差量級。 r2_score
是由資料變異數的估計值加以正規化的平均平方誤差。 這是模型可以擷取的變化比例。
注意
r2_score
和 normalized_root_mean_squared_error
的行為模式和主要計量類似。 如果套用固定驗證集,這兩個計量會優化相同的目標、平均平方誤差,並由同一個模型優化。 如果只有定型集可供使用且套用了交叉驗證,則這兩個計量會稍有不同,因為 normalized_root_mean_squared_error
的正規化程式會固定為定型集的範圍,但是 r2_score
的正規化程式會隨每個摺疊而異,因為其為每個摺疊的變異數。
如果排名,而不是確切的值,是感興趣的, spearman_correlation
可能是更好的選擇。 它會測量實際值與預測之間的排名相互關聯。
自動化 ML 目前不支援測量 預測與觀察之間相對 差異的任何主要計量。 計量 r2_score
、normalized_mean_absolute_error
和 normalized_root_mean_squared_error
都是絕對差異的量值。 例如,如果預測與觀察相差 10 個單位,則如果觀察值為 20 單位或 20,000 單位,則這些計量會計算出相同的值。 相反地,百分比差異是相對量值,分別提供50%和0.05%的錯誤。 若要針對相對差異進行優化,您可以使用支援的主要計量執行自動化 ML,然後選取具有最佳 mean_absolute_percentage_error
或 root_mean_squared_log_error
的模型。 當任何觀察值為零時,這些計量都是未定義的,因此它們不一定是不錯的選擇。
計量 | 範例使用案例 |
---|---|
spearman_correlation |
|
normalized_root_mean_squared_error |
價格預測 (房屋/產品/小費)、評論分數預測 |
r2_score |
飛機延誤、薪水預估、錯誤解決時間 |
normalized_mean_absolute_error |
建議類似於回歸案例的建議。
計量 | 範例使用案例 |
---|---|
normalized_root_mean_squared_error |
價格預測 (預測)、庫存最佳化、需求預測 |
r2_score |
價格預測 (預測)、庫存最佳化、需求預測 |
normalized_mean_absolute_error |
針對影像物件偵測,支援的主要計量定義於列舉中 ObjectDetectionPrimaryMetrics
。
針對映像實例分割案例,支援的主要計量定義於列舉中 InstanceSegmentationPrimaryMetrics
。
在每個自動化機器學習實驗中,您的數據會自動轉換成數位和向量。 數據也會調整和正規化,以協助區分不同縮放比例特徵的演算法。 這些資料轉換稱為特徵化。
注意
自動化機器學習特徵化步驟,例如功能正規化、處理遺漏的數據,以及將文字轉換成數值,會成為基礎模型的一部分。 當您使用模型進行預測時,定型期間套用的相同特徵化步驟會自動套用至您的輸入數據。
當您設定自動化機器學習作業時,您可以啟用或停用設定 featurization
。
下表說明認可的特徵化設定。
特徵化設定 | 描述 |
---|---|
"mode": 'auto' |
表示,在前置處理中, 會自動執行數據護欄和特徵化步驟 。 此值是預設設定。 |
"mode": 'off' |
指出不應自動執行特徵化步驟。 |
"mode": 'custom' |
指出應使用自訂的特徵化步驟。 |
下列程式碼說明在此案例中,如何針對迴歸作業提供自訂特徵化。
from azure.ai.ml.automl import ColumnTransformer
transformer_params = {
"imputer": [
ColumnTransformer(fields=["CACH"], parameters={"strategy": "most_frequent"}),
ColumnTransformer(fields=["PRP"], parameters={"strategy": "most_frequent"}),
],
}
regression_job.set_featurization(
mode="custom",
transformer_params=transformer_params,
blocked_transformers=["LabelEncoding"],
column_name_and_types={"CHMIN": "Categorical"},
)
您可以在函式中 set_limits()
定義幾個選項,以在作業完成之前結束實驗。
準則 | description |
---|---|
無準則 | 如果您未定義任何結束參數,實驗會繼續進行,直到您的主要計量沒有進一步進展為止。 |
timeout |
定義實驗要持續執行的時間 (以分鐘為單位)。 如果未指定,默認作業的總逾時為六天(8,640 分鐘)。 若要指定逾時少於或等於 1 小時 (60 分鐘),請確定資料集的大小不超過 10,000,000 (資料列乘以資料行),或確定結果正確無誤。 此逾時包括設定、特徵化和定型執行,但不包含在程序結束時執行的合奏和模型可解釋性執行,因為這些動作必須在完成所有試驗(子作業)之後發生。 |
trial_timeout_minutes |
每個試驗 (子項目作業) 在終止前可執行的時間上限 (單位:分鐘)。 如果未指定,則會使用1個月或43200分鐘的值。 |
enable_early_termination |
如果分數在短期內沒有改善,是否要結束工作。 |
max_trials |
每次試驗/執行次數上限時,每個試驗都有不同的演算法和超參數組合,以在作業期間嘗試。 如果未指定,則預設值為1,000個試用版。 如果您使用 enable_early_termination ,使用的試用版數目可能會較小。 |
max_concurrent_trials |
表示要平行執行的試驗 (子項目作業) 數目上限。 最好將此數位與叢集的節點數目相符。 |
提交實驗以執行與產生模型。
注意
如果您多次執行具有相同組態設定和主要計量的實驗,您可能會在每個實驗最終計量分數和產生的模型中看到變化。 自動化機器學習採用的演算法具有固有的隨機性,可能會導致實驗輸出的模型和建議模型的最終計量分數稍有變化,例如精確度。 您也可以看到具有相同模型名稱的結果,但使用不同的超參數。
警告
如果您已透過工作區在防火牆或網路安全組中設定規則,請確認已依照設定輸入和輸出網路流量中所 定義的輸入和輸出網路流量來授與必要的許可權。
以必要條件建立 MLClient
後,即可在工作區執行下列命令。
# Submit the AutoML job
returned_job = ml_client.jobs.create_or_update(
classification_job
) # submit the job to the backend
print(f"Created job: {returned_job}")
# Get a URL for the status of the job
returned_job.services["Studio"].endpoint
您可以在已執行其他實驗的叢集上,執行自動化 ML 實驗子執行。 不過,時機取決於叢集擁有的節點數目,以及這些節點是否可用來執行不同實驗。
叢集中的每個節點都會作為可完成單一定型執行的個別虛擬機(VM)。 對於自動化 ML,這個事實表示子系執行。 如果所有節點都處於忙碌狀態,系統會將新實驗排入佇列。 如果有免費節點,新的實驗會在可用的節點或虛擬機中平行執行子執行。
為了協助管理子執行,以及其執行時機,建議您為每個實驗建立專用叢集,並將實驗數目與叢集中的節點數目 max_concurrent_iterations
相符。 如此一來,您就可以同時使用叢集的所有節點,以及您想要的並行子執行和反覆項目數目。
在 limits
在組態中設定 max_concurrent_iterations
。 如果未設定,則每個實驗預設只允許一個並行子執行/反覆專案。 針對計算實例, max_concurrent_trials
可以設定為與計算實例虛擬機上的核心數目相同。
自動化 ML 提供了一些選項供您監視及評估定型結果。
如需針對每次執行提供的效能圖表與計量定義和範例,請參閱評估自動化機器學習實驗結果。
若要取得特徵化摘要,以及了解已新增至特定模型的特徵,請參閱特徵化透明度。
從模型頁面的 Azure 機器學習 UI,您也可以檢視在定型特定模型時所使用的超參數,以及檢視和自定義使用的內部模型定型程式代碼。
測試模型並確認要在生產環境中使用之後,便可註冊該模型以供稍後使用。
若要在機器學習作業工作流程中使用自動化 ML,您可以將 AutoML 作業步驟新增至 Azure 機器學習 管線。 這種方法可讓您將數據準備腳本連結至自動化 ML,將整個工作流程自動化。 然後註冊並驗證產生的最佳模型。
此程式代碼是具有 自動化 ML 分類元件的範例管線 ,以及顯示結果輸出的命令元件。 程式代碼會參考不同步驟中的輸入(定型和驗證數據)和輸出(最佳模型)。
# Define pipeline
@pipeline(
description="AutoML Classification Pipeline",
)
def automl_classification(
classification_train_data,
classification_validation_data
):
# define the automl classification task with automl function
classification_node = classification(
training_data=classification_train_data,
validation_data=classification_validation_data,
target_column_name="y",
primary_metric="accuracy",
# currently need to specify outputs "mlflow_model" explictly to reference it in following nodes
outputs={"best_model": Output(type="mlflow_model")},
)
# set limits and training
classification_node.set_limits(max_trials=1)
classification_node.set_training(
enable_stack_ensemble=False,
enable_vote_ensemble=False
)
command_func = command(
inputs=dict(
automl_output=Input(type="mlflow_model")
),
command="ls ${{inputs.automl_output}}",
environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu:latest"
)
show_output = command_func(automl_output=classification_node.outputs.best_model)
pipeline_job = automl_classification(
classification_train_data=Input(path="./training-mltable-folder/", type="mltable"),
classification_validation_data=Input(path="./validation-mltable-folder/", type="mltable"),
)
# set pipeline level compute
pipeline_job.settings.default_compute = compute_name
# submit the pipeline job
returned_pipeline_job = ml_client.jobs.create_or_update(
pipeline_job,
experiment_name=experiment_name
)
returned_pipeline_job
# ...
# Note that this is a snippet from the bankmarketing example you can find in our examples repo -> https://github.com/Azure/azureml-examples/tree/main/sdk/python/jobs/pipelines/1h_automl_in_pipeline/automl-classification-bankmarketing-in-pipeline
如需如何在管線中包含自動化 ML 的更多範例,請參閱範例存放 庫。
針對大型數據案例,自動化 ML 支援一組有限的模型分散式定型:
分散式演算法 | 支援的工作 | 資料大小限制 (大約) |
---|---|---|
LightGBM | 分類、迴歸 | 1 TB |
TCNForecaster | 預測 | 200 GB |
分散式定型演算法會自動分割資料,並將資料分散到多個計算節點以進行模型定型。
注意
分散式定型模式目前不支援交叉驗證、集成模型、ONNX 支援和程式碼產生。 此外,自動 ML 也可以做出選擇,例如限制用於驗證、說明性和模型評估的可用特徵化程式和子取樣數據。
若要使用分散式定型進行分類或回歸,請設定 training_mode
作業物件的 和 max_nodes
屬性。
屬性 | 說明 |
---|---|
training_mode | 表示訓練模式: distributed 或 non_distributed 。 預設為 non_distributed 。 |
max_nodes | 每個試用版要用於定型的節點數目。 此設定必須大於或等於 4。 |
下列程式碼範例顯示分類作業的這些設定範例:
from azure.ai.ml.constants import TabularTrainingMode
# Set the training mode to distributed
classification_job.set_training(
allowed_training_algorithms=["LightGBM"],
training_mode=TabularTrainingMode.DISTRIBUTED
)
# Distribute training across 4 nodes for each trial
classification_job.set_limits(
max_nodes=4,
# other limit settings
)
注意
分類和回歸工作的分散式定型目前不支援多個並行試用版。 模型試用使用 max_nodes
個節點依序執行每個試用版。 目前會忽略 max_concurrent_trials
限制設定。
若要了解分散式定型如何針對預測工作運作,請參閱 大規模預測。 若要使用分散式定型進行預測,您必須設定 training_mode
、enable_dnn_training
、 max_nodes
及選擇性地設定作業物件的 max_concurrent_trials
屬性。
屬性 | 說明 |
---|---|
training_mode | 表示定型模式 distributed 或 non_distributed 。 預設為 non_distributed 。 |
enable_dnn_training | 設定此旗標以啟用深度類神經網路模型。 |
max_concurrent_trials | 此值是平行定型的試用模型數目上限。 預設值為 1。 |
max_nodes | 要用於定型的節點總數。 此設定必須大於或等於 2。 對於預測工作,每個試用模型都是使用 |
下列程式碼範例顯示預測作業的這些設定的範例:
from azure.ai.ml.constants import TabularTrainingMode
# Set the training mode to distributed
forecasting_job.set_training(
enable_dnn_training=True,
allowed_training_algorithms=["TCNForecaster"],
training_mode=TabularTrainingMode.DISTRIBUTED
)
# Distribute training across 4 nodes
# Train 2 trial models in parallel => 2 nodes per trial
forecasting_job.set_limits(
max_concurrent_trials=2,
max_nodes=4,
# other limit settings
)
如需完整組態程式代碼的範例,請參閱先前的 組態 和 作業提交小節。
訓練
模組
瞭解如何使用自動化機器學習來尋找最佳分類模型(AutoML)。 您將使用 Python SDK (v2) 來設定和執行 AutoML 作業。
認證
Microsoft Certified: Azure Data Scientist Associate - Certifications
使用 Python、Azure Machine Learning 和 MLflow 來管理資料擷取和準備、訓練及部署模型,以及監視機器學習解決方案。
文件
在 Studio 中設定表格式資料的自動化 ML - Azure Machine Learning
了解如何在 Azure Machine Learning 工作室中使用自動化 ML,針對表格式資料設定自動化 ML 訓練作業,而不需使用單行程式碼。
資料特徵化與自動化機器學習 - Azure Machine Learning
了解如何為 Azure Machine Learning 中的自動化 ML 實驗自訂資料特徵化設定。
使用自動化 ML 來防止過度學習與不平衡資料 - Azure Machine Learning
使用 Azure Machine Learning 中的自動化 ML,識別和管理機器學習模型的常見錯誤。