巨大数据集的逻辑回归
我需要对巨大数据集(许多GB数据)运行逻辑回归。我目前正在使用Julia的GLM软件包进行此操作。虽然我的回归对数据的子集起作用,但当我尝试在完整数据集上运行时,我的内存不足。巨大数据集的逻辑回归
有没有一种方法来计算的巨大的,非稀疏数据集的逻辑回归不使用的内存量望而却步?我想过把数据分成大块,计算每个数据的回归,然后以某种方式将它们聚合起来,但我不确定这会给出有效的结果。
Vowpal Wabbit是专为: 线性模型当数据(或甚至模型)不适合内存。
你可以手工做同样的事情,使用 随机梯度下降(SGD):写你的逻辑回归 (可能的对面)的“损失函数”, 尽量减少它只是在一个组块的位的数据(执行单梯度下降步骤), 在另一块数据上做同样的事情,并继续。 经过数据传递后,您应该有一个很好的解决方案。 如果数据以随机顺序到达,效果会更好。
另一个想法(ADMM,我认为), 相似,你有什么建议,是将数据分割成块, ,尽量减少对每个块的损失函数。 当然,不同块上的解决方案并不相同。 为了解决这个问题,我们可以通过对数据块,平均解决方案增加一个小处罚的解决方案之间的差异改变目标函数 ,并重新优化的一切。 经过几次迭代后,解决方案变得越来越紧密并最终收敛。 这具有可并行化的附加优势。
继续乔希日的真棒包OnlineStats的眼睛。除了大量用于各种统计,回归,分类,维度降低和分布估计的在线算法外,我们还积极致力于从StreamStats移植所有缺少的功能并合并这两者。
而且,我一直工作在一个非常实验包OnlineAI(延长OnlineStats),将一些网上的算法扩展到机器学习空间。
要添加到汤姆的答案,OnlineStats.jl有一个统计学习类型(StatLearn
),它依赖随机近似算法,其中每个算法使用O(1)内存。 Logistic回归和支持向量机可用于二进制响应数据。该模型可以使用新批次的数据进行更新,因此您无需一次加载整个数据集。它也非常快。这里有一个简单的例子:
using OnlineStats, StatsBase
o = StatLearn(n_predictors, LogisticRegression())
# load batch 1
fit!(o, x1, y1)
# load batch 2
fit!(o, x2, y2)
# load batch 3
fit!(o, x3, y3)
...
coef(o)
几个scikit估计,包括回归,实现partial_fit
,允许为大,外的核心数据集分批培训。由不适合主存储器中的数据的学习:
此类模型可使用外的芯的方法用于分类。
伪代码:
from sklearn.linear_model import SGDClassifier
clf = SGDClassifier(loss='log')
for batch_x, batch_y in some_generator: # lazily read data in chunks
clf.partial_fit(batch_x, batch_y)