簡體   English   中英

Scikit-learn 隨機森林占用太多內存

[英]Scikit-learn Random Forest taking up too much memory

問題

我有一個包含 900,000 行和 8 列的數據集。 其中 6 列是整數,另外兩列是浮點數。 當嘗試擬合大約 1/4 的數據集 (200,000) 時,代碼運行良好,耗時不到 30 秒。 當我嘗試運行 400,000 行或更多行時,我的計算機永久凍結,因為 python.exe 進程占用了超過 5GB 的 RAM。

嘗試

我嘗試的第一件事是將warm_state 參數設置為True,然后一次處理50,000 行數據

n = 0
i = 50,000  
clf = sk.RandomForestClassifier(oob_score = True,n_jobs=-1, n_estimators = n, warm_start=True)
While i<= 850,000:
    clf.fit(X.ix[n:i],Y.ix[n:i])
    n += 50,000
    i += 50,000

這沒有解決任何問題,我遇到了同樣的問題。

我嘗試的下一件事是查找是否有一部分數據需要更多內存來處理。 我記錄了 python.exe 進程中的內存增加以及該進程完成所需的時間(如果它完成了)。

n = 50
clf = sk.RandomForestClassifier(oob_score = True,n_jobs=-1, n_estimators = n, warm_start=True)
Z = X[['DayOfWeek','PdDistrict','Year','Day','Month']] # takes 15s and additional ~600mb RAM (800 total)
Z = X[['X','Address','Y']] # takes 24.8s and additional 1.1GB RAM (1389mb total)
Z = X # never finishes peaks at 5.2GB
%time clf.fit(Z.ix[0:400000],Y.ix[0:400000])

雖然某些數據確實比其他數據需要更長的時間來處理,但它們都不能解釋所占用的 5 Gb 內存。

數據只有幾兆字節大小,所以我看不出它是如何占用這么多內存來處理的。

您正在構建的模型變得太大了。 獲得更多內存或構建更小的模型。 要構建更小的模型,要么創建更少的樹,要么限制教學樹的深度,比如使用 max_depth。 嘗試使用 max_depth=5 看看會發生什么。 另外,你有幾節課? 更多的課程使一切變得更加昂貴。

另外,你可能想試試這個: https : //github.com/scikit-learn/scikit-learn/pull/4783

我在過大的隨機森林模型中遇到了類似的情況。 問題是樹太深了,占用了很多內存。 為了解決這個問題,我設置了max_depth = 6並減少了內存。 我什至在博客文章中寫下了它。 在這篇文章中,我使用了 15 列的 32k 行數據集。 設置max_depth=6將內存消耗減少 66 倍並保持相似的性能(在文章中性能甚至增加)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM