在自動化機器學習中設定定型、驗證、交叉驗證和測試資料

適用於:Python SDK azureml v1

在本文中,您將了解設定定型資料和驗證資料分割的不同選項,以及自動化機器學習、自動化 ML、實驗的交叉驗證設定。

在 Azure Machine Learning 中,當您使用自動化 ML 來建置多個 ML 模型時,每個子系執行都必須藉由計算該模型的品質計量 (例如精確度或 AUC 加權) 來驗證相關的模型。 這些計量的計算方式是將使用每個模型所做的預測與驗證資料中過去觀察的真實標籤比較。 深入了解如何根據驗證類型計算計量

自動化 ML 實驗會自動執行模型驗證。 下列各節描述如何使用 Azure Machine Learning Python SDK 來進一步自訂驗證設定。

若要僅使用少量程式碼或不使用程式碼的體驗,請參閱在 Azure Machine Learning 工作室中建立自動化機器學習實驗

必要條件

針對本文,您需要,

重要

本文中的 Python 命令需要最新的 azureml-train-automl 套件版本。

機器學習中的預設資料分割和交叉驗證

使用 AutoMLConfig 物件來定義您的實驗和定型設定。 在下列程式碼片段中,請注意,只會定義必要參數,也就是說不會包含 n_cross_validationsvalidation_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_datan_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 參數也需要設定 training_datalabel_column_name 參數。 您只能設定一個驗證參數,也就是您只能指定 validation_datan_cross_validations,而不能兩者都指定。

下列程式碼範例會明確定義 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 參數來保存定型資料的一部分以用於驗證。 這表示驗證集將由初始 training_data 提供的自動化 ML 進行分割。 此值應介於 0.0 和 1.0 (不含) 之間 (例如,0.2 表示會保留 20% 的資料用於驗證資料)。

注意

預測案例中不支援 validation_size 參數。

請參閱以下程式碼範例:

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 參數,並為其設定某值。 此參數會根據相同的摺疊數目來設定要執行的交叉驗證數目。

注意

使用深度神經網路的分類案例中不支援 n_cross_validations 參數。 針對預測案例,請參閱設定 AutoML 以定型時間序列預測模型以了解如何套用交叉驗證。

在下列程式碼中,會定義用於交叉驗證的五個摺疊。 因此,五個不同的定型,每個定型使用 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 交叉驗證,請在您的 AutoMLConfig 物件中包含 validation_sizen_cross_validations 參數。

針對 Monte Carlo 交叉驗證,自動化 ML 會將 validation_size 參數所指定的定型資料部分留出以用於驗證,然後指派其餘的資料用於定型。 然後會根據 n_cross_validations 參數中指定的值來重複此程序;這會每次都隨機產生新的定型和驗證分割。

注意

預測案例中不支援 Monte Carlo 交叉驗證。

下列程式碼會定義用於交叉驗證的 7 個摺疊,而 20% 的定型資料應該用於驗證。 因此,7 個不同的定型,每個定型使用 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_datalabel_column_name,請升級您的 Azure Machine Learning Python SDK 版本 1.6.0 或更新版本。 針對先前的 SDK 版本,請參閱使用 cv_splits_indices,但請注意,它只會搭配 Xy 資料集輸入使用。

機器學習中交叉驗證的計量計算

使用 K 折疊或 Monte Carlo 交叉驗證時,計量會在每個驗證摺疊上計算,然後彙總。 彙總作業是純量計量和圖表總和的平均。 交叉驗證期間計算的計量是以所有摺疊為基礎,因此所有樣本會來自定型集。 深入了解自動化機器學習中的計量

使用自訂驗證集或自動選取的驗證集時,只會從該驗證集計算模型評估計量,而不是從定型資料。

提供測試資料 (預覽)

重要

此功能目前處於公開預覽。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。

如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

您也可以提供測試資料來評估自動化 ML 在實驗完成時為您產生的建議模型。 提供測試資料時,它會被視為與定型和驗證不同,因此不會使得建議模型的測試執行結果產生偏差。 深入了解如何在自動化 ML 中定型、驗證及測試資料。

測試資料集的格式必須是 Azure Machine Learning TabularDataset。 您可以使用 AutoMLConfig 物件中的 test_datatest_size 參數來指定測試資料集。 這些參數都是互斥的,且無法同時或使用 cv_split_column_namescv_splits_indices 來指定。

使用 test_data 參數,指定要傳遞至 AutoMLConfig 物件的現有資料集。

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_datatest_size 參數傳遞至 AutoMLConfig 時,會在您的實驗完成時自動觸發遠端測試執行。 此測試執行會使用提供的測試資料來評估自動化 ML 建議的最佳模型。 深入了解如何從測試執行取得預測

下一步