首页 > 编程问答 >为什么 xgboost.QuantileDMatrix 使用自定义数据迭代器对数据进行四次传递?

为什么 xgboost.QuantileDMatrix 使用自定义数据迭代器对数据进行四次传递?

时间:2024-08-06 03:35:08浏览次数:13  
标签:python machine-learning parallel-processing xgboost quantile

我正在尝试使用自定义数据迭代器,如下所示 此处 ,因为我的数据集太大。只是为了测试它是如何工作的,我正在使用示例的子集并运行以下代码。 X 是我的数据的 numpy 数组。

我的迭代器如下所示

class IterForQDMatrix(xgb.core.DataIter):
    def __init__(self, df, batch_size):
        self.df = df
        self.batch_size = batch_size
        self.batches = np.ceil(len(df) // self.batch_size)
        self.it = 0
        super().__init__()
        
    def reset(self):
        self.it = 0
        
    def next(self, input_data):
        if self.it == self.batches:
            print("done")
            return 0
        a = self.it * self.batch_size
        b = min((self.it + 1) * self.batch_size, len(self.df))
        input_data(data=self.df[a:b, : -1], label=self.df[a:b, -1])
        self.it += 1
        return 1

iterator = IterForQDMatrix(X, 30)
xgb_data = xgb.QuantileDMatrix(iterator)

当我运行上面的代码时我注意到 "done" 被打印了四次,这意味着当我将迭代器传递给 xgb.QuantileDMatrix 时,它会遍历整个数据集四次。我试图理解为什么它要传递数据四次。有没有一种方法可以通过一次数据传递来实现它正在做的事情?


xgboost.QuantileDMatrix 对的数据进行四次传递来计算分位数草图,这些草图是有效训练树状模型所必需的。以下是原因:

  1. 初始化: 第一次传递用于收集有关数据集的基本统计信息,例如数据点的数量。此信息用于初始化分位数草图数据结构。
  2. 草图: 第二次和第三次传递用于构建分位数草图。这些草图是数据的汇总表示,允许 XGBoost 近似每个节点处特征值的分位数,而无需将所有数据存储在内存中。这对于大型数据集至关重要,因为它们无法完全加载到内存中。XGBoost 使用一种称为 GK-sketch 的方法来构建这些草图,该方法需要两次传递数据以有效地估计分位数。
  3. 最终确定: 第四次传递用于计算基于在草图构建阶段收集的信息的精确分位数。然后使用这些分位数来确定训练期间的拆分点。

可以只使用一次传递吗?

不,不能只使用一次传递来实现 xgboost.QuantileDMatrix 的功能,同时保持其效率。分位数草图的设计是为了在准确性和效率之间提供一个良好的平衡。它们允许 XGBoost 近似分位数,而无需多次遍历所有数据或将所有数据存储在内存中。

可以使用更少的传递吗?

从技术上讲,可以修改 XGBoost 的实现以在内部存储草图并重复使用它们。这将消除重复传递的需要。但是,此功能当前不可用。

替代方案

如果数据传递的数量成为一个主要问题,可以考虑以下替代方案:

  • 对数据进行预处理以减少其大小: 这可以通过降维技术或特征选择来完成。
  • 使用不同的 XGBoost 构造函数: xgb.DMatrix 构造函数不需要计算分位数草图,并且可以在数据已经存储在内存中的情况下使用。但是,对于大型数据集,此方法可能不可行。
  • 使用不同的梯度提升库: 一些梯度提升库,例如 LightGBM,使用不同的技术来处理大型数据集,并且可能需要更少的数据传递。

最终,选择最佳方法取决于的特定数据集和用例。

标签:python,machine-learning,parallel-processing,xgboost,quantile
From: 76569411

相关文章

  • 【视频讲解】Xgboost、ARIMA 和 Prophet对国际牛肉市场市场份额数据、比特币价格时间
    原文链接:https://tecdat.cn/?p=37228原文出处:拓端数据部落公众号分析师:KechenZhao本文将通过视频讲解,展示如何用Xgboost、ARIMA和Prophet对国际牛肉市场市场份额数据时间序列预测,并结合一个Python# ARIMA、XGBOOST、PROPHET和LSTM预测比特币价格实例的代码数据,为读者提供一......
  • 【香橙派系列教程】(七)香橙派下的Python3安装
    【七】香橙派下的Python3安装为接下来的Linux图像识别智能垃圾桶做准备。图像处理使用京东SDK只支持pyhton和Java接口,目的是引入C语言的Python调用,感受大厂做的算法bug此接口是人工智能接口,京东识别模型是通过训练后的模型,精准度取决于训练程度,人工智能范畴在常规嵌入式......
  • vnpy,一个不可思议的Python库!
    vn.py是一个开源的Python交易编程框架,旨在帮助程序员快速搭建属于自己的量化交易平台。该框架支持股票、期货、外汇等多种金融产品的交易,提供了从数据获取、策略开发到交易执行的全流程支持。如何安装vnpy首先,要使用vnpy,您需要通过Python的包管理工具pip来安装它。以下......
  • Python回溯算法
    回溯算法回溯算法是一种系统的搜索算法,用于解决诸如排列组合、子集生成、图的路径、棋盘问题等问题。其核心思想是通过递归尝试各种可能的解决方案,遇到不满足条件的解时则回退(回溯),继续尝试其他可能性,直到找到所有的解决方案或确认无解。主要步骤:选择路径:在当前步骤选择一个可......
  • [python]使用gunivorn部署fastapi服务
    前言Gunicorn是一种流行的WSGIHTTP服务器,常用于部署Django和Flask等PythonWeb框架程序。Gunicorn具有轻量级、高稳定性和高性能等特性,可以轻易提高PythonWSGIApp运行时的性能。基本原理Gunicorn采用了pre-fork模型,也就是一个工作进程和多个worker进程的工作模式。在这个模......
  • python十六进制编辑器
    源代码:importtkinterastkfromtkinterimportfiledialogimportstructimportbinasciiimportosclassHexEditor:def__init__(self,master):self.master=masterself.master.title("十六进制编辑器")self.master.configure(bg......
  • python项目学习 mediapipe手势识别 opencv可视化显示
    importcv2importmediapipeimportnumpydefget_angle(vector1,vector2):#角度计算angle=numpy.dot(vector1,vector2)/(numpy.sqrt(numpy.sum(vector1*vector1))*numpy.sqrt(numpy.sum(vector2*vector2)))#cos(angle)=向量的点乘/向量的模angle=nump......
  • 【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
    摘要气象数据分析在各行各业中扮演着重要的角色,尤其对于农业、航空、海洋、军事、资源环境等领域。在这些领域中,准确的气象数据可以对预测未来的自然环境变化和采取行动来减轻负面影响的决策起到至关重要的作用。本系统基于PythonFlask框架,通过对气象数据的分析和处理来提供......
  • Python-MNE全套教程(官网翻译)-入门01:概述篇
    目的以牺牲深度为代价进行入门学习,简易学习基本方法开始导入相关库:#License:BSD-3-Clause#CopyrighttheMNE-Pythoncontributors.importnumpyasnpimportmne加载数据MNE-Python数据结构式基于fif格式的,但是对于其他格式也有阅读方法,如https://mne.tools/s......
  • Python-MNE全套教程(官网翻译)-入门05:关于传感器位置
    本教程描述了如何读取和绘制传感器位置,以及MNE-Python如何处理传感器的物理位置。像往常一样,我们将从导入我们需要的模块开始:frompathlibimportPathimportmatplotlib.pyplotaspltimportnumpyasnpimportmne关于montage和layout(蒙太奇和传感器布局)montage......