【问题标题】:How to find dot product of two very large matrices to avoid memory error?如何找到两个非常大的矩阵的点积以避免内存错误?
【发布时间】:2018-07-06 07:29:16
【问题描述】:

我正在尝试使用 Kaggle 数据集来学习机器学习。在其中一个问题(使用逻辑回归)中,输入和参数矩阵的大小分别为 (1110001, 8) 和 (2122640, 8)。

我在 python 中执行此操作时出现内存错误。这对于我猜的任何语言都是一样的,因为它太大了。我的问题是他们如何在现实生活中的 ML 实现中乘以矩阵(因为它通常会这么大)?

困扰我的事情:

  1. SO 中的一些人建议先计算部分的点积,然后再组合。但即便如此,矩阵对于 RAM 来说仍然太大(在这种情况下为 9.42TB?)

  2. 如果我将它写入文件,优化算法从文件中读取并最小化函数会不会太慢?

  3. 即使我确实将它写入文件,fmin_bfgs(或任何 opt. 函数)如何从文件中读取?

  4. Kaggle 笔记本也显示只有 1GB 的可用存储空间。我认为没有人会允许 TB 的存储空间。

  5. 在我的输入矩阵中,许多行的某些列具有相似的值。我可以利用它的优势来节省空间吗? (就像矩阵中零的稀疏矩阵)

    任何人都可以向我指出此类案例的任何真实示例实现。谢谢!

【问题讨论】:

  • 自从您尝试使用 Kaggle 数据集学习 ML,我想如果您查看参与者提供的内核,您会找到一些答案
  • 如果您需要以有效的方式读取文件的值,您可以使用 numpy.load 并使用 mmap 参数仅读取您需要的部分。这样可以节省时间和内存,并且可以回答您的一些问题。
  • 我会在需要的时候尝试计算这个巨大的矩阵*矩阵运算的请求部分。如果这不是具有适当压缩算法(相关值的高效率)的选项 h5py 也应该完成这项工作。像这样stackoverflow.com/a/48997927/4045774

标签: python numpy machine-learning scipy logistic-regression


【解决方案1】:

我尝试了很多东西。我会在这里提到这些,如果将来有人需要它们:

  • 我已经清理了数据,例如删除重复数据和 不相关的记录取决于给定的问题等。
  • 我存储了大矩阵,其中大部分为 0 作为稀疏矩阵。
  • 我使用 mini-batch 方法而不是普通的旧 Batch 方法 (theta.T dot X) 实现了梯度下降。

现在一切正常。

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2021-01-12
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2016-04-11
    • 2018-05-29
    相关资源
    最近更新 更多