Vertex AI の表形式のデータセットを作成する

このチュートリアルで後ほど作成するモデルには、トレーニング用のデータセットが必要です。このチュートリアルで使用するデータは、3 種類のペンギンの詳細情報を含む一般公開のデータセットです。ペンギンが 3 種類のどれに該当するかは、次のデータを使用して予測されます。

  • island - ある種類のペンギンが発見される島。
  • culmen_length_mm - ペンギンのくちばしの上端の長さ。
  • culmen_depth_mm - ペンギンのくちばしの高さ。
  • flipper_length_mm - ペンギンの足ひれ状の翼の長さ。
  • body_mass_g - ペンギンの体重。
  • sex - ペンギンの性別。

データのダウンロード、前処理、分割

このセクションでは、一般公開されている BigQuery データセットをダウンロードして、そのデータを準備します。データを準備する手順は次のとおりです。

  • カテゴリの特徴(数値ではなく文字列で記述される特徴)を数値データに変換します。たとえば、3 種類のペンギンの名前を数値 012 に変換します。

  • データセット内の使用されていない列をすべて削除します。

  • 使用できない行をすべて削除します。

  • データを 2 つの異なるデータセットに分割します。各データセットは、pandas DataFrame オブジェクトに格納されます。

    • df_train DataFrame には、モデルのトレーニングに使用されるデータが含まれています。

    • df_for_prediction DataFrame には、予測の生成に使用されるデータが含まれています。

データの処理が完了すると、このコードは 3 つのカテゴリ列の数値をそれぞれの文字列値にマッピングしてから出力します。これにより、データの内容を確認できます。

データをダウンロードして処理するには、ノートブックで次のコードを実行します。

import numpy as np
import pandas as pd

LABEL_COLUMN = "species"

# Define the BigQuery source dataset
BQ_SOURCE = "bigquery-public-data.ml_datasets.penguins"

# Define NA values
NA_VALUES = ["NA", "."]

# Download a table
table = bq_client.get_table(BQ_SOURCE)
df = bq_client.list_rows(table).to_dataframe()

# Drop unusable rows
df = df.replace(to_replace=NA_VALUES, value=np.NaN).dropna()

# Convert categorical columns to numeric
df["island"], island_values = pd.factorize(df["island"])
df["species"], species_values = pd.factorize(df["species"])
df["sex"], sex_values = pd.factorize(df["sex"])

# Split into a training and holdout dataset
df_train = df.sample(frac=0.8, random_state=100)
df_for_prediction = df[~df.index.isin(df_train.index)]

# Map numeric values to string values
index_to_island = dict(enumerate(island_values))
index_to_species = dict(enumerate(species_values))
index_to_sex = dict(enumerate(sex_values))

# View the mapped island, species, and sex data
print(index_to_island)
print(index_to_species)
print(index_to_sex)

数値でない特性のマッピングされた出力値は次のとおりです。

{0: 'Dream', 1: 'Biscoe', 2: 'Torgersen'}
{0: 'Adelie Penguin (Pygoscelis adeliae)', 1: 'Chinstrap penguin (Pygoscelis antarctica)', 2: 'Gentoo penguin (Pygoscelis papua)'}
{0: 'FEMALE', 1: 'MALE'}

最初の 3 つの値は、ペンギンが生息している可能性のある島です。二番目の 3 つの値は、このチュートリアルの最後に受け取る予測にマッピングされるため、重要です。3 行目は、FEMALE の性別特性が 0 に、MALE の性別特性が 1 にマッピングされていることを示しています。

モデルをトレーニングするための表形式のデータセットを作成する

前のステップでは、データをダウンロードして処理しました。このステップでは、df_train DataFrame に保存されているデータを BigQuery データセットに読み込みます。次に、BigQuery データセットを使用して Vertex AI の表形式のデータセットを作成します。この表形式のデータセットは、モデルのトレーニングに使用されます。詳細については、マネージド データセットを使用するをご覧ください。

BigQuery データセットを作成する

Vertex AI データセットの作成に使用する BigQuery データセットを作成するには、次のコードを実行します。create_dataset コマンドは、新しい BigQuery の DataSet を返します。

# Create a BigQuery dataset
bq_dataset_id = f"{project_id}.dataset_id_unique"
bq_dataset = bigquery.Dataset(bq_dataset_id)
bq_client.create_dataset(bq_dataset, exists_ok=True)

Vertex AI の表形式のデータセットを作成する

BigQuery データセットを Vertex AI の表形式データセットに変換するには、次のコードを実行します。表形式データを使用してトレーニングする必要がある行数に関する警告は、無視して問題ありません。これは、このチュートリアルの目的は、予測を取得する方法をすばやく示すことであり、比較的小さなデータセットを使用して予測を生成する方法を説明することであるためです。現実のシナリオでは、表形式のデータセットには少なくとも 1,000 行が必要です。create_from_dataframe コマンドは、Vertex AI TabularDataset を返します。

# Create a Vertex AI tabular dataset
dataset = aiplatform.TabularDataset.create_from_dataframe(
    df_source=df_train,
    staging_path=f"bq://{bq_dataset_id}.table-unique",
    display_name="sample-penguins",
)

これで、モデルのトレーニングに使用する Vertex AI の表形式データセットが作成されました。

(省略可)BigQuery で一般公開データセットを表示する

このチュートリアルで使用されている一般公開データを表示するには、BigQuery でそのデータを開きます。

  1. Google Cloud の [検索] で、「BigQuery」と入力して Enter キーを押します。

  2. 検索結果で [BigQuery] をクリックします。

  3. [エクスプローラ] ウィンドウで [bigquery-public-data] を開きます。

  4. [bigquery-public-data] で ml_datasets を開き、[penguins] をクリックします。

  5. [フィールド名] のに表示されている名前のいずれかをクリックして、対象のフィールドのデータを表示します。

ペンギンに関する一般公開データセットを表示します。