在自動化機器學習中設定定型、驗證、交叉驗證和測試數據
本文說明設定定型數據和驗證數據分割的選項,以及自動化機器學習 (自動化 ML) 實驗的交叉驗證設定。 在 Azure 機器學習 中,當您使用自動化 ML 來建置多個機器學習模型時,每個子回合都必須藉由計算該模型的品質計量來驗證相關模型,例如曲線 (AUC) 加權下的精確度或區域。 這些計量的計算方式是將使用每個模型所做的預測與驗證資料中過去觀察的真實標籤比較。 自動化 ML 實驗會自動執行模型驗證。
下列各節說明如何使用 Azure 機器學習 Python SDK 自定義驗證設定。 若要深入瞭解如何根據驗證類型計算計量,請參閱 設定交叉驗證 的計量計算一節。 如果您在低程式代碼或無程式代碼體驗中感興趣,請參閱在 Azure Machine Learning 工作室 中建立自動化 ML 實驗。
必要條件
Azure Machine Learning 工作區。 若要建立工作區,請參閱建立工作區資源。
熟悉使用 Azure 機器學習 SDK 設定自動化 ML 實驗。 若要查看基本的自動化機器學習實驗設計模式,請完成使用 Python 定型物件偵測模型教學課程或設定 AutoML 定型指南。
了解定型/驗證資料分割和交叉驗證做為機器學習的概念。 如需高階說明,請參閱下列文章:
重要
本文中的 Python 命令需要最新的 azureml-train-automl
套件版本。
- 將最新的
azureml-train-automl
套件安裝到您的本機環境。 - 如需最新
azureml-train-automl
套件的詳細資訊,請參閱版本資訊。
在機器學習中設定預設數據分割和交叉驗證
若要在機器學習中設定預設數據分割和交叉驗證,請使用 AutoMLConfig Class 物件來定義您的實驗和定型設定。 在下列範例中,只會定義必要的參數。 n_cross_validations
不包含和 validation_data
參數。
注意
在預測案例中,不支援預設數據分割和交叉驗證。
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = dataset,
label_column_name = 'Class'
)
如果您未明確指定 validation_data
或 n_cross_validations
參數,自動化 ML 會根據單一數據集 training_data
中提供的數據列數目,套用預設技術。
定型資料大小 | 驗證技術 |
---|---|
大於 20,000 個資料列 | 套用定型/驗證資料分割。 預設值是以 10% 的初始定型資料集做為驗證集。 接著,該驗證集會用於計量計算。 |
小於 20,000 個資料列 | 套用交叉驗證方法。 預設的摺疊數目取決於資料列數目。 - 如果數據集小於 1,000 個數據列,則會使用 10 個折疊。 - 如果數據列介於 1,000 到 20,000 之間,則會使用三個折疊。 |
提供驗證數據集
您有兩個選項可用來提供驗證數據。 您可以從單一數據文件開始,並將它分割成定型數據和驗證數據集,也可以為驗證集提供個別的數據檔。 無論使用哪種方式,AutoMLConfig
物件中的 validation_data
參數都會指派要作為驗證集的資料。 此參數只會接受 Azure Machine Learning 資料集或 Pandas 資料框架格式的資料集。
以下是使用驗證參數的其他一些考慮:
- 您只能設定一個驗證參數,參數
validation_data
或n_cross_validations
參數,但不能同時設定兩者。 - 當您使用
validation_data
參數時,也必須指定training_data
和label_column_name
參數。
下列範例會明確定義用於定型 () 和驗證validation_data
的training_data
哪個dataset
部分:
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
training_data, validation_data = dataset.random_split(percentage=0.8, seed=1)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = training_data,
validation_data = validation_data,
label_column_name = 'Class'
)
提供驗證數據集大小
當您提供驗證集大小時,您只提供實驗的單一數據集。 validation_data
未指定 參數,而且提供的數據集會指派給 training_data
參數。
在您的 AutoMLConfig
物件中,您可以設定 validation_size
參數來保存定型資料的一部分以用於驗證。 針對此策略,自動化 ML 作業會將驗證集從您提供的初始 training_data
設定分割。 此值應介於 0.0 和 1.0 之間(例如,0.2 表示 20% 的數據會保留給驗證數據)。
注意
在預測案例中, validation_size
不支持 參數。
下列範例提供實驗的單 dataset
一。 會 training_data
存取完整的資料集,並將 20% 的資料集設定用於驗證 (validation_size = 0.2
):
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = dataset,
validation_size = 0.2,
label_column_name = 'Class'
)
執行 K 折交叉驗證
若要執行 K 折交叉驗證,請包含 n_cross_validations
參數並定義折疊數目。 此參數會根據相同的摺疊數目來設定要執行的交叉驗證數目。
下列範例會定義五個交叉驗證折疊。 此程式會執行五個不同的訓練,其中每個定型都會使用 4/5 的數據。 每次驗證都會使用 1/5 的數據與不同的保留折疊。 因此,系統會使用五個驗證計量的平均值來計算計量。
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = dataset,
n_cross_validations = 5
label_column_name = 'Class'
)
執行 Monte Carlo 交叉驗證
若要執行 Monte Carlo 交叉驗證,您可以在 validation_size
物件中包含 AutoMLConfig
和 n_cross_validations
參數。
針對 Monte Carlo 交叉驗證,自動化 ML 會將 validation_size
參數所指定的定型資料部分留出以用於驗證,然後指派其餘的資料用於定型。 接著會根據 參數中指定的 n_cross_validations
值重複此程式,每次都會隨機產生新的定型和驗證分割。
注意
在預測案例中,不支援 Monte Carlo 交叉驗證。
下列範例會定義交叉驗證的七個折疊,以及 20% 的定型數據以進行驗證。 此程式會執行七個不同的定型,其中每個定型都會使用80%的數據。 每次驗證都會使用不同的保留折疊來使用 20% 的數據。
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/creditcard.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = dataset,
n_cross_validations = 7
validation_size = 0.2,
label_column_name = 'Class'
)
指定自訂交叉驗證資料摺疊
您也可以提供自己的交叉驗證 (CV) 資料摺疊。 這種方法被視為更進階的案例,因為您可以指定要分割及用於驗證的數據行。 您可以在定型數據中包含自定義 CV 分割資料行,並藉由在 參數中 cv_split_column_names
填入數據行名稱來指定哪些數據行。 每個數據行都代表一個交叉驗證分割,且整數值為1或0。 值為 1 表示數據列應該用於定型。 值為 0 表示數據列應該用於驗證。
注意
在預測案例中, cv_split_column_names
不支持 參數。
下列範例包含兩個 CV 分割資料行 cv1
和 cv2
的銀行營銷數據:
data = "https://automlsamplenotebookdata.blob.core.windows.net/automl-sample-notebook-data/bankmarketing_with_cv.csv"
dataset = Dataset.Tabular.from_delimited_files(data)
automl_config = AutoMLConfig(compute_target = aml_remote_compute,
task = 'classification',
primary_metric = 'AUC_weighted',
training_data = dataset,
label_column_name = 'y',
cv_split_column_names = ['cv1', 'cv2']
)
注意
若要使用 cv_split_column_names
搭配 training_data
和 label_column_name
,請升級您的 Azure Machine Learning Python SDK 版本 1.6.0 或更新版本。 針對先前的 SDK 版本,請參閱使用 cv_splits_indices
,但請注意,它只會搭配 X
和 y
資料集輸入使用。
設定交叉驗證的計量計算
使用 K 折疊或 Monte Carlo 交叉驗證時,計量會在每個驗證摺疊上計算,然後彙總。 彙總作業是純量計量和圖表總和的平均。 交叉驗證期間計算的計量是以所有摺疊為基礎,因此所有樣本會來自定型集。 如需詳細資訊,請參閱 評估自動化 ML 實驗結果。
使用自訂驗證集或自動選取的驗證集時,只會從該驗證集計算模型評估計量,而不是從定型資料。
提供測試資料集 (預覽)
重要
此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。
如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款。
您也可以提供測試資料來評估自動化 ML 在實驗完成時為您產生的建議模型。 當您提供測試數據時,數據會被視為與定型和驗證分開,以避免對建議模型測試回合的結果產生任何偏差影響。 如需詳細資訊,請參閱 定型、驗證和測試資料。
警告
測試資料集功能不適用於下列自動化 ML 案例:
測試資料集的格式必須是 Azure Machine Learning TabularDataset。 您可以使用 AutoMLConfig
物件中的 test_data
和 test_size
參數來指定測試資料集。 這些參數是互斥的,而且不能同時指定或搭配 cv_split_column_names
或 cv_splits_indices
參數。
在您的 AutoMLConfig
物件中 test_data
,使用 參數來指定現有的數據集:
automl_config = AutoMLConfig(task='forecasting',
...
# Provide an existing test dataset
test_data=test_dataset,
...
forecasting_parameters=forecasting_parameters)
若要使用定型/測試分割而不是直接提供測試資料,請在建立 AutoMLConfig
時使用 test_size
參數。 此參數必須是介於 0.0 和 1.0 獨佔之間的浮點值。 它會指定要用於測試數據集的定型數據集百分比。
automl_config = AutoMLConfig(task = 'regression',
...
# Specify train/test split
training_data=training_data,
test_size=0.2)
以下是使用測試數據集的其他一些考慮:
- 針對迴歸工作,會使用隨機取樣。
- 對於分類工作,會使用分層取樣,但在分層取樣不可行時,會使用隨機取樣作為後援。
注意
在預測案例中,您目前無法使用定型/測試分割搭配 test_size
參數來指定測試數據集。
將 test_data
或 test_size
參數傳遞至 AutoMLConfig
物件時,會在實驗完成時自動觸發遠程測試回合。 此測試執行會使用提供的測試資料來評估自動化 ML 建議的最佳模型。 如需詳細資訊,請參閱 取得測試作業結果。