【问题标题】:Big data memory issue in RR中的大数据内存问题
【发布时间】:2014-02-27 00:30:43
【问题描述】:

我在 R 中创建了一个 tdm 矩阵,我想将其写入文件。这是一个简单的三元组形式的大型稀疏矩阵,约为 20,000 x 10,000。当我将其转换为密集矩阵以通过 cbind 添加列时,出现内存不足错误并且该过程未完成。我不想增加我的内存。

另外,我想—— - 将 tf 和 tfidf 矩阵绑定在一起 - 将稀疏/密集矩阵保存到 csv - 运行批处理机器学习算法,例如 weka 的 J48 实现。

如何保存/加载数据集并在内存限制内运行批量 ML 算法?

如果我可以将稀疏矩阵写入数据存储,我是否可以在 R 中对稀疏矩阵并在内存限制内运行 ml 算法?

【问题讨论】:

  • 请参阅R 中的 glmnet 包 - 它接受稀疏矩阵可能更适合您的情况。

标签: r performance machine-learning sparse-matrix large-data


【解决方案1】:

除了@djhurio 提到的那些之外,第三种解决方案是使用云计算服务,例如Amazon EC2 提供的那些。您没有提到确切需要多少 RAM,但我可以从当前价目表中快速收集到,使用这些服务将为您获得高达 244 Gb 的 RAM。我怀疑你在现实中会需要那么多,如果你只需要 16-32 Gb,那么价格根本不会令人望而却步。

如果您是学术用户,您可能想查看 Revolution R 中的 RevoScaleR,这是 R 的商业版本,可在学术环境中免费使用。该软件开箱即用地处理大型对象。

【讨论】:

    【解决方案2】:

    可能有几种解决方案:

    1) 如果您正在处理整数,请将您的矩阵从双精度数转换为整数。与双精度数相比,整数需要更少的内存。

    2) 试试bigmemory 包。

    【讨论】:

    • ff packagecolbycol 也很有用。
    • 谢谢大家@djhurio - 我已经调用了“TermDocumentMatrix()”,它创建了一个简单的整数三元组矩阵。我需要 cbind 添加列,因此我必须将其转换为矩阵或 data.frame。除了 glm 之外,我还需要运行其他算法,例如稀疏矩阵上的 J48。 1. 是否可以 cbind 为简单的三元矩阵? 2. 由于除了 glmnet 中的算法之外,我无法在稀疏矩阵上运行算法,并且我无法创建稀疏 arff 以直接在 Weka 中运行,如果我的数据是非连续/文件支持通过包分配的,我可以运行其他 ML 算法,例如bigmemory/ff?
    • 另外,使用 Scikit-learn 在 Python 中管理内存是否更容易。谢谢
    • @sudeepo,没有数据很难给出准确的答案。您必须尝试此处提到的解决方案,看看哪些有效,哪些无效。尝试解决问题后,您可以提出更具体的问题。
    • 嗨,我还必须使用 ff 包和更大 RAM 的 Amazon EC2。感谢您的回答,很抱歉回复晚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2015-10-30
    • 2016-07-31
    • 1970-01-01
    • 2013-12-13
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多