将机器学习和 AI 与 BigQuery DataFrames 搭配使用
BigQuery DataFrames 使用 bigframes.ml 库为 BigQuery DataFrames 提供机器学习和 AI 功能。
您可以在 BigQuery DataFrames 中预处理数据、创建用于训练模型的 Estimator、创建机器学习流水线,以及拆分训练数据集和测试数据集。
所需的角色
如需获得完成本文档中的任务所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
使用远程模型或 AI 功能:
BigQuery Connection Admin (
roles/bigquery.connectionAdmin) -
在 BigQuery 笔记本中使用 BigQuery DataFrames:
-
BigQuery User (
roles/bigquery.user) -
Notebook Runtime User (
roles/aiplatform.notebookRuntimeUser) -
Code Creator (
roles/dataform.codeCreator)
-
BigQuery User (
-
使用默认 BigQuery 连接:
-
BigQuery Data Editor (
roles/bigquery.dataEditor) -
BigQuery Connection Admin (
roles/bigquery.connectionAdmin) -
Cloud Functions Developer (
roles/cloudfunctions.developer) -
Service Account User (
roles/iam.serviceAccountUser) -
Storage Object Viewer (
roles/storage.objectViewer)
-
BigQuery Data Editor (
-
使用 BigQuery DataFrames ML 远程模型:
BigQuery Connection Admin (
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类。如需将 Transformer 应用于 DataFrame 列,请使用
bigframes.ml.compose模块中的ColumnTransformer类。
训练模型
您可以创建Estimator以在 BigQuery DataFrames 中训练模型。
聚类模型
您可以使用 bigframes.ml.cluster 模块为聚类模型创建 Estimator。
如需创建 K-means 聚类模型,请使用 KMeans 类。使用这些模型进行数据细分。例如,标识客户细分。K-means 是一种非监督式学习技术,因此模型训练不需要标签,也不需要为训练或评估拆分数据。
您可以使用 bigframes.ml.cluster 模块为聚类模型创建 Estimator。
以下代码示例展示如何使用 bigframes.ml.cluster KMeans 类创建用于数据细分的 k-means 聚类模型:
分解模型
您可以使用 bigframes.ml.decomposition 模块为分解模型创建 Estimator。
如需创建主成分分析 (PCA) 模型,请使用 PCA 类。使用这些模型计算主成分并使用主成分对数据执行基变换。使用 PCA 类可实现降维,具体方法是将每个数据点仅投影到前几个主成分上,以获得维度较低的数据,并保留尽可能多的数据差异性。
集成学习模型
您可以使用 bigframes.ml.ensemble 模块为集成学习模型创建 Estimator。
如需创建随机森林分类器模型,请使用
RandomForestClassifier类。使用这些模型构建多个学习方法决策树以用于分类。如需创建随机森林回归模型,请使用
RandomForestRegressor类。使用这些模型构建多个学习方法决策树以用于回归。如需创建梯度提升树分类器模型,请使用
XGBClassifier类。使用这些模型以累加方式构建多个学习方法决策树以用于分类。如需创建梯度提升树回归模型,请使用
XGBRegressor类。使用这些模型以累加方式构建多个学习方法决策树以用于回归。
预测模型
您可以使用 bigframes.ml.forecasting 模块为预测模型创建 Estimator。
如需创建时序预测模型,请使用 ARIMAPlus 类。
导入的模型
您可以使用 bigframes.ml.imported 模块为导入的模型创建 Estimator。
如需导入开放神经网络交换 (ONNX) 模型,请使用
ONNXModel类。如需导入 TensorFlow 模型,请使用
TensorFlowModel类。如需导入 XGBoostModel 模型,请使用
XGBoostModel类。
线性模型
使用 bigframes.ml.linear_model 模块为线性模型创建 Estimator。
如需创建线性回归模型,请使用
LinearRegression类。使用这些模型进行预测,例如预测给定日期的商品销售额。如需创建逻辑回归模型,请使用
LogisticRegression类。使用这些模型对两个或多个可能值进行分类,例如输入是low-value、medium-value还是high-value。
以下代码示例展示如何使用 bigframes.ml 执行以下操作:
- 从 BigQuery 加载数据。
- 清理和准备训练数据。
- 创建并应用 bigframes.ml.LinearRegression 回归模型。
大语言模型
您可以使用 bigframes.ml.llm 模块为 LLM 创建 Estimator。
如需创建 Gemini 文本生成器模型,请使用
GeminiTextGenerator类。使用这些模型可执行文本生成任务。如需为远程大语言模型 (LLM) 创建 Estimator,请使用
bigframes.ml.llm模块。
以下代码示例展示如何使用 bigframes.ml.llm
GeminiTextGenerator 类创建用于生成代码的 Gemini 模型:
远程模型
如需使用 BigQuery DataFrames 机器学习远程模型(bigframes.ml.remote 或 bigframes.ml.llm),您必须启用以下 API:
使用 BigQuery DataFrames ML 远程模型时,如果您使用的是默认 BigQuery 连接,则需要Project IAM Admin 角色 (roles/resourcemanager.projectIamAdmin);如果您使用的是预配置连接,则需要Browser 角色 (roles/browser)。您可以通过将 bigframes.pandas.options.bigquery.skip_bq_connection_check 选项设置为 True 来避免此要求,在这种情况下,连接(默认连接或预配置连接)会按原样使用,而不会进行任何存在或权限检查。如果您使用的是预配置连接并跳过连接检查,请验证以下各项:
- 连接是在正确的位置创建的。
- 如果您使用的是 BigQuery DataFrames ML 远程模型,则服务账号在项目中具有 Vertex AI User 角色 (
roles/aiplatform.user)。
在 BigQuery DataFrames 中创建远程模型会创建 BigQuery 连接。默认情况下,系统会使用名为 bigframes-default-connection 的连接。
如果您愿意,可以使用预配置的 BigQuery 连接,在这种情况下会跳过连接创建。系统会向默认连接的服务账号授予项目中的 Vertex AI User 角色 (roles/aiplatform.user)。
创建流水线
您可以使用 bigframes.ml.pipeline 模块创建机器学习流水线。借助流水线,您可以在设置不同的参数时组合多个要进行交叉验证的机器学习步骤。这样可简化代码,并且允许您一起部署数据预处理步骤和 Estimator。
如需创建具有最终 Estimator 的转换流水线,请使用 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 参考文档。