glmnet 批处理超大数据集

glmnet batching oversized dataset

我正在 matlab 中使用 glmnet 进行多项式回归,并且有一个大约 6-10GB 的数据集,具体取决于我制作的测试集的大小。我能够将它加载到内存中,但 glmnetmex 似乎无法处理整个数据集以进行更大的训练(例如留一)。我怀疑应该有一种方法可以将输入批处理到 glmnetmex,但我似乎无法在文档中找到它。它是否存在,或者您对如何继续进行有任何建议?如果它有解决这个问题的方法,我可以改用 R 版本

能够将批次提供给方法需要两件事:

  • 能够使用先前的拟合来初始化学习算法
  • 能够运行学习算法进行有限次数的迭代

glmnet 有后者,但不幸的是,没有前者。我认为您有几种解决问题的方法:

  • 寻找更好的机器。如果您的财力允许,您可以考虑使用其中一种云服务。
  • 深入研究 glmnet 代码。 MATLAB 和 R 包都是实际优化器的包装器,它是用 FORTRAN 编写的。在将模型变量传递给 FORTRAN 求解器之前,两个包装器都对模型变量进行了新的初始化。您可以尝试修改它以使用预先计算的模型。
  • 您可以考虑构建一个集成预测器,在每个批次上训练一个单独的 glmnet 模型并使用加权投票方案(其中每个预测器按其交叉验证性能加权)进行最终预测.
  • 我有一个 R package,它提供了一个更通用的正则化框架,但它也可以像 glmnet 一样用于训练标准弹性网络模型。我的包 确实 允许您使用预先计算的模型初始化训练,以及 运行 固定迭代次数的训练。不利的一面是我只有一个二项式求解器,而不是多项式求解器。所以,你必须用一对一或一对一的方案来破解它。
  • 最后,如果您不喜欢线性模型,还有许多其他学习方法可以轻松地对输入进行批处理。深度学习和神经网络框架是目前比较流行的。