glmnet批处理超大数据集

时间:2016-08-23 21:33:37

标签: r matlab glmnet

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

1 个答案:

答案 0 :(得分:0)

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

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

glmnet有后者,但不幸的是,不是前者。我认为你有几个选择来解决这个问题:

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