搭配使用機器學習/AI 與 BigQuery DataFrames
BigQuery DataFrames 中的 bigframes.ml 程式庫可讓您將 AI 和機器學習 (ML) 功能整合至資料分析工作流程。直接在 BigQuery 預先處理資料、訓練模型及建立機器學習管道,即可擴充數據分析,不必從資料倉儲擷取資料集。
必要的角色
如要取得完成本文件所述工作所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
使用遠端模型或 AI 函式:BigQuery 連線管理員 (
roles/bigquery.connectionAdmin) -
在 BigQuery 筆記本中使用 BigQuery DataFrames:
- BigQuery 使用者 (
roles/bigquery.user) - Notebook 執行階段使用者 (
roles/aiplatform.notebookRuntimeUser) - 程式碼建立者 (
roles/dataform.codeCreator)
- BigQuery 使用者 (
-
使用預設 BigQuery 連線:
- BigQuery 資料編輯者 (
roles/bigquery.dataEditor) - BigQuery 連線管理員 (
roles/bigquery.connectionAdmin) - Cloud Functions 開發人員 (
roles/cloudfunctions.developer) - 服務帳戶使用者 (
roles/iam.serviceAccountUser) - Storage 物件檢視者 (
roles/storage.objectViewer)
- BigQuery 資料編輯者 (
-
使用 BigQuery DataFrames 機器學習遠端模型:BigQuery 連線管理員 (
roles/bigquery.connectionAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
機器學習位置
bigframes.ml 程式庫支援的位置與 BigQuery ML 相同。所有 BigQuery 區域都支援 BigQuery 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 分群模型來區隔資料:
分解模型
您可以使用 bigframes.ml.decomposition 模組建立分解模型的估算工具。如要建立主成分分析 (PCA) 模型,請使用 PCA 類別。使用這些模型計算主成分,並用來對資料執行基底變更。使用 PCA 類別時,系統會將每個資料點投射到前幾個主成分,以取得較低維度的資料,同時盡可能保留資料的變異,藉此降低維度。
集成模型
您可以使用 bigframes.ml.ensemble 模組建立集成模型的估算工具。
如要建立隨機森林分類器模型,請使用
RandomForestClassifier類別。這些模型可用於建構多種學習方法的分類決策樹。如要建立隨機森林迴歸模型,請使用
RandomForestRegressor類別。使用這些模型,建構迴歸的多種學習方法決策樹。如要建立梯度提升樹分類器模型,請使用
XGBClassifier類別。使用這些模型,以累加方式建構多個學習方法決策樹,用於分類。如要建立梯度提升樹迴歸模型,請使用
XGBRegressor類別。這些模型可用於累加建構多個學習方法決策樹,以進行迴歸。
預測模型
您可以使用 bigframes.ml.forecasting 模組建立預測模型的估算器。如要建立時間序列預測模型,請使用 ARIMAPlus 類別。
匯入的模型
您可以使用 bigframes.ml.imported 模組,為匯入的模型建立估算工具。
如要匯入 Open Neural Network Exchange (ONNX) 模型,請使用
ONNXModel類別。如要匯入 TensorFlow 模型,請使用
TensorFlowModel類別。如要匯入 XGBoostModel 模型,請使用
XGBoostModel類別。
線性模式
使用 bigframes.ml.linear_model 模組建立線性模型的估算工具。
如要建立線性迴歸模型,請使用
LinearRegression類別。您可以使用這些模型進行預測,例如預測某項商品在特定日期的銷售量。如要建立邏輯迴歸模型,請使用
LogisticRegression類別。這類模型可用於分類兩個以上的可能值,例如輸入內容是否為low-value、medium-value或high-value。
以下程式碼範例說明如何使用 bigframes.ml 執行下列操作:
- 從 BigQuery 載入資料。
- 清理及準備訓練資料。
- 建立並套用 bigframes.ml.LinearRegression 迴歸模型。
大型語言模型
您可以使用 bigframes.ml.llm 模組建立 LLM 估算器。
如要建立 Gemini 文字生成器模型,請使用
GeminiTextGenerator類別。這些模型可用於文字生成工作。如要為遠端大型語言模型 (LLM) 建立估算器,請使用
bigframes.ml.llm模組。
下列程式碼範例使用 bigframes.ml.llm
GeminiTextGenerator
類別建立 Gemini 模型,用於生成程式碼:
遠端模型
如要使用 BigQuery DataFrames ML 遠端模型 (bigframes.ml.remote 或 bigframes.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 遠端模型,服務帳戶在專案中會具備 Agent Platform 使用者角色 (
roles/aiplatform.user)。
在 BigQuery DataFrames 中建立遠端模型時,系統會建立 BigQuery 連線。根據預設,系統會使用名稱為 bigframes-default-connection 的連線。您也可以視需要使用預先設定的 BigQuery 連線,這樣就能略過建立連線的步驟。預設連線的服務帳戶會獲得專案的 Agent Platform 使用者角色 (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)
後續步驟
- 瞭解 BigQuery DataFrames 資料類型系統。
- 瞭解如何使用 Gemini 生成 BigQuery DataFrames 程式碼。
- 瞭解如何使用 BigQuery DataFrames 分析 PyPI 的套件下載資料。
- 在 GitHub 查看 BigQuery DataFrames 原始碼、筆記本範例和範例。
- 探索 BigQuery DataFrames API 參考資料。