我需要對巨大數據集(許多GB數據)運行邏輯迴歸。我目前正在使用Julia的GLM軟件包進行此操作。雖然我的迴歸對數據的子集起作用,但當我嘗試在完整數據集上運行時,我的內存不足。巨大數據集的邏輯迴歸
有沒有一種方法來計算的巨大的,非稀疏數據集的邏輯迴歸不使用的內存量望而卻步?我想過把數據分成大塊,計算每個數據的迴歸,然後以某種方式將它們聚合起來,但我不確定這會給出有效的結果。
我需要對巨大數據集(許多GB數據)運行邏輯迴歸。我目前正在使用Julia的GLM軟件包進行此操作。雖然我的迴歸對數據的子集起作用,但當我嘗試在完整數據集上運行時,我的內存不足。巨大數據集的邏輯迴歸
有沒有一種方法來計算的巨大的,非稀疏數據集的邏輯迴歸不使用的內存量望而卻步?我想過把數據分成大塊,計算每個數據的迴歸,然後以某種方式將它們聚合起來,但我不確定這會給出有效的結果。
Vowpal Wabbit是專爲: 線性模型當數據(或甚至模型)不適合內存。
你可以手工做同樣的事情,使用 隨機梯度下降(SGD):寫你的邏輯迴歸 (可能的對面)的「損失函數」, 儘量減少它只是在一個組塊的位的數據(執行單梯度下降步驟), 在另一塊數據上做同樣的事情,並繼續。 經過數據傳遞後,您應該有一個很好的解決方案。 如果數據以隨機順序到達,效果會更好。
另一個想法(ADMM,我認爲), 相似,你有什麼建議,是將數據分割成塊, ,儘量減少對每個塊的損失函數。 當然,不同塊上的解決方案並不相同。 爲了解決這個問題,我們可以通過對數據塊,平均解決方案增加一個小處罰的解決方案之間的差異改變目標函數 ,並重新優化的一切。 經過幾次迭代後,解決方案變得越來越緊密並最終收斂。 這具有可並行化的附加優勢。
我沒有親自使用過,但StreamStats.jl包是專爲這種使用情況。它支持線性和邏輯迴歸以及其他流式統計功能。
繼續喬希日的真棒包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)