2013-03-07 70 views
4

我想從Python中的sklearn中使用GridSearchCV來查找SVM分類器的參數。訓練數據的形狀(15750,65536)(15750個樣本,特徵維度:65536)。使用sklearn GridSearchCV查找具有大數據的優化參數(15750個樣本)

一切工作正常,默認設置!但是,如果我想使用並行處理選項,通過定義n_jobs,我會遇到以下問題:將數據加載到內存中(在具有48 GB RAM的計算機上,大約佔整個內存的14%),但它從未開始網格搜索/訓練!在(h)頂部,過程狀態是S(因此基本停止!)。它繼續佔用內存,但從不開始運行(CPU使用率保持爲零!)。

我嘗試了不同的n_jobs值,如2,3-5(機器有8個內核)。但沒有運氣! 根據文檔,對於大數據,可以使用GridSearchCV中的pre_dispatch選項,這樣可以限制複製數據的數量並避免內存問題。所以我甚至嘗試使用n_job = 2和pre_dispatch = 1,但仍然沒有任何作用!

我還應該提一下,我用少得多的樣本嘗試了相同的代碼,就像1000個樣本一樣,而且一切都很好!然而,問題在於,對於一​​個進程,數據只佔用機器內存的15%,爲什麼它不能在至少兩個內核上運行,而pre_dispatch = 2?它應該佔用機器內存的30%左右。但爲什麼這個過程剛剛停止?甚至沒有內存錯誤? 如果有解決方法嗎?

下面是一段代碼來進行這種工作(主要摘自sklearn文檔):

sklearn版本:0.12.1和Python版本:2.7.3

tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4], 
        'C': [1, 10, 100, 1000]}, 
        {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}] 




clf = GridSearchCV(SVC(C=1), tuned_parameters, n_jobs=2, verbose=3, pre_dispatch=1) 
clf.fit(tr, tt, cv=3) 
+0

您是否安裝了OpenBLAS?這對python多處理來說並不合適。嘗試使用另一個BLAS。 – 2013-03-09 11:38:17

+0

我相當肯定它關係到這個錯誤: [http://stackoverflow.com/questions/12569977/python-large-iterations-number-fail][1] [ 1]:http://stackoverflow.com/questions/12569977/python-large-iterations-number-fail – denson 2013-06-10 21:34:14

+0

我在Windows上有同樣的問題。如果您想在GridSearchCV中使用n_jobs> 1,那麼請嘗試向您的腳本添加以下內容:if __name__ =='__main__':然後將您的代碼 – sera 2017-06-08 21:49:42

回答

1

你試過n_jobs = -1,它指示sklearn使用所有的CPU?這個設置對我來說非常合適(儘管我的訓練樣本數量要少得多)。

+0

謝謝。是的,我做到了。沒有改變。問題仍然存在。 – Reza 2013-03-08 10:05:32