自動機械学習でのトレーニング、検証、クロス検証、テストのデータを構成する
適用対象: Python SDK azureml v1
この記事では、自動機械学習 (自動 ML) 実験用のトレーニング データと検証データの分割、およびクロス検証の設定を構成するためのオプションについて説明します。 Azure Machine Learning において自動 ML を使用して複数の機械学習モデルを構築する場合、それぞれの子の実行では、精度や曲線下面積 (AUC) の重み付けなど、そのモデルの品質メトリックを計算することで関連モデルを検証する必要があります。 これらのメトリックは、各モデルで行われた予測を、検証データの過去の観測からの実際のラベルと比較することによって計算されます。 自動 ML の実験によって、モデルの検証が自動的に実行されます。
次のセクションでは、Azure Machine Learning Python SDK を使用して、検証の設定をカスタマイズする方法について説明します。 検証の種類に基づいてメトリックを計算する方法の詳細については、「クロス検証のメトリック計算を設定する」のセクションを参照してください。 ロー コードまたはノー コードのエクスペリエンスに興味がある場合は、「Azure Machine Learning スタジオ内で自動 ML の実験を作成する」を参照してください。
前提条件
Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「ワークスペース リソースの作成」を参照してください。
Azure Machine Learning SDK を使用した自動 ML 実験の設定に関する知識。 基本的な自動機械学習実験の設計パターンを確認するには、オブジェクト検出モデルをトレーニングするのチュートリアル、または「Python で AutoML トレーニングを設定する」のガイドを完了してください。
機械学習の概念としてのトレーニングと検証データの分割およびクロス検証に関する知識。 大まかな説明については、次の記事を参照してください。
重要
この記事の Python コマンドでは、最新の azureml-train-automl
パッケージ バージョンが必要です。
- 最新の
azureml-train-automl
パッケージをローカル環境にインストールします。 - 最新の
azureml-train-automl
パッケージの詳細については、リリース ノートを参照してください。
機械学習での既定のデータ分割とクロス検証を設定する
機械学習での既定のデータ分割とクロス検証を設定するには、 AutoMLConfig クラス オブジェクトを使用して実験とトレーニングの設定を定義します。 次の例では、必要なパラメーターのみが定義されています。 n_cross_validations
および validation_data
パラメーターは含まれていません。
Note
予測シナリオでは、既定のデータ分割とクロス検証はサポートされていません。
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 では 1 つのデータセット training_data
の中で指定された行数に応じて既定の手法が適用されます。
トレーニング データのサイズ | 検証の方法 |
---|---|
20,000 行を超える | トレーニング/検証データの分割が適用されます。 既定では、初期トレーニング データ セットの 10% が検証セットとして取得されます。 次に、その検証セットがメトリックの計算に使用されます。 |
20,000 行未満 | クロス検証アプローチが適用されます。 フォールドの既定の数は行数によって異なります。 - データセットが 1,000 行より少ない場合は、10 のフォールドが使用されます。 - 行数が 1,000 から 20,000 の間の場合は、3 つのフォールドが使用されます。 |
検証データセットを指定する
検証データを指定するには、2 つのオプションがあります。 1 つのデータ ファイルから始めて、それをトレーニング データと検証データのセットに分割するか、検証セット用に個別のデータ ファイルを指定することができます。 どちらの方法でも、AutoMLConfig
オブジェクトの validation_data
パラメーターによって、検証セットとして使用するデータが割り当てられます。 このパラメーターは、Azure Machine Learning データセットまたは Pandas データフレームの形式のデータセットのみを受け入れます。
検証パラメーターの操作に関するその他の考慮事項を次に示します。
validation_data
パラメーターまたはn_cross_validations
パラメーターのいずれか 1 つの検証パラメーターのみを設定できますが、両方を設定することはできません。validation_data
パラメーターを使用する場合は、training_data
とlabel_column_name
パラメーターも指定する必要があります。
次の例では、トレーニング (training_data
) と検証 (validation_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'
)
検証データセットのサイズを指定する
検証セットのサイズを指定する場合は、実験用のデータセットを 1 つだけ指定します。 validation_data
パラメーターは指定せず、指定されたデータセットは training_data
パラメーターに割り当てられます。
AutoMLConfig
オブジェクトでは、検証用にトレーニング データの一部を提示するように validation_size
パラメーターを設定できます。 この戦略では、自動 ML ジョブによって、指定した最初の training_data
から検証セットが分割されます。 この値は 0.0 より大きく 1.0 未満である必要があります (たとえば、0.2 は、データの 20% が検証データ用に保持されることを意味します)。
Note
予測シナリオでは、validation_size
パラメーターはサポートされていません。
次の例では、実験に 1 つの 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
パラメーターを含めて、フォールドの数を定義します。 このパラメーターは、同じフォールド数に基づいて、実行するクロス検証の回数を設定します。
Note
ディープ ニューラル ネットワーク (DNN) を使用する分類シナリオでは、n_cross_validations
パラメーターはサポートされていません。
予測シナリオについては、時系列予測モデルをトレーニングするための AutoML の設定に関するページで、クロス検証を適用する方法を参照してください。
次の例では、クロス検証用に 5 つのフォールドを定義します。 このプロセスでは 5 つの異なるトレーニングが実行され、各トレーニングではデータの 4/5 が使用されます。 各検証では、データの 1/5 (毎回異なるホールドアウト フォールド) が使用されます。 その結果、メトリックは、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'
)
モンテカルロ クロス検証を実行する
モンテカルロ クロス検証を実行するには、AutoMLConfig
オブジェクト内に validation_size
と n_cross_validations
の両方のパラメーターを含めます。
モンテカルロ クロス検証の場合、validation_size
パラメーターで指定されたトレーニング データの一部が検証用に確保され、残りのデータがトレーニング用に割り当てられます。 次に、このプロセスは n_cross_validations
パラメーター内で指定された値に基づいて繰り返されます。これにより、毎回、新しいトレーニングと検証の分割がランダムに生成されます。
Note
予測シナリオでは、モンテカルロ クロス検証はサポートされていません。
次の例では、クロス検証用に 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 つのクロス検証分割を表し、1 または 0 の整数値が含まれます。 値 1 は、その行をトレーニングに使用する必要があることを示します。 値 0 は、その行を検証に使用する必要があることを示します。
Note
予測シナリオでは、cv_split_column_names
パラメーターはサポートされていません。
次の例では、2 つの 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']
)
Note
cv_split_column_names
を training_data
および label_column_name
と共に使用するには、Azure Machine Learning Python SDK バージョン 1.6.0 以降をアップグレードしてください。 以前のバージョンの SDK の場合は、cv_splits_indices
の使用を参照してください。ただし、X
と y
のデータセット入力のみで使用されていることに注意してください。
クロス検証のメトリック計算を設定する
K 分割またはモンテカルロ クロス検証を使用すると、各検証のフォールドでメトリックが計算され、集計されます。 この集計操作は、スカラー メトリックの平均であり、グラフの合計です。 クロス検証中に計算されるメトリックは、すべてのフォールドに基づいているため、トレーニング セットのすべてのサンプルです。 詳細については、「自動機械学習実験の結果を評価する」を参照してください。
カスタム検証セットまたは自動的に選ばれた検証セットを使うと、モデルの評価メトリックは、トレーニング データではなく、その検証セットからのみ計算されます。
テスト データセットを指定する (プレビュー)
重要
現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。
詳しくは、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)
テスト データセットの操作に関するその他の考慮事項を次に示します。
- 回帰タスクの場合は、ランダム サンプリングが使われます。
- 分類タスクでは層化サンプリングが使用されますが、層化サンプリングを実行できない場合は、フォールバックとしてランダム サンプリングが使用されます。
Note
予測シナリオでは、現在、test_size
パラメーターでトレーニング/テスト分割を使用してテスト データセットを指定することはできません。
test_data
または test_size
のパラメーターを AutoMLConfig
オブジェクトに渡すと、実験の完了時にリモート テストの実行が自動的にトリガーされます。 このテストの実行には、指定したテスト データが使われ、自動 ML によって推奨される最適なモデルが評価されます。 詳細については、「テスト ジョブの結果を取得する」を参照してください。