2015-05-01 65 views
0

下面的腳本運行良好在我的機器上n_samples=1000,但死亡(沒有錯誤,只是停止工作)與n_samples=10000。這隻會發生在使用Anaconda python發行版(numpy 1.8.1)上,但對於Enthought(1.9.2)來說是很好的。任何想法會造成這種情況?scikit學習GridSearchCV不工作作爲樣本增加

from sklearn.linear_model import LogisticRegression 
from sklearn.grid_search import GridSearchCV 
from sklearn.metrics.scorer import log_loss_scorer 
from sklearn.cross_validation import KFold 
from sklearn import datasets 
import numpy as np 

X, y = datasets.make_classification(n_samples=10000, n_features=50, 
             n_informative=35, n_redundant=10, 
             random_state=1984) 

lr = LogisticRegression(random_state=1984) 
param_grid = {'C': np.logspace(-1, 2, 4, base=2)} 
kf = KFold(n=y.size, n_folds=5, shuffle=True, random_state=1984) 
gs = GridSearchCV(estimator=lr, param_grid=param_grid, scoring=log_loss_scorer, cv=kf, verbose=100, 
        n_jobs=-1) 

gs.fit(X, y) 

注:我使用sklearn 0.16.1在這兩個分佈和正在使用OS X.

我注意到,升級到版本numpy的1.9.2與Enthought分佈(通過手動更新)打破網格搜索。儘管我沒有將Anaconda numpy版本降級到1.8.1。

+0

版本的numpy和sklearn在每個發行版中?使用'python -v'運行 –

+0

以查找有關失敗的更多信息。 – OYRM

+0

它實際上並沒有失敗,只是停止在網格搜索中實際進行並「掛起」(我在活動監視器中看不到CPU)。版本是:Enthought:numpy 1.8.1,sklearn 0.16.1; Anaconda:顛簸1.9.2,sklearn 0.16.1 – user1507844

回答

0

你在窗戶上嗎?如果是這樣,您需要用代碼保護

if __name__ == "__main__": 
    do_stuff() 

否則多處理將不起作用。

+0

不,我在OS X上。 – user1507844

+0

啊。那麼這可能是因爲你自己建立了numpy並與加速聯繫在一起?這對於多處理來說並不合適。如果你避免建立自己的裸體,你應該沒問題。 –

+0

不,只使用標準的Anaconda發行版,並沒有爲加速升級付費。即使我不使用它,它們是否會加速建立? – user1507844

0

每安德烈亞斯的評論,這個問題似乎是與中線性代數庫的多線程技術。我在終端下面的命令來解決它:

export VECLIB_MAXIMUM_THREADS=1

我的(弱)的理解是,這限制了線性代數的庫中使用多線程的,並讓多處理多線程就是了。