AutoML モデルのデータ分割の概要

このページでは、Vertex AI がデータのトレーニング セット、検証セット、テストセットを使用して AutoML モデルをトレーニングする方法と、これらの 3 つのセット間でデータを分割する方法をどのように制御できるかについて説明します。AutoML では、トレーニング データのデータ型に応じて異なるデータ分割を使用します。

このページでは、画像データのデータ分割について説明します。表形式データのデータ分割については、表形式データのデータ分割をご覧ください。

画像データセットの場合、AutoML はトレーニング セットを使用してモデルをトレーニングし、検証セットを使用してモデルがトレーニング中に返す結果を検証します。トレーニングが完了すると、AutoML はテストセットを使用して最終評価指標を提供します。

Vertex AI ではデータを自動的に分割できます。データは、割合により 3 つのセットにランダムに分割されます。これはデータを分割する最も簡単な方法で、ほとんどの場合にうまく機能します。

設定 割合
トレーニング 80
検証 10
テスト 10

デフォルトのデータ分割を使用するには、 Google Cloud コンソールでデフォルト値をそのまま使用するか、API の split フィールドを空白のままにします。

データをセットに分割する方法を制御するには、次の方法があります。

これらのオプションから 1 つだけを選択します。選択はモデルのトレーニングの際に行います。これらのオプションの一部では、トレーニング データ(ml_use ラベルなど)の変更が必要です。データ分割オプション用のデータまたはラベルを含めても、そうしたオプションを使用する必要はありません。モデルをトレーニングするときに別のオプションを選択することもできます。

非構造化データの手動分割

手動分割は「事前定義分割」とも呼ばれます。

ml_use ラベルを使用してデータ分割を制御するには、データに ml_use ラベルを設定する必要があります。

ml_use ラベルの値の設定

画像データ用の ml_use ラベルは、データ インポート時に(データ項目ごと、またはインポート ファイル全体に対して)設定できます。また、 Google Cloud コンソールを使用してデータをインポートした後に設定することもできます。

インポート時に個々のデータ項目に ml_use を設定する

各データ項目に ml_use ラベルを設定するには、JSON Lines データに aiplatform.googleapis.com/ml_use フィールドの値を組み込むか、CSV ファイルの最初の列の値を設定します。詳細については、データ型に応じたデータの準備に関するページをご覧ください。

データ項目が繰り返される場合(同じ画像スニペットがインポート ファイルで複数回現れた場合)、Vertex AI では最初のデータ項目の ml_use 値が採用され、後続の ml_use 値は無視されます。最初に検出された項目が、必ずしもアップロード ファイルの先頭に近い項目であるとは限りません。

アップロード ファイル全体で ml_use を設定する

データを ml_use 値で並べ替えられて別のアップロード ファイルに設定できる場合、 Google Cloud コンソールを使用してファイルをアップロードする際にプルダウン メニューを使用するか、datasets.import メソッドの dataItemLabels マップ フィールドを使用することで、アップロード ファイル全体の ml_use 値を設定できます。

アップロード ファイルに ml_use を設定し、そのファイルにも ml_use 値が含まれる場合、そのファイルの ml_use 値がファイル全体の値よりも優先されます。

インポート後に ml_use を設定する

データをアップロードした後に、特定のデータ項目の ml_use 値を Google Cloud コンソールで設定または更新するには、リストに表示されている項目を 1 つ以上選択し、[ML 使用の割り当て] プルダウン メニューを使用します。

データファイルを再度アップロードしても、ml_use の値が変更されても、ml_use 値は更新されません。インポート後に Vertex AI API を使用して ml_use 値を更新することはできません。

ml_use ラベルを使用する

モデルをトレーニングするときに、 Google Cloud コンソールでデータ分割に [手動(詳細)] を指定します。Vertex AI API を使用してトレーニングする場合は、FilterSplit オブジェクトを使用します。このとき、トレーニング フィルタに labels.aiplatform.googleapis.com/ml_use=training、検証フィルタに labels.aiplatform.googleapis.com/ml_use=validation、テストフィルタに labels.aiplatform.googleapis.com/ml_use=test を指定します。例:

model = job.run(
dataset=dataset,
model_display_name=_name,
training_filter_split="labels.aiplatform.googleapis.com/ml_use=training",
validation_filter_split="labels.aiplatform.googleapis.com/ml_use=validation",
test_filter_split="labels.aiplatform.googleapis.com/ml_use=test")

ml_use 値を持つデータ項目はすべて、指定されたセットに割り当てられます。ml_use が設定されていないデータ項目は、トレーニング プロセスから除外されます。

データのフィルタ分割

Vertex AI API で FilterSplit オブジェクトを使用すると、他のラベル(ml-use を除く)や他のフィールドを使用してデータを分割できます。たとえば、trainingFilterlabels.flower=rosevalidationFilterlabels.flower=daisytestFilterlabels.flower=dahlia に設定できます。この設定により、rose とラベル付けされたすべてのデータはトレーニング セットに、daisy とラベル付けされたすべてのデータは検証セットに、dahlia とラベル付けされたすべてのデータはテストセットに追加されます。

複数のフィールドでフィルタする場合は、1 つのデータ項目が複数のフィルタと一致する可能性があります。この場合、トレーニング セットが優先され、検証セット、テストセットの順となります。つまり項目は、テストセットのフィルタと一致して、トレーニング フィルタと検証フィルタのどちらにも一致しない場合に限って、テストセットに配置されます。どのフィルタセットとも一致しない項目は、トレーニングから除外されます。

モデルで予測される内容に関連するデータ分割には、カテゴリを使用しないでください。各セットには、モデルが予測に使用するデータの範囲が反映されている必要があります。(たとえば、花の種類で画像を分類することを期待するモデルには、前述のフィルタを使用しないでください)

あるフィルタをどの項目にも一致させたくない場合は、「-」(マイナス記号)に設定します。

数学的分割

数学的分割は「比率分割」とも呼ばれます。

デフォルトでは、データはデータ型のデフォルトの割合に従ってランダムにセットに分割されます。この割合は、合計で 100 までの任意の値に変更できます(Vertex AI API については、合計で 1.0 までの比率を使用します)。

割合(比率)を変更するには、FractionSplit オブジェクトを使用して比率を定義します。データの種類が画像の場合、モデルのトレーニング時にGoogle Cloud コンソールを使用して分割の割合を変更することもできます。