如何找到两个非常大的矩阵的点积以避免内存错误?

时间:2018-07-06 07:29:17

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

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

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

困扰我的事情

  1. SO中的一些ppl建议计算零件的点积,然后合并。但是即使那样,矩阵对于RAM来说仍然太大(在这种情况下为9.42 TB?)
  2. 如果我将其写入文件,那么优化算法从文件中读取并最小化功能会不会太慢?
  3. 即使我确实将其写入文件,如何从文件中读取fmin_bfgs(或任何优化功能)?
  4. 此外,Kaggle笔记本电脑仅显示1GB的可用存储空间。我认为没有人会允许TB的存储空间。
  5. 在我的输入矩阵中,许多行的某些列具有相似的值。我可以利用我的优势来节省空间吗? (如矩阵中零的稀疏矩阵)

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

1 个答案:

答案 0 :(得分:0)

我尝试了很多事情。如果将来有人需要,我会在这里提及这些:

  • 我已经清理了数据,例如删除重复项和 无关的记录,具体取决于给定的问题等。
  • 我存储了大的矩阵,这些矩阵大都以0为稀疏矩阵。
  • 我使用小批量方法而不是普通的旧批方法(theta.T dot X)实现了梯度下降。

现在一切正常。