2015-05-01 2 views
0

Следующий скрипт работает на моей машине с n_samples=1000, но умирает (без ошибок, просто перестает работать) с n_samples=10000. Это происходит только с использованием дистрибутива Anaconda python (numpy 1.8.1), но это нормально с Enthought's (numpy 1.9.2). Любые идеи, что бы это вызвало?scikit-learn 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.

Я заметил, что обновление до версии 1.9.2 Numpy с распределением Enthought (путем обновления вручную) разбивает поиск по сетке. Мне не удавалось понизить версию Anaconda numpy до 1.8.1.

+0

версии numpy и sklearn в каждом дистрибутиве? –

+0

запустить с 'python -v', чтобы найти дополнительную информацию о сбое. – OYRM

+0

На самом деле это не происходит, просто останавливается на самом деле, делая какие-либо успехи в поиске сетки и «зависает» (я не вижу процессора в Activity Monitor). Версии: Enthought: numpy 1.8.1, sklearn 0.16.1; Anaconda: bumpy 1.9.2, sklearn 0.16.1 – user1507844

ответ

0

Вы в окнах? Если это так, вам необходимо защитить код с помощью

if __name__ == "__main__": 
    do_stuff() 

В противном случае многопроцессорность не будет работать.

+0

Нет, я на OS X. – user1507844

+0

Ах. Тогда, вероятно, потому, что вы построили numpy самостоятельно и связаны с ускорением? Это не очень хорошо работает с многопроцессорной обработкой. Если вы избегаете создания numpy самостоятельно, вы должны быть в порядке. –

+0

Нет, просто используя стандартный дистрибутив Anaconda и не платил за ускорение обновления. Они строят против ускорения, даже если я его не использую? – user1507844

0

По мнению Андреаса, проблема заключается в многопоточности в библиотеке линейной алгебры. Я решил ее с помощью следующей команды в терминале:

export VECLIB_MAXIMUM_THREADS=1

Мой (слабый) понимание, что это ограничивает использование библиотеки линейной алгебры в нескольких потоков и позволяет многопроцессорной ручки многопоточность, как он хочет.