我需要对一个巨大的数据集(许多 GB 的数据)运行逻辑回归。我目前正在使用 Julia 的 GLM 包来实现此目的。虽然我的回归适用于数据的子集,但当我尝试在完整数据集上运行它时,我的内存不足。
有没有一种方法可以在不使用大量内存的情况下在巨大的非稀疏数据集上计算逻辑回归?我考虑过将数据分成多个 block ,计算每个数据 block 的回归并以某种方式聚合它们,但我不确定这会给出有效的结果。
最佳答案
Vowpal Wabbit专为以下目的而设计: 当数据(甚至模型)不适合内存时的线性模型。
您可以使用手动执行相同的操作 随机梯度下降(SGD):编写逻辑回归的“损失函数” (与可能性相反), 在数据 block 上将其最小化一点(执行单个梯度下降步骤), 对另一 block 数据执行相同的操作,然后继续。 经过几次数据传递后,您应该有一个好的解决方案。 如果数据以随机顺序到达,效果会更好。
另一个想法(ADMM,我认为), 类似于你的建议,将数据分成 block , 并最小化每个 block 的损失函数。 当然,不同 block 上的解决方案是不一样的。 为了解决这个问题,我们可以改变目标函数 通过对大量数据的解决方案与平均解决方案之间的差异添加一个小的惩罚,然后重新优化所有内容。 经过几次迭代后,解变得越来越接近并最终收敛。 这具有可并行化的额外优势。
关于memory - 大数据集上的逻辑回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974939/