ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

BigQuery BigFrames 线性回归实战:用 pandas 风格 API 在云端训练企鹅体重预测模型

BigQuery BigFrames 线性回归实战:用 pandas 风格 API 在云端训练企鹅体重预测模型 BigQuery BigFrames 线性回归实战用 pandas 风格 API 在云端训练企鹅体重预测模型【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills本文基于google/skills仓库中的 BigQuery DataFrames 技能文档完整拆解如何用 BigFramesbigframes.pandas/bigframes.bigquery加载 BigQuery 公开数据集、清洗数据、通过bbq.ml.create_model训练线性回归模型并用ml.evaluate与ml.predict完成评估和预测。读完后你可以掌握一套全程不下云的 pandas 风格机器学习工作流从项目配置、partial ordering 模式到模型持久化、评估与批量预测的完整代码实践。示例背景用线性回归预测企鹅体重参考文档 linear_regression.md 给出的示例目标是训练一个线性回归模型来预测企鹅的体重body mass。整个流程依赖 BigQuery 的公开数据集bigquery-public-data.ml_datasets.penguins该数据集包含企鹅的物种species、栖息岛屿island、体重body_mass_g等字段。示例的完整骨架如下配置 BigFrames 的项目与排序模式用bpd.read_gbq加载数据并在云端完成清洗过滤 Adelie 物种、去除空值用bbq.ml.create_model训练LINEAR_REG模型模型自动持久化到 BigQuery 数据集用bbq.ml.evaluate获取模型评估指标用bbq.ml.predict对另一批数据Biscoe 岛样本做批量预测。这个示例属于bigquery-bigframes技能的参考文档之一与 logistic_regression.md用逻辑回归预测企鹅物种构成一组回归/分类对照示例两者均由 SKILL.md 中的 Reference Directory 索引。前置配置指定项目与开启 partial ordering 模式代码的第一步是导入 BigFrames 并做两个全局配置import bigframes.pandas as bpd import bigframes.bigquery as bbq PROJECT_ID my_project DATASET_ID my_dataset bpd.options.bigquery.project PROJECT_ID bpd.options.bigquery.ordering_mode partial逐项说明import bigframes.pandas as bpd导入 BigFrames 的 DataFrame API使用方式与 pandas 高度相似read_gbq、布尔索引、dropna、rename、str.contains等import bigframes.bigquery as bbq导入bigframes.bigquery包其中bbq.ml子包提供create_model、evaluate、predict等机器学习函数——这是本示例的核心bpd.options.bigquery.project PROJECT_ID指定模型与查询归属的 GCP 项目。示例中替换为你的项目 ID 即可bpd.options.bigquery.ordering_mode partial开启 partial ordering 模式。根据 SKILL.md 中的最佳实践应在导入 BigFrames 后立即开启该模式放宽了行序约束可显著提升数据处理速度。这里有一个与排序模式直接相关的实战细节partial 模式下head(n)只有在 DataFrame 被显式排序后才会成功因此技能文档建议用peek(n)随机抽样 n 行来预览数据既快又不受行序约束。数据加载与云端清洗示例中的加载与清洗部分# Data Loading df bpd.read_gbq(bigquery-public-data.ml_datasets.penguins) # Data Cleaning adelie_data df[df.species Adelie Penguin (Pygoscelis adeliae)] adelie_data adelie_data.drop(columns[species]) training_data adelie_data.dropna()几点关键设计bpd.read_gbq是惰性lazy加载它把远程表包装为 BigFrames DataFrame后续过滤、去列、dropna等操作都会转化为云端执行的查询而不是把数据拉到本地。这与 SKILL.md 中Stay in the Cloud的原则一致清洗与转换都应通过 BigFrames 方法在云端完成以利用 BigQuery 的分布式计算能力。按物种过滤示例只使用 Adelie PenguinAdelie Penguin (Pygoscelis adeliae)样本做回归。由于线性回归的标签是数值型体重而species是分类列过滤后紧接着drop(columns[species])把该列移除避免分类列干扰数值回归。dropna()去除缺失值企鹅数据集中部分个体缺少体重等测量值回归训练前必须剔除否则会产生脏样本。技能文档还特别提醒不要假设中间结果的 schema建议用.dtypes主动校验列类型并用display(df.peek(n))检查样本记录。对这份企鹅数据而言确认body_mass_g是数值类型、其余测量列如翼展是否为数值是训练前的稳妥检查。训练模型bbq.ml.create_model与 LINEAR_REG示例的核心调用# Use ml.create_model function from the bbq package to train a model. model_name f{PROJECT_ID}.{DATASET_ID}.penguin_weight model_metadata bbq.ml.create_model( model_name, replaceTrue, options{ model_type: LINEAR_REG, }, # Explicitly identify the column for prediction training_datatraining_data.rename(columns{body_mass_g: label}) ) print(model_metadata)参数逐项解析model_namef{PROJECT_ID}.{DATASET_ID}.penguin_weight拼出的全限定名称格式为project.dataset.model_table。训练完成后模型即持久化为 BigQuery 中该数据集下的一张模型表后续evaluate和predict都通过这个名称引用无需把模型对象留在 Python 内存里。replaceTrue若同名模型已存在则直接替换便于重复实验首次训练时该参数保证脚本幂等可重跑。options{model_type: LINEAR_REG}声明使用 BigQuery ML 的线性回归Linear Regression模型类型。对照示例 logistic_regression.md 中分类任务使用的是model_type: LOGISTIC_REG可见model_type是决定训练算法的关键选项。training_data...rename(columns{body_mass_g: label})这是本示例中最重要的约定——通过把目标列重命名为label来显式指定预测列。BigQuery ML 默认以名为label的列为预测目标示例中用rename而非新增列保持训练数据其余特征列如各测量数值原样进入训练。create_model返回model_metadata打印它可以看到模型元数据用于确认模型已正确创建。为什么用bbq.ml而不是 Scikit-learn这是 SKILL.md 在Machine Learning一节中给出的硬性原则对 BigQuery DataFrames 不要使用 Scikit-learn 或其他本地 ML 库。原因很直接Scikit-learn 模型要求把数据拉进本地客户端内存例如先to_pandas()绕过了 BigQuery 的分布式计算且大表会直接触发 OOMbigframes.bigquery.ml则把训练直接委托给 BigQuery 可扩展的 ML 引擎数据始终留在云端训练、评估、预测都是远端执行技能文档还建议函数从bigframes.bigquery.ml导入而不是已不推荐的遗留包bigframes.ml后者仅在用户明确指定 Legacy BigFrames ML 时使用。因此本示例加载—训练—评估—预测四步全部走bpd/bbq.ml的云端路径没有任何一步触碰本地内存中的完整数据集。模型评估bbq.ml.evaluate训练之后示例立即对模型做评估# Use ml.evaluate function from the bbq package for model evaluation evaluation bbq.ml.evaluate(model_name) print(evaluation)evaluate(model_name)以模型全限定名为参数在云端执行评估查询并返回评估指标 DataFrameprint(evaluation)即可看到回归任务的拟合指标。这一步的价值在于模型持久化在 BigQuery 中评估结果可以随时复算、分享不依赖某次 Python 会话中的内存对象——这与模型即数据集内对象的 BigQuery ML 范式一致。批量预测bbq.ml.predict对 Biscoe 岛样本做推断示例的最后一步用同一模型对新数据做预测# Use ml.predict function from the bbq package for data prediction df bpd.read_gbq(bigquery-public-data.ml_datasets.penguins) biscoe df[df[island].str.contains(Biscoe)] predictions bbq.ml.predict(model_name, biscoe) print(predictions)拆解三个要点重新加载完整数据集而非过滤后的 Adelie 子集作为预测输入模拟新数据到来的推断场景df[island].str.contains(Biscoe)这里体现了 BigFrames 的 pandas 风格字符串访问器。技能文档明确建议优先使用内置访问器df.col.str.*、df.col.dt.*而不是远程 UDF——UDF 需要额外的部署资源与时间同时也不要用裸 lambda 去调Series.map/DataFrame.apply这类方法不接受未加udf/remote_function装饰器的函数bbq.ml.predict(model_name, biscoe)把 Biscoe 岛样本 DataFrame 作为输入整体送入云端BigQuery 逐行套用已持久化的线性回归模型返回带预测结果的 DataFrame。预测列body_mass_g在此处作为特征输入由模型输出体重预测值。需要注意的适用前提预测输入应包含与训练时一致的特征列即训练时除label外的列由于模型以label列约定训练目标predict的返回中会包含预测列具体列名与内容以实际输出的 metadata 为准。完整代码一览以下是从 linear_regression.md 完整继承的可复制脚本替换PROJECT_ID/DATASET_ID后即可运行import bigframes.pandas as bpd import bigframes.bigquery as bbq PROJECT_ID my_project DATASET_ID my_dataset bpd.options.bigquery.project PROJECT_ID bpd.options.bigquery.ordering_mode partial # Data Loading df bpd.read_gbq(bigquery-public-data.ml_datasets.penguins) # Data Cleaning adelie_data df[df.species Adelie Penguin (Pygoscelis adeliae)] adelie_data adelie_data.drop(columns[species]) training_data adelie_data.dropna() # Use ml.create_model function from the bbq package to train a model. model_name f{PROJECT_ID}.{DATASET_ID}.penguin_weight model_metadata bbq.ml.create_model( model_name, replaceTrue, options{ model_type: LINEAR_REG, }, # Explicitly identify the column for prediction training_datatraining_data.rename(columns{body_mass_g: label}) ) print(model_metadata) # Use ml.evaluate function from the bbq package for model evaluation evaluation bbq.ml.evaluate(model_name) print(evaluation) # Use ml.predict function from the bbq package for data prediction df bpd.read_gbq(bigquery-public-data.ml_datasets.penguins) biscoe df[df[island].str.contains(Biscoe)] predictions bbq.ml.predict(model_name, biscoe) print(predictions)配套最佳实践与延伸阅读把这个线性回归示例放进更大的 BigFrames 工作流中SKILL.md 给出了若干同样适用于本脚本的实践约束避免to_pandas()物化数据只有当数据足够小、或错误信息明确要求本地物化时才允许否则应让计算留在云端优先 DataFrame API 而非原始 SQL能用str.contains、布尔索引、dropna达成的就不要绕道read_gbq写原生 SQL以免破坏惰性执行链可视化BigFrames 与 Matplotlib/Seaborn 兼容可直接从 DataFrame 绘制数据太大时先聚合或抽样再to_pandas()分类对照示例同一数据集上的逻辑回归预测物种见 logistic_regression.md其model_type为LOGISTIC_REG标签列为布尔型is_adelie并重命名为label与本文的数值回归形成清晰对照该技能在仓库 README 中归类于 Databases and analytics可通过npx skills add google/skills选择性安装到 Agent 环境中。从仓库结构看bigquery-bigframes技能只包含 SKILL.md 与两个回归参考文档线性/逻辑回归本身不携带脚本资产其价值在于把云端 ML 训练的标准调用链create_model→evaluate→predict以可复制的完整示例固化下来适合作为 BigQuery DataFrames 上做监督学习的起点模板。【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表