次の方法で共有


自動機械学習でのトレーニング、検証、クロス検証、テストのデータを構成する

適用対象: Python SDK azureml v1

この記事では、自動機械学習 (自動 ML) 実験用のトレーニング データと検証データの分割、およびクロス検証の設定を構成するためのオプションについて説明します。 Azure Machine Learning において自動 ML を使用して複数の機械学習モデルを構築する場合、それぞれの子の実行では、精度や曲線下面積 (AUC) の重み付けなど、そのモデルの品質メトリックを計算することで関連モデルを検証する必要があります。 これらのメトリックは、各モデルで行われた予測を、検証データの過去の観測からの実際のラベルと比較することによって計算されます。 自動 ML の実験によって、モデルの検証が自動的に実行されます。

次のセクションでは、Azure Machine Learning Python SDK を使用して、検証の設定をカスタマイズする方法について説明します。 検証の種類に基づいてメトリックを計算する方法の詳細については、「クロス検証のメトリック計算を設定する」のセクションを参照してください。 ロー コードまたはノー コードのエクスペリエンスに興味がある場合は、「Azure Machine Learning スタジオ内で自動 ML の実験を作成する」を参照してください。

前提条件

重要

この記事の Python コマンドでは、最新の 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_datalabel_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_sizen_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 分割列 cv1cv2 を含む、銀行のマーケティング データが含まれています。

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_namestraining_data および label_column_name と共に使用するには、Azure Machine Learning Python SDK バージョン 1.6.0 以降をアップグレードしてください。 以前のバージョンの SDK の場合は、cv_splits_indices の使用を参照してください。ただし、Xy のデータセット入力のみで使用されていることに注意してください。

クロス検証のメトリック計算を設定する

K 分割またはモンテカルロ クロス検証を使用すると、各検証のフォールドでメトリックが計算され、集計されます。 この集計操作は、スカラー メトリックの平均であり、グラフの合計です。 クロス検証中に計算されるメトリックは、すべてのフォールドに基づいているため、トレーニング セットのすべてのサンプルです。 詳細については、「自動機械学習実験の結果を評価する」を参照してください。

カスタム検証セットまたは自動的に選ばれた検証セットを使うと、モデルの評価メトリックは、トレーニング データではなく、その検証セットからのみ計算されます。

テスト データセットを指定する (プレビュー)

重要

現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。

詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

実験終了後に自動 ML によって生成される推奨モデルを評価するために、テスト データを指定することもできます。 テスト データを指定すると、推奨モデルのテスト実行結果に偏りの影響が生じないように、そのデータはトレーニングおよび検証とは別であると見なされます。 詳細については、「トレーニング、検証、テストのデータ」を参照してください。

テスト データセットは Azure Machine Learning TabularDataset 形式にする必要があります。 AutoMLConfig オブジェクトで test_datatest_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 によって推奨される最適なモデルが評価されます。 詳細については、「テスト ジョブの結果を取得する」を参照してください。