搭配使用機器學習和 AI 與 BigQuery DataFrames

BigQuery DataFrames 透過 bigframes.ml 程式庫,為 BigQuery DataFrames 提供機器學習和 AI 功能。

您可以在 BigQuery DataFrames 中預先處理資料建立估算器來訓練模型建立 ML 管道,以及分割訓練和測試資料集

必要的角色

如要取得完成本文件工作所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

機器學習位置

bigframes.ml 程式庫支援的區域與 BigQuery ML 相同。所有 BigQuery 區域都支援 BigQuery ML 模型預測和其他 ML 函式。模型訓練支援服務因地區而異。詳情請參閱 BigQuery ML 位置

預先處理資料

使用 bigframes.ml.preprocessing 模組bigframes.ml.compose 模組建立轉換器,準備資料以供估算器 (模型) 使用。BigQuery DataFrames 提供下列轉換:

  • 如要將連續資料分組到間隔中,請使用 bigframes.ml.preprocessing 模組中的 KBinsDiscretizer 類別

  • 如要將目標標籤正規化為整數值,請使用 bigframes.ml.preprocessing 模組中的 LabelEncoder 類別

  • 如要將每個特徵按最大絕對值縮放至 [-1, 1] 範圍,請使用 bigframes.ml.preprocessing 模組中的 MaxAbsScaler 類別

  • 如要將每個特徵縮放至 [0, 1] 範圍,藉此標準化特徵,請使用 bigframes.ml.preprocessing 模組中的 MinMaxScaler 類別

  • 如要移除平均值並縮放至單位變異數,藉此標準化特徵,請使用 bigframes.ml.preprocessing 模組中的 StandardScaler 類別

  • 如要將類別值轉換為數值格式,請使用 bigframes.ml.preprocessing 模組中的 OneHotEncoder 類別

  • 如要將轉換器套用至 DataFrame 資料欄,請使用 bigframes.ml.compose 模組中的 ColumnTransformer 類別

訓練模型

您可以建立估算器,在 BigQuery DataFrames 中訓練模型。

分群模型

您可以使用 bigframes.ml.cluster 模組,為叢集模型建立估算器。如要建立 k-means 分群模型,請使用 KMeans 類別。使用這些模型進行資料區隔。例如識別顧客區隔。K-means 是一種非監督式的學習技術,讓模型訓練無須藉助標籤或拆分資料即可執行訓練或評估。

您可以使用 bigframes.ml.cluster 模組,為叢集模型建立估算器。

下列程式碼範例說明如何使用 bigframes.ml.cluster KMeans 類別,建立資料區隔的 k-means 叢集模型:

from bigframes.ml.cluster import KMeans
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Create the KMeans model
cluster_model = KMeans(n_clusters=10)
cluster_model.fit(bq_df["culmen_length_mm"], bq_df["sex"])

# Predict using the model
result = cluster_model.predict(bq_df)
# Score the model
score = cluster_model.score(bq_df)

分解模型

您可以使用 bigframes.ml.decomposition 模組,為分解模型建立估算器。如要建立主成分分析 (PCA) 模型,請使用 PCA 類別。使用這些模型計算主成分,並用來對資料執行基底變更。使用 PCA 類別可將每個資料點投影到前幾個主要元件,藉此縮減維度,在取得低維度資料的同時,盡可能保留資料的變異。

集成模型

您可以使用 bigframes.ml.ensemble 模組,為集合模型建立估算器。

  • 如要建立隨機森林分類器模型,請使用 RandomForestClassifier 類別。您可以使用這些模型,建構多個用於分類的學習方法決策樹。

  • 如要建立隨機森林迴歸模型,請使用 RandomForestRegressor 類別。使用這些模型,為迴歸建構多個學習方法決策樹。

  • 如要建立梯度提升樹狀結構分類器模型,請使用 XGBClassifier 類別。使用這些模型,以加法方式建構多個分類學習方法決策樹。

  • 如要建立梯度提升樹狀迴歸模型,請使用 XGBRegressor 類別。使用這些模型,以累加方式建構多個迴歸學習方法決策樹。

預測模型

您可以使用 bigframes.ml.forecasting 模組,為預測模型建立估算器。如要建立時間序列預測模型,請使用 ARIMAPlus 類別

匯入的模型

您可以使用 bigframes.ml.imported 模組,為匯入的模型建立估算器。

線性模型

使用 bigframes.ml.linear_model 模組,為線性模型建立估算器。

  • 如要建立線性迴歸模型,請使用 LinearRegression 類別。使用這些模型進行預測,例如預測指定日子的項目銷售額。

  • 如要建立邏輯迴歸模型,請使用 LogisticRegression 類別。使用這些模型分類兩個以上可能的值,例如輸入是 low-valuemedium-value 還是 high-value

下列程式碼範例說明如何使用 bigframes.ml 執行下列操作:

from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Filter down to the data to the Adelie Penguin species
adelie_data = bq_df[bq_df.species == "Adelie Penguin (Pygoscelis adeliae)"]

# Drop the species column
adelie_data = adelie_data.drop(columns=["species"])

# Drop rows with nulls to get training data
training_data = adelie_data.dropna()

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data[
    ["island", "culmen_length_mm", "culmen_depth_mm", "flipper_length_mm", "sex"]
]
label_columns = training_data[["body_mass_g"]]

test_data = adelie_data[adelie_data.body_mass_g.isnull()]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)

# Score the model
score = model.score(feature_columns, label_columns)

# Predict using the model
result = model.predict(test_data)

大型語言模型

您可以使用 bigframes.ml.llm 模組,為 LLM 建立估算器。

  • 如要建立 Gemini 文字生成器模型,請使用 GeminiTextGenerator 類別。使用這些模型執行文字生成工作。

  • 如要為遠端大型語言模型 (LLM) 建立估算器,請使用 bigframes.ml.llm 模組。

下列程式碼範例說明如何使用 bigframes.ml.llm GeminiTextGenerator 類別建立 Gemini 模型,用於生成程式碼:

from bigframes.ml.llm import GeminiTextGenerator
import bigframes.pandas as bpd

# Create the Gemini LLM model
session = bpd.get_global_session()
connection = f"{PROJECT_ID}.{REGION}.{CONN_NAME}"
model = GeminiTextGenerator(
    session=session, connection_name=connection, model_name="gemini-2.0-flash-001"
)

df_api = bpd.read_csv("gs://cloud-samples-data/vertex-ai/bigframe/df.csv")

# Prepare the prompts and send them to the LLM model for prediction
df_prompt_prefix = "Generate Pandas sample code for DataFrame."
df_prompt = df_prompt_prefix + df_api["API"]

# Predict using the model
df_pred = model.predict(df_prompt.to_frame(), max_output_tokens=1024)

遠端模型

如要使用 BigQuery DataFrames ML 遠端模型 (bigframes.ml.remotebigframes.ml.llm),請啟用下列 API:

使用 BigQuery DataFrames ML 遠端模型時,如果使用預設 BigQuery 連線,您需要專案 IAM 管理員角色 (roles/resourcemanager.projectIamAdmin);如果使用預先設定的連線,則需要瀏覽器角色 (roles/browser)。如要避免這項規定,請將 bigframes.pandas.options.bigquery.skip_bq_connection_check 選項設為 True,這樣系統就會直接使用連線 (預設或預先設定),不會檢查連線是否存在或權限。如果使用預先設定的連線並略過連線檢查,請確認下列事項:

  • 連線是在正確位置建立。
  • 如果您使用 BigQuery DataFrames ML 遠端模型,服務帳戶在專案中必須具有 Vertex AI 使用者角色 (roles/aiplatform.user)。

在 BigQuery DataFrames 中建立遠端模型時,會建立 BigQuery 連線。根據預設,系統會使用名為 bigframes-default-connection 的連線。您也可以使用預先設定的 BigQuery 連線,這樣系統就會略過連線建立程序。預設連線的服務帳戶已取得專案的 Vertex AI 使用者角色 (roles/aiplatform.user)。

建立管道

您可以使用 bigframes.ml.pipeline 模組建立機器學習管道。您可以透過管道組裝多個機器學習步驟,同時設定不同參數,一起進行交叉驗證。這可簡化程式碼,並讓您一併部署資料預先處理步驟和估算器。

如要建立含有最終估算器的轉換管道,請使用 Pipeline 類別

選取模型

如要分割訓練和測試資料集並選取最佳模型,請使用 bigframes.ml.model_selection 模組模組:

  • 如要將資料分割為訓練集和測試集 (評估集),請使用 train_test_split 函式,如下列程式碼範例所示:

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
  • 如要建立多重交叉驗證訓練和測試集,以訓練及評估模型,請使用 KFold 類別KFold.split 方法,如以下程式碼範例所示。這項功能非常適合用於小型資料集。

    kf = KFold(n_splits=5)
    for i, (X_train, X_test, y_train, y_test) in enumerate(kf.split(X, y)):
    # Train and evaluate models with training and testing sets
    
  • 如要自動建立多重訓練和測試集、訓練及評估模型,並取得每個摺疊的結果,請使用 cross_validate 函式,如下列程式碼範例所示:

    scores = cross_validate(model, X, y, cv=5)
    

後續步驟