3

我需要對巨大數據集(許多GB數據)運行邏輯迴歸。我目前正在使用Julia的GLM軟件包進行此操作。雖然我的迴歸對數據的子集起作用,但當我嘗試在完整數據集上運行時,我的內存不足。巨大數據集的邏輯迴歸

有沒有一種方法來計算的巨大的,非稀疏數據集的邏輯迴歸不使用的內存量望而卻步?我想過把數據分成大塊,計算每個數據的迴歸,然後以某種方式將它們聚合起來,但我不確定這會給出有效的結果。

回答

4

Vowpal Wabbit是專爲: 線性模型當數據(或甚至模型)不適合內存。

你可以手工做同樣的事情,使用 隨機梯度下降(SGD):寫你的邏輯迴歸 (可能的對面)的「損失函數」, 儘量減少它只是在一個組塊的位的數據(執行單梯度下降步驟), 在另一塊數據上做同樣的事情,並繼續。 經過數據傳遞後,您應該有一個很好的解決方案。 如果數據以隨機順序到達,效果會更好。

另一個想法(ADMM,我認爲), 相似,你有什麼建議,是將數據分割成塊, ,儘量減少對每個塊的損失函數。 當然,不同塊上的解決方案並不相同。 爲了解決這個問題,我們可以通過對數據塊,平均解決方案增加一個小處罰的解決方案之間的差異改變目標函數 ,並重新優化的一切。 經過幾次迭代後,解決方案變得越來越緊密並最終收斂。 這具有可並行化的附加優勢。

2

我沒有親自使用過,但StreamStats.jl包是專爲這種使用情況。它支持線性和邏輯迴歸以及其他流式統計功能。

1

繼續喬希日的真棒包OnlineStats的眼睛。除了大量用於各種統計,迴歸,分類,維度降低和分佈估計的在線算法外,我們還積極致力於從StreamStats移植所有缺少的功能併合並這兩者。

而且,我一直工作在一個非常實驗包OnlineAI(延長OnlineStats),將一些網上的算法擴展到機器學習空間。

0

要添加到湯姆的答案,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) 
0

幾個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)