2017-09-02 88 views
1

我試圖分析文本,但是我的Mac的RAM只有8個演出,並且RidgeRegressor只是在Killed: 9之後停下來。我認爲這是因爲它需要更多的內存。Python - 超越RAM極限?

是否有辦法禁用堆棧大小限制器,以便算法可以使用某種交換內存?

+0

看看這個問題:https://stackoverflow.com/questions/17710748/process-large-data-in-python – nalyd88

+2

[在python中處理大型數據]的可能重複(https://stackoverflow.com /問題/ 17710748 /過程大型數據中的Python) – nalyd88

回答

0

您需要手動完成。

可能有兩個不同的核心問題在這裏:

  • 答:牽着你的訓練數據
  • B:訓練迴歸

一個,你可以嘗試numpy的的memmap這摘要交換。 作爲替代方案,請考慮將數據準備到HDF5或某個數據庫。對於HDF5,您可以使用h5pypytables,它們都允許使用類似numpy的用法。

對於B:使用一些非核心就緒算法是一個好主意。在scikit學習那些支持partial_fit

請記住,這個訓練過程分解成至少兩個新元素:

    的問候內存
  • 高效之中
    • 交換是緩慢的;你不想學習
  • 高效收斂

在上面的鏈接這些算法應該沒問題兩個過程中使用的東西持有N^2輔助記憶。

SGDRegressor可以被參數化以類似於RidgeRegression。

另外:它可能需要手動使用partial_fit,遵守算法的規則(通常某些類型的隨機排序需要收斂證明)。抽象交換的問題是:如果你的迴歸者在每個時代進行排列,但不知道這是多麼昂貴,你可能會遇到麻煩!

因爲問題本身非常困難,所以有一些專門爲此設計的庫,而sklearn需要一些更詳細的手動工作。其中一個最極端的(很多瘋狂的技巧)可能是vowpal_wabbit(IO往往是瓶頸!)。當然,還有其他流行的庫,如pyspark,服務於一個略有不同的目的(分佈式計算)。