glmnet 批处理超大数据集
glmnet batching oversized dataset
我正在 matlab 中使用 glmnet 进行多项式回归,并且有一个大约 6-10GB 的数据集,具体取决于我制作的测试集的大小。我能够将它加载到内存中,但 glmnetmex 似乎无法处理整个数据集以进行更大的训练(例如留一)。我怀疑应该有一种方法可以将输入批处理到 glmnetmex,但我似乎无法在文档中找到它。它是否存在,或者您对如何继续进行有任何建议?如果它有解决这个问题的方法,我可以改用 R 版本
能够将批次提供给方法需要两件事:
- 能够使用先前的拟合来初始化学习算法
- 能够运行学习算法进行有限次数的迭代
glmnet
有后者,但不幸的是,没有前者。我认为您有几种解决问题的方法:
- 寻找更好的机器。如果您的财力允许,您可以考虑使用其中一种云服务。
- 深入研究
glmnet
代码。 MATLAB 和 R 包都是实际优化器的包装器,它是用 FORTRAN 编写的。在将模型变量传递给 FORTRAN 求解器之前,两个包装器都对模型变量进行了新的初始化。您可以尝试修改它以使用预先计算的模型。
- 您可以考虑构建一个集成预测器,在每个批次上训练一个单独的
glmnet
模型并使用加权投票方案(其中每个预测器按其交叉验证性能加权)进行最终预测.
- 我有一个 R package,它提供了一个更通用的正则化框架,但它也可以像
glmnet
一样用于训练标准弹性网络模型。我的包 确实 允许您使用预先计算的模型初始化训练,以及 运行 固定迭代次数的训练。不利的一面是我只有一个二项式求解器,而不是多项式求解器。所以,你必须用一对一或一对一的方案来破解它。
- 最后,如果您不喜欢线性模型,还有许多其他学习方法可以轻松地对输入进行批处理。深度学习和神经网络框架是目前比较流行的。
我正在 matlab 中使用 glmnet 进行多项式回归,并且有一个大约 6-10GB 的数据集,具体取决于我制作的测试集的大小。我能够将它加载到内存中,但 glmnetmex 似乎无法处理整个数据集以进行更大的训练(例如留一)。我怀疑应该有一种方法可以将输入批处理到 glmnetmex,但我似乎无法在文档中找到它。它是否存在,或者您对如何继续进行有任何建议?如果它有解决这个问题的方法,我可以改用 R 版本
能够将批次提供给方法需要两件事:
- 能够使用先前的拟合来初始化学习算法
- 能够运行学习算法进行有限次数的迭代
glmnet
有后者,但不幸的是,没有前者。我认为您有几种解决问题的方法:
- 寻找更好的机器。如果您的财力允许,您可以考虑使用其中一种云服务。
- 深入研究
glmnet
代码。 MATLAB 和 R 包都是实际优化器的包装器,它是用 FORTRAN 编写的。在将模型变量传递给 FORTRAN 求解器之前,两个包装器都对模型变量进行了新的初始化。您可以尝试修改它以使用预先计算的模型。 - 您可以考虑构建一个集成预测器,在每个批次上训练一个单独的
glmnet
模型并使用加权投票方案(其中每个预测器按其交叉验证性能加权)进行最终预测. - 我有一个 R package,它提供了一个更通用的正则化框架,但它也可以像
glmnet
一样用于训练标准弹性网络模型。我的包 确实 允许您使用预先计算的模型初始化训练,以及 运行 固定迭代次数的训练。不利的一面是我只有一个二项式求解器,而不是多项式求解器。所以,你必须用一对一或一对一的方案来破解它。 - 最后,如果您不喜欢线性模型,还有许多其他学习方法可以轻松地对输入进行批处理。深度学习和神经网络框架是目前比较流行的。