BigQuery 和 XGBoost 集成:用于二元分类的 Jupyter Notebook 教程

bigquery 和 xgboost 集成:用于二元分类的 jupyter notebook 教程

介绍

在为表格数据选择二元分类模型时,我决定快速尝试一种快速的非深度学习模型:梯度提升决策树(gbdt)。本文介绍了使用 bigquery 作为数据源并使用 xgboost 算法进行建模来创建 jupyter notebook 脚本的过程。

完整脚本

对于那些喜欢直接跳入脚本而不进行解释的人,这里是。请调整project_name、dataset_name和table_name以适合您的项目。

import xgboost as xgbfrom sklearn.model_selection import train_test_split, gridsearchcvfrom sklearn.metrics import precision_score, recall_score, f1_score, log_lossfrom google.cloud import bigquery# function to load data from bigquerydef load_data_from_bigquery(query):    client = bigquery.client()    query_job = client.query(query)    df = query_job.to_dataframe()    return dfdef compute_metrics(labels, predictions, prediction_probs):    precision = precision_score(labels, predictions, average='macro')    recall = recall_score(labels, predictions, average='macro')    f1 = f1_score(labels, predictions, average='macro')    loss = log_loss(labels, prediction_probs)    return {        'precision': precision,        'recall': recall,        'f1': f1,        'loss': loss    }# query in bigqueryquery = """select *from `..`"""# loading datadf = load_data_from_bigquery(query)# target datay = df["reaction"]# input datax = df.drop(columns=["reaction"], axis=1)# splitting data into training and validation setsx_train, x_val, y_train, y_val = train_test_split(x, y, test_size=0.2, random_state=1)# training the xgboost modelmodel = xgb.xgbclassifier(eval_metric='logloss')# setting the parameter gridparam_grid = {    'max_depth': [3, 4, 5],    'learning_rate': [0.01, 0.1, 0.2],    'n_estimators': [100, 200, 300],    'subsample': [0.8, 0.9, 1.0]}# initializing gridsearchcvgrid_search = gridsearchcv(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy', verbose=1, n_jobs=-1)# executing the grid searchgrid_search.fit(x_train, y_train)# displaying the best parametersprint("best parameters:", grid_search.best_params_)# model with the best parametersbest_model = grid_search.best_estimator_# predictions on validation dataval_predictions = best_model.predict(x_val)val_prediction_probs = best_model.predict_proba(x_val)# predictions on training datatrain_predictions = best_model.predict(x_train)train_prediction_probs = best_model.predict_proba(x_train)# evaluating the model (validation data)val_metrics = compute_metrics(y_val, val_predictions, val_prediction_probs)print("optimized validation metrics:", val_metrics)# evaluating the model (training data)train_metrics = compute_metrics(y_train, train_predictions, train_prediction_probs)print("optimized training metrics:", train_metrics)

解释

从 bigquery 加载数据

以前,数据以 csv 文件的形式存储在 cloud storage 中,但缓慢的数据加载降低了我们学习过程的效率,促使我们转向 bigquery 以加快数据处理速度。

设置 bigquery 客户端

from google.cloud import bigqueryclient = bigquery.client()

此代码使用 google cloud 凭据初始化 bigquery 客户端,该凭据可以通过环境变量或 google cloud sdk 设置。

查询和加载数据

def load_data_from_bigquery(query):    query_job = client.query(query)    df = query_job.to_dataframe()    return df

该函数执行 sql 查询并将结果作为 pandas 中的 dataframe 返回,从而实现高效的数据处理。

使用 xgboost 训练模型

xgboost 是一种利用梯度提升的高性能机器学习算法,广泛用于分类和回归问题。

https://arxiv.org/pdf/1603.02754

模型初始化

import xgboost as xgbmodel = xgb.xgbclassifier(eval_metric='logloss')

这里实例化了xgbclassifier类,使用对数损失作为评估指标。

数据分割

from sklearn.model_selection import train_test_splitx_train, x_val, y_train, y_val = train_test_split(x, y, test_size=0.2, random_state=1)

该函数将数据拆分为训练集和验证集,这对于测试模型的性能和避免过度拟合至关重要。

参数优化

from sklearn.model_selection import gridsearchcvparam_grid = {    'max_depth': [3, 4, 5],    'learning_rate': [0.01, 0.1, 0.2],    'n_estimators': [100, 200, 300],    'subsample': [0.8, 0.9, 1.0]}grid_search = gridsearchcv(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy', verbose=1, n_jobs=-1)grid_search.fit(x_train, y_train)

gridsearchcv 执行交叉验证以找到模型的最佳参数组合。

模型评估

使用验证数据集上的精度、召回率、f1 分数和对数损失来评估模型的性能。

def compute_metrics(labels, predictions, prediction_probs):    from sklearn.metrics import precision_score, recall_score, f1_score, log_loss    return {        'precision': precision_score(labels, predictions, average='macro'),        'recall': recall_score(labels, predictions, average='macro'),        'f1': f1_score(labels, predictions, average='macro'),        'loss': log_loss(labels, prediction_probs)    }val_metrics = compute_metrics(y_val, val_predictions, val_prediction_probs)print("optimized validation metrics:", val_metrics)

输出结果

运行笔记本时,您将得到以下输出,显示最佳参数和模型评估指标。

best parameters: {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 300, 'subsample': 0.9}optimized validation metrics: {'precision': 0.8919952583956949, 'recall': 0.753797304483842, 'f1': 0.8078981867164722, 'loss': 0.014006406471894417}optimized training metrics: {'precision': 0.8969556573175115, 'recall': 0.7681976753444204, 'f1': 0.8199353049298048, 'loss': 0.012475375680566196}

附加信息

使用google云存储作为数据源

在某些情况下,从 google cloud storage 而不是 bigquery 加载数据可能更合适。以下函数从 cloud storage 读取 csv 文件并将其作为 pandas 中的 dataframe 返回,并且可以与 load_data_from_bigquery 函数互换使用。

from google.cloud import storagedef load_data_from_gcs(bucket_name, file_path):    client = storage.client()    bucket = client.get_bucket(bucket_name)    blob = bucket.blob(file_path)    data = blob.download_as_text()    df = pd.read_csv(io.stringio(data), encoding='utf-8')    return df

使用示例:

bucket_name = ''file_path = ''df = load_data_from_gcs(bucket_name, file_path)

使用 lightgbm 训练模型

如果您想使用 lightgbm 而不是 xgboost,只需在同一设置中将 xgbclassifier 替换为 lgbmclassifier 即可。

import lightgbm as lgbmodel = lgb.LGBMClassifier()

结论

未来的文章将介绍如何使用 bigquery ml (bqml) 进行训练。

以上就是BigQuery 和 XGBoost 集成:用于二元分类的 Jupyter Notebook 教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 12:27:19
下一篇 2025年12月13日 12:27:38

相关推荐

  • 使用 Diffuser 运行 Fluxn Mac

    什么是扩散器? 拥抱脸 / 扩散器 ? diffusers:最先进的扩散模型,用于 pytorch 和 flax 中的图像和音频生成。 ? diffusers 是最先进的预训练扩散模型的首选库,用于生成图像、音频甚至分子的 3d 结构。无论您是在寻找简单的推理解决方案还是训练自己的扩散模型,? di…

    2025年12月13日 好文分享
    000
  • 使用 Asyncio 创建和管理任务

    asyncio 允许开发者轻松地用 python 编写异步程序。该模块还提供了多种异步任务的方法,并且由于执行方法多种多样,因此可能会让人困惑于使用哪一种。 在本文中,我们将讨论使用 asyncio 创建和管理任务的多种方法。 什么是异步任务? 在 asyncio 中,task 是一个包装协程并安排…

    2025年12月13日
    000
  • 了解 Python 中常规类和数据类之间的差异

    介绍 在python中定义数据结构可以通过各种方法来完成。两种常用的方法是常规类和数据类。了解这两种方法之间的差异有助于为给定任务选择最合适的选项。本文对常规类和数据类进行了比较分析,强调了它们各自的特点和适当的用例。 常规课程 python 中的常规类是创建对象的传统方式。它需要对各种方法和属性进…

    2025年12月13日
    000
  • 如何在 django 模型的 save 方法中获取当前用户?

    如何在 django 模型的 save 方法中获取当前用户? 八月 11 ’24 评论:1 答案:0 0 我有以下 django 模型: class Listing(models.Model) STATUS_CHOICES = [ (‘available’, ‘Available’), …

    2025年12月13日
    000
  • 关于如何使用 pip 安装你需要知道的一切

    在本文中,我们正在研究使用 pip 将代码安装到虚拟环境中的不同方法。 这些会变得更加复杂,但不用担心,我会全程陪伴您。 拍拍你的背 废话说够了!让我们从简单的事情开始吧。 安装本地存储库 假设以下情况:您刚刚签出了存储库并想要安装需求。 这可以通过使用以下命令轻松完成……当…

    2025年12月13日
    000
  • 在深入了解 Nylas 之前需要了解的关键概念

    在深入研究 nylas 之前必须了解的概念 所以,我已经准备好开始使用 nylas 及其强大的 api,但在开始之前,值得花点时间确保我很好地掌握了一些基本概念。这些构建块不仅可以帮助我有效地使用 nylas,还可以使我的开发过程更加顺利和安全。 1.python虚拟环境:保持整洁 让我们从pyth…

    2025年12月13日
    000
  • Python-文件

    文件操作: 文件读取文件写入追加内容 文件读取:以 open(‘logs.txt’, ‘r’) 作为文件: open是python内置函数,用于打开文件。第一个参数是文件名,第二个参数是读取模式。with语句用于自动关闭文件。这将防止内存泄漏,提供更好…

    2025年12月13日
    000
  • 使用 AWS 学习 Python – 第 2 天

    虚拟环境 今天我们将学习虚拟环境。 python 中的虚拟环境是一个容器,所有代码和其他 python 包都驻留在其中。它允许您将 python 配置与系统上的其他版本分开。开发 python 代码时始终使用虚拟环境是一个好主意。 要创建虚拟环境,我们将使用以下命令: python -m venv …

    2025年12月13日
    000
  • Python 库初学者指南

    python 以其简单性和多功能性而闻名,使其成为初学者和专业人士的热门选择。 python 最强大的功能之一是其广泛的库集合。这些库是预先编写的代码的集合,您可以使用它们来执行常见任务,从而节省您的时间和精力。在这篇博客中,我们将探索每个初学者都应该知道的一些基本 python 库。 1.什么是p…

    2025年12月13日
    000
  • 自动化共同基金 CAS 解析器、导入和分析

    自动化共同基金 CAS 导入和分析:分步指南 管理共同基金投资可能是一项复杂的任务,尤其是在处理多个客户和大量数据时。为了简化此流程,我创建了一个工作流程,可自动导入和分析共同基金的合并账户报表 (CAS)。本博客将引导您完成从接收 CAS 到分析和呈现数据的工作流程。 1. 客户端转发CAS给支持…

    2025年12月13日
    000
  • tea-tasting:用于 A/B 测试统计分析的 Python 包

    简介 我开发了tea-tasting,一个用于 a/b 测试统计分析的 python 包,具有​​: 学生的 t 检验、bootstrap、cuped 方差缩减、功效分析以及其他开箱即用的统计方法和方法。支持广泛的数据后端,例如 bigquery、clickhouse、postgresql/gree…

    2025年12月13日
    000
  • Python – 字典、集合、元组

    这三个都是python中不同类型的数据结构。这用于存储不同的数据集合。根据我们要求的用例,我们需要在其中进行选择。 字典(dict): 字典是键值对的集合,其中每个键与一个值关联可以根据键值检索数据(基于键的搜索),因为键要求是唯一的。字典在 3.7 之前都是无序的,值可以更改。密钥名称不能直接更改…

    2025年12月13日
    000
  • 精通编码之路初学者指南

    您已经掌握了编码的基础知识。循环、函数,甚至简单的网站都在你的掌握之中。 但是从休闲程序员转变为专业程序员需要什么? 好吧,我在这里帮助正在寻找相同东西的初学者。 让我们潜入吧。 专业心态:不仅仅是代码 解决问题 编码既是关于编写代码,也是关于解决问题。将复杂的问题分解为更小的、可管理的步骤至关重要…

    2025年12月13日
    000
  • 使用 FastAPI 和机器学习构建实时信用卡欺诈检测系统

    介绍 信用卡欺诈对金融业构成重大威胁,每年造成数十亿美元的损失。为了解决这个问题,人们开发了机器学习模型来实时检测和防止欺诈交易。在本文中,我们将逐步介绍使用 fastapi(python 的现代 web 框架)以及在 kaggle 流行的信用卡欺诈检测数据集上训练的随机森林分类器构建实时信用卡欺诈…

    2025年12月13日
    000
  • Jupyter Notebooks 作为端到端分析解决方案

    介绍 你醒了。您查看待办事项列表,发现团队成员有一项任务。他们希望您进行某种分析并生成报告。请求本身相对复杂,这意味着您可能需要使用问题陈述对其进行分解,从数据源中提取数据,进行探索,收集您的见解,然后向团队成员讲述您的发现故事。 解决这个问题的方法如下: 在任务跟踪平台(例如 Trello、Jir…

    2025年12月13日
    000
  • 为什么我的 Google Colab 会话在运行 Llama 模型时崩溃?

    我正在尝试使用 meta-llama/llama-2-7b-hf 模型并在我的场所本地运行它,但会话在此过程中崩溃了。 我正在尝试使用 meta-llama/llama-2-7b-hf 模型并在我的场所本地运行它。为此,我使用 google colab 并从 hugging face 获取了访问密钥…

    2025年12月13日
    000
  • python程序语言运算符

    python 将运算符分为以下几组运营商类型算术运算符赋值运算符比较运算符 逻辑运算符按位运算符会员经营者 节目 算术运算符 算术运算符是数值是数学运算符1.添加2.减法3.乘法4.划分5.模块6.楼层划分 添加 a=3b=2打印(a + b)欧/普5 减法 a=6b=5打印(a-b)欧/普1 乘法…

    2025年12月13日
    000
  • 在 AWS 中转换文件更快、更便宜:Polar 或 Pandas?

    两者都提供了广泛的工具和优势,这可能会让我们在某些时候怀疑选择两者中的哪一个。这并不是要改变公司的所有流程,以便他们开始使用 polars 或 pandas“死亡”(这不会在不久的将来发生)。这是关于了解其他可以帮助我们降低流程成本和时间、获得相同或更好结果的工具。 当我们使用云服务时,我们会优先考…

    2025年12月13日
    000
  • 从 Javascript 过渡到 Python:初学者之旅

    我的全栈开发之路 作为成为全栈开发人员的旅程的一部分,我从 javascript 和 react 开始。在成功完成这些技术的项目后,我开始学习 python、sql 并创建自己的 cli 菜单。这个变化既令人兴奋又充满挑战,因为 python 的简单性最初让我怀疑它是否真的那么容易。 拥抱 pyth…

    2025年12月13日
    000
  • DevOps 中脚本语言的力量:日复一日的 DevOps 工具系列

    欢迎来到“50 天 50 个 DevOps 工具”系列的第 26 天!今天,我们将把重点从特定工具转移到 DevOps 和 IT 自动化的基本方面——脚本语言。脚本编写是 DevOps 中自动化、编排和配置管理的支柱。了解如何有效地使用脚本语言可以显着提高 DevOps 工程师的效率和生产力。 什么…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信