このページでは、Google Cloud コンソールまたは Vertex AI API のどちらかを使用して、表形式のデータセットから分類モデルまたは回帰モデルをトレーニングする方法について説明します。
準備
モデルをトレーニングするには、次の作業を完了しておく必要があります。
モデルのトレーニング
Google Cloud コンソール
Google Cloud コンソールの [Vertex AI] セクションで、[データセット] ページに移動します。
モデルのトレーニングに使用するデータセットの名前をクリックして、詳細ページを開きます。
目的のデータ型でアノテーション セットが使用されている場合は、モデルで使用するアノテーション セットを選択します。
[新しいモデルのトレーニング] をクリックします。
[その他] を選択します。
[新しいモデルをトレーニング] ページで、次の手順を行います。
モデルのトレーニング方法を選択します。
AutoML
は幅広いユースケースに適しています。
[続行] をクリックします。
新しいモデルの表示名を入力します。
ターゲット列を選択します。
ターゲット列の値が、モデルによって予測されます。
ターゲット列の要件をご覧ください。
省略可: テスト データセットを BigQuery にエクスポートするには、[Export test dataset to BigQuery] のチェックボックスをオンにして、テーブルの名前を指定します。
省略可: データをトレーニング セット、テストセット、検証セットに分割する方法を選択するには、[詳細オプション] を開きます。次のデータ分割オプションから選択できます。
- ランダム(デフォルト): Vertex AI は各データセットに関連付けられた行をランダムに選択します。デフォルトでは、Vertex AI はデータ行の 80% をトレーニング セット、10% を検証セット、10% をテストセットに選択します。
- 手動: Vertex AI は、データ分割列の値に基づいて各データセットのデータ行を選択します。データ分割列の名前を指定します。
- 時系列: Vertex AI は、時間列のタイムスタンプに基づいてデータを分割します。時間列の名前を指定します。
データ分割をご覧ください。
[続行] をクリックします。
省略可: [統計情報を生成] をクリックします。統計情報を生成すると、[変換] プルダウン メニューにデータが入力されます。
[トレーニング オプション] ページで、列のリストを確認して、モデルのトレーニングに使用すべきではない列を除外します。
含まれている特徴に対して選択された変換と、無効なデータが許可されているかどうかを確認して、必要な更新を行います。
重み列の指定や最適化目標のデフォルトからの変更を行うには、[詳細オプション] を開いて、選択をします。
[続行] をクリックします。
[コンピューティングと料金] ウィンドウで、次のように構成します。
モデルのトレーニングの最大時間数を入力します。
この設定により、トレーニング費用に上限を設定できます。新しいモデルの作成には他のオペレーションも必要なため、実際の経過時間がこの値より長くなることがあります。
推奨されるトレーニング時間は、トレーニング データのサイズに応じて変わります。 次の表に、行数別の推奨トレーニング時間を示します。列の数が多い場合もトレーニング時間が長くなります。
行 推奨トレーニング時間 100,000 未満 1~3 時間 100,000~1,000,000 1~6 時間 1,000,000~10,000,000 1~12 時間 10,000,000 以上 3~24 時間 [トレーニングを開始] をクリックします。
データのサイズ、複雑さ、トレーニング予算(指定された場合)に応じて、モデルのトレーニングに何時間もかかることがあります。このタブを閉じて、後で戻ることもできます。モデルのトレーニングが完了すると、メールが送られてきます。
API
表形式データ型の目標を選択します。
分類
お使いの言語または環境に応じて、以下のタブを選択してください。
REST
trainingPipelines.create コマンドを使用してモデルをトレーニングします。
モデルをトレーニングします。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: 使用するリージョン。
- PROJECT: 実際のプロジェクト ID。
- TRAININGPIPELINE_DISPLAY_NAME: このオペレーション用に作成されたトレーニング パイプラインの表示名。
- TARGET_COLUMN: このモデルに予測させる列(値)。
- WEIGHT_COLUMN:(省略可)重み列。詳細。
- TRAINING_BUDGET: モデルをトレーニングするミリノード時間単位の最大時間(1,000 ミリノード時間は 1 ノード時間に等しい)。
- OPTIMIZATION_OBJECTIVE: 予測タイプに対してデフォルトの最適化目標を指定しない場合にのみ必須となります。詳細。
- TRANSFORMATION_TYPE: モデルのトレーニングに使用される列ごとに変換タイプが指定されます。詳細。
- COLUMN_NAME: 列の名前および指定された変換タイプ。モデルのトレーニングに使用するすべての列を指定する必要があります。
- MODEL_DISPLAY_NAME: 新しくトレーニングされたモデルの表示名。
- DATASET_ID: トレーニング データセットの ID。
-
Split
オブジェクトを指定すれば、データ分割を制御できます。データ分割の制御については、REST を使用したデータ分割の制御をご覧ください。 - PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
リクエストの本文(JSON):
{ "displayName": "TRAININGPIPELINE_DISPLAY_NAME", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "trainingTaskInputs": { "targetColumn": "TARGET_COLUMN", "weightColumn": "WEIGHT_COLUMN", "predictionType": "classification", "trainBudgetMilliNodeHours": TRAINING_BUDGET, "optimizationObjective": "OPTIMIZATION_OBJECTIVE", "transformations": [ {"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} }, {"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} }, ... }, "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/trainingPipelines/4567", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-08-18T01:22:57.479336Z", "updateTime": "2020-08-18T01:22:57.479336Z" }
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
回帰
お使いの言語または環境に応じて、以下のタブを選択してください。
REST
trainingPipelines.create コマンドを使用してモデルをトレーニングします。
モデルをトレーニングします。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: 使用するリージョン。
- PROJECT: 実際のプロジェクト ID。
- TRAININGPIPELINE_DISPLAY_NAME: このオペレーション用に作成されたトレーニング パイプラインの表示名。
- TARGET_COLUMN: このモデルに予測させる列(値)。
- WEIGHT_COLUMN:(省略可)重み列。詳細。
- TRAINING_BUDGET: モデルをトレーニングするミリノード時間単位の最大時間(1,000 ミリノード時間は 1 ノード時間に等しい)。
- OPTIMIZATION_OBJECTIVE: 予測タイプに対してデフォルトの最適化目標を指定しない場合にのみ必須となります。詳細。
- TRANSFORMATION_TYPE: モデルのトレーニングに使用される列ごとに変換タイプが指定されます。詳細。
- COLUMN_NAME: 列の名前および指定された変換タイプ。モデルのトレーニングに使用するすべての列を指定する必要があります。
- MODEL_DISPLAY_NAME: 新しくトレーニングされたモデルの表示名。
- DATASET_ID: トレーニング データセットの ID。
-
Split
オブジェクトを指定すれば、データ分割を制御できます。データ分割の制御については、REST を使用したデータ分割の制御をご覧ください。 - PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/trainingPipelines
リクエストの本文(JSON):
{ "displayName": "TRAININGPIPELINE_DISPLAY_NAME", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "trainingTaskInputs": { "targetColumn": "TARGET_COLUMN", "weightColumn": "WEIGHT_COLUMN", "predictionType": "regression", "trainBudgetMilliNodeHours": TRAINING_BUDGET, "optimizationObjective": "OPTIMIZATION_OBJECTIVE", "transformations": [ {"TRANSFORMATION_TYPE_1": {"column_name" : "COLUMN_NAME_1"} }, {"TRANSFORMATION_TYPE_2": {"column_name" : "COLUMN_NAME_2"} }, ... }, "modelToUpload": {"displayName": "MODEL_DISPLAY_NAME"}, "inputDataConfig": { "datasetId": "DATASET_ID", } }
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような JSON レスポンスが返されます。
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/trainingPipelines/4567", "displayName": "myModelName", "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_tabular_1.0.0.yaml", "modelToUpload": { "displayName": "myModelName" }, "state": "PIPELINE_STATE_PENDING", "createTime": "2020-08-18T01:22:57.479336Z", "updateTime": "2020-08-18T01:22:57.479336Z" }
Java
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
REST を使用してデータ分割を制御する
トレーニング セット、検証セット、テストセットの間でトレーニング データをどのように分割するかを制御できます。Vertex AI API を使用する場合は、Split
オブジェクトを使用してデータの分割を決定します。トレーニング データの分割に使用できるオブジェクト タイプの 1 つとして、Split
オブジェクトを inputDataConfig
オブジェクトに含めることができます。
データの分割に使用できるメソッドは、データ型によって異なります。
FractionSplit
の最初の項目として追加します:- TRAINING_FRACTION: トレーニング セットに使用されるトレーニング データの割合。
- VALIDATION_FRACTION: 検証セットに使用されるトレーニング データの割合。
- TEST_FRACTION: テストセットに使用されるトレーニング データの割合。
いずれか 1 つでも指定する場合は、すべてを指定する必要があります。割合の合計が 1.0 になるようにしてください。詳細
"fractionSplit": { "trainingFraction": TRAINING_FRACTION, "validationFraction": VALIDATION_FRACTION, "testFraction": TEST_FRACTION },
PredefinedSplit
:- DATA_SPLIT_COLUMN: データ分割値を格納する列(
TRAIN
、VALIDATION
、TEST
)。
分割列を使用して、各行のデータ分割を手動で指定します。詳細
"predefinedSplit": { "key": DATA_SPLIT_COLUMN },
- DATA_SPLIT_COLUMN: データ分割値を格納する列(
TimestampSplit
:- TRAINING_FRACTION: トレーニング セットに使用されるトレーニング データの割合。デフォルトは 0.80 です。
- VALIDATION_FRACTION: 検証セットに使用されるトレーニング データの割合。デフォルトは 0.10 です。
- TEST_FRACTION: テストセットに使用されるトレーニング データの割合。デフォルトは 0.10 です。
- TIME_COLUMN: タイムスタンプを含む列。
いずれか 1 つでも指定する場合は、すべてを指定する必要があります。割合の合計が 1.0 になるようにしてください。詳細。
"timestampSplit": { "trainingFraction": TRAINING_FRACTION, "validationFraction": VALIDATION_FRACTION, "testFraction": TEST_FRACTION, "key": TIME_COLUMN }
分類モデルまたは回帰モデルの最適化目標
モデルをトレーニングするときに、Vertex AI はモデルタイプとターゲット列に使用されるデータタイプに基づいて、デフォルトの最適化目標を選択します。
分類モデルは、次の場合に最適です。最適化の目標 | API 値 | この目標が適している問題 |
---|---|---|
AUC ROC | maximize-au-roc |
受信者操作特性(ROC)曲線の下の面積を最大化する。クラスを区別する。バイナリ分類のデフォルト値。 |
ログ損失 | minimize-log-loss |
予測確率をできるだけ正確に維持する。マルチクラス分類でサポートされている目標のみ。 |
AUC PR | maximize-au-prc |
PR(適合率 / 再現率)曲線の下の面積を最大化する。あまり一般的でないクラスの予測結果を最適化する。 |
再現率での適合率 | maximize-precision-at-recall |
特定の再現率の値で適合率を最適化する。 |
適合率での再現率 | maximize-recall-at-precision |
特定の適合率の値で再現率を最適化する。 |
最適化の目標 | API 値 | この目標が適している問題 |
---|---|---|
RMSE | minimize-rmse |
二乗平均平方根誤差(RMSE)を最小化する。より極端な値を正確に取り込む。デフォルト値。 |
MAE | minimize-mae |
平均絶対誤差(MAE)を最小化する。モデルへの影響を抑えて、極端な値を外れ値として表示する。 |
RMSLE | minimize-rmsle |
二乗平均平方根対数誤差(RMSLE)を最小化する。絶対値ではなく、相対サイズに基づいてエラーにペナルティを適用する。予測値と実際の値の両方が非常に大きくなる可能性がある場合に有用。 |
次のステップ
- モデルを評価する。
- モデルのエクスポート方法を学習する。