【发布时间】:2018-07-06 07:29:16
【问题描述】:
我正在尝试使用 Kaggle 数据集来学习机器学习。在其中一个问题(使用逻辑回归)中,输入和参数矩阵的大小分别为 (1110001, 8) 和 (2122640, 8)。
我在 python 中执行此操作时出现内存错误。这对于我猜的任何语言都是一样的,因为它太大了。我的问题是他们如何在现实生活中的 ML 实现中乘以矩阵(因为它通常会这么大)?
困扰我的事情:
-
SO 中的一些人建议先计算部分的点积,然后再组合。但即便如此,矩阵对于 RAM 来说仍然太大(在这种情况下为 9.42TB?)
-
如果我将它写入文件,优化算法从文件中读取并最小化函数会不会太慢?
-
即使我确实将它写入文件,fmin_bfgs(或任何 opt. 函数)如何从文件中读取?
-
Kaggle 笔记本也显示只有 1GB 的可用存储空间。我认为没有人会允许 TB 的存储空间。
-
在我的输入矩阵中,许多行的某些列具有相似的值。我可以利用它的优势来节省空间吗? (就像矩阵中零的稀疏矩阵)
任何人都可以向我指出此类案例的任何真实示例实现。谢谢!
【问题讨论】:
-
自从您尝试使用 Kaggle 数据集学习 ML,我想如果您查看参与者提供的内核,您会找到一些答案
-
如果您需要以有效的方式读取文件的值,您可以使用 numpy.load 并使用 mmap 参数仅读取您需要的部分。这样可以节省时间和内存,并且可以回答您的一些问题。
-
我会在需要的时候尝试计算这个巨大的矩阵*矩阵运算的请求部分。如果这不是具有适当压缩算法(相关值的高效率)的选项 h5py 也应该完成这项工作。像这样stackoverflow.com/a/48997927/4045774
标签: python numpy machine-learning scipy logistic-regression