【问题标题】:How can I create extra columns without going out of RAM, and then use it for ML algorithms?如何在不耗尽 RAM 的情况下创建额外的列,然后将其用于 ML 算法?
【发布时间】:2021-08-10 22:33:49
【问题描述】:

我有一个包含 3m+(有序)行和 100 列的数据集,我可以使用 Pandas 将其加载到我的笔记本中。我想附加大约 900 列,这些列是使用 100 个现有列计算的。最终目标是训练几个机器学习模型(NN、随机森林)。

当我尝试使用 Pandas 附加列时,由于 RAM 不足(我有 25GB),我的机器出现故障。因此,我尝试使用 Dask,它允许我毫无问题地计算 900 列。但是,Dask 数据帧不能用作随机森林 (Sklearn) 和 Keras 模型的输入,所以我想在某些时候您必须将其转换回 pandas 数据帧。

在这一点上我很困惑。速度非常重要,因为我需要经常改装模型。有人有什么好的建议吗?

【问题讨论】:

    标签: python pandas machine-learning dask ram


    【解决方案1】:

    如果可能,您应该尝试“缩小”pandas 中的数据类型,例如在列包含小于 255 的整数时使用 uint8 等。

    您可以找到使用 numpy 的数据类型的最大值: numpy.finfo() 用于浮点数据类型 (float16/32/64) 和 numpy.iinfo() 用于整数数据类型 ([u]int8/16/32/64 )

    pandas read_csv

    如果你可以将数据保存为 csv,你也可以使用 pandas read_csv chunksize 选项,然后迭代你的 csv 文件

    你也可以结合这两种方法!

    【讨论】:

    • 谢谢,但这并不能解决我的问题。我已经缩小了数据类型,而 chunksize 选项对于模型训练来说太慢了。
    • 那么唯一的方法就是在你的机器上添加 RAM 或者在具有足够内存的 GCP vm 上训练你的模型
    【解决方案2】:

    如果您想在大于 RAM 的数据集上进行机器学习,那么 Dask-ML https://ml.dask.org/ 可能会满足您的需求。它还集成了许多常见的第 3 方工具。

    请注意,许多适用于 RAM 内数据的库不能很好地适用于 RAM 外数据,通常您只能获得适用于 RAM 外数据的 ML 库的一个子集。另一种方法是构建多个模型,每个模型都基于数据的子样本(例如,将数据拆分为 N 个 DataFrame,每个 DataFrame 都适合 RAM,然后一次在每个模型上构建一个模型,然后将每个模型的预测组合为后面的步骤)。

    您真的需要全部 900 列吗?一个测试可能是对具有 900 列的一组行(例如 100k)进行子采样并构建一个 RF sklearn 模型,然后询问模型“哪些列最有用?”。也许您只需要所有列的一个子集,而您可以丢弃其余列? Dask 可以将行和/或列的子样本提取到 Pandas 可以读取的 CSV 或 Parquet 文件中。

    也许您不需要像 RF 或 ANN 这样的强大模型?如果线性模型可以,那么 Dask 的 ML 或像 https://vowpalwabbit.org/ 这样的工具可能会完成这项工作。

    还请考虑升级您的 RAM - 开发人员花在学习新工具(如 Dask ML)上的时间可能比租用具有足够 RAM 用于实验的临时 Amazon big-box 贵得多。

    【讨论】:

    • 我真的需要所有的列和这些模型,所以 Dask ML 没有帮助,因为 RF 不可用。我会考虑租一个功能强大的虚拟机,谢谢。
    • 您需要 RF(仅)还是可以使用 XGBoost 之类的东西? XGBoost 在 Dask ML 中可用,我从未使用过它,但刚刚阅读了各种背景页面。听起来它可以很好地进行大于 RAM 的训练,请参阅 ml.dask.org/xgboost.htmlgithub.com/dmlc/xgboost/issues/2032 了解历史
    • 是的,我只需要随机森林。还是谢谢。
    • 如果您能满足我的好奇心 - 为什么 RF 优先于 XGBoost(或其他 GBM)?可以说,GBM 通常会在同一数据集上击败 RF。
    • 仅供研究使用
    猜你喜欢
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2018-06-16
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多