【问题标题】:Working with large (+15 gb) CSV datasets and Pandas/XGBoost使用大型 (+15 gb) CSV 数据集和 Pandas/XGBoost
【发布时间】:2018-01-01 04:23:48
【问题描述】:

我正在尝试找到一种方法,开始在 Pandas 中处理非常大的 CSV 文件,最终能够使用 XGBoost 进行一些机器学习。

我在使用 mySQL 或一些 sqllite 框架来管理我的数据块之间犹豫不决;我的问题在于稍后的机器学习方面,以及一次加载块以训练模型。

我的另一个想法是使用Dask,它基于 Pandas 构建,但也具有 XGBoost 功能。

我不确定最好的起点是什么,并希望征求意见!我倾向于Dask,但我还没有使用它。

【问题讨论】:

  • 15GB 不算什么。启动 sqlite,你就可以设置好了。
  • 总共或多或少 4 x 15 - 18 GB - 但感谢您的建议,我对“大数据”还不太了解。
  • 一个您可能会感兴趣的带有 xgboost 和 csv 数据的 dask 示例:matthewrocklin.com/blog/work/2017/03/28/dask-xgboost

标签: python pandas machine-learning xgboost dask


【解决方案1】:

This blogpost 通过一个在大型 CSV 数据集上使用 XGBoost 的示例。然而,它是通过使用具有足够 RAM 的分布式集群来实现的,以便一次将整个数据集放入内存中。虽然许多 dask.dataframe 操作可以在狭小的空间内运行,但我认为 XGBoost 训练不太可能是其中之一。当所有数据始终可用时,XGBoost 似乎运行得最好。

【讨论】:

  • 您能详细说明您的答案吗?为什么 XGBoost 不是其中之一?为什么 XGBoost 在可用的整个数据集上运行得更好?谢谢
【解决方案2】:

我还没有尝试过,但我会使用 h5py 将您的数据加载到 hdf5 文件中。这个库让您可以将数据存储在磁盘上,但可以像访问 numpy 数组一样访问它。因此,您不再受数据集内存的限制。

对于 XGBoost 部分,我将使用 sklearn API 并将 h5py 对象作为 X 值传递。我推荐 sklearn API,因为它接受类似 numpy 的数组作为输入,这应该让 h5py 对象工作。确保为 subsample 使用较小的值,否则您可能会很快耗尽内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2018-12-14
    • 2021-11-14
    • 2015-11-15
    • 1970-01-01
    • 2021-11-25
    • 2012-07-07
    • 2018-05-03
    相关资源
    最近更新 更多