【问题标题】:glmnet batching oversized datasetglmnet 批处理超大数据集
【发布时间】:2016-12-30 20:44:46
【问题描述】:

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

【问题讨论】:

  • 等等,你用的是R还是Matlab?
  • 我使用的是 matlab,但实际上,glmnetmex 是 Fortran。如果 glmnet 的 matlab 或 R 版本可以处理这个问题,我可以使用任何一个实现(最好是 matlab)。我会在问题中更清楚地说明这一点。

标签: r matlab glmnet


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2018-10-30
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多