ошибка в GridsearchCV sklearn

Я пытаюсь настроить классификатор ГБ в sklearn, используя GridsearchCV. Вот код:

from sklearn.grid_search import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier

param_grid = {'learning_rate': [0.1, 0.01, 0.001],
              'max_depth': [4, 6],
              'min_samples_leaf': [9, 17],
              'max_features': [0.3, 0.1]}

est = GradientBoostingClassifier(n_estimators=3000)
# this may take some minutes
gs_cv = GridSearchCV(est, param_grid, scoring='f1', n_jobs=-1, verbose=1, pre_dispatch=5).fit(X.values, y)

# best hyperparameter setting
print 'Best hyperparameters: %r' % gs_cv.best_params_

Набор данных X составляет 1 миллион строк * 245 функций. Я работаю на машине с почти 32 ядрами. Я получаю следующую ошибку, когда запускаю приведенный выше код:

error                                     Traceback (most recent call last)
<ipython-input-22-cb545fec9989> in <module>()
      9 est = GradientBoostingClassifier(n_estimators=3000)
     10 # this may take some minutes
---> 11 gs_cv = GridSearchCV(est, param_grid, scoring='f1', n_jobs=-1, verbose=1, pre_dispatch=5).fit(X.values, y)
     12 
     13 # best hyperparameter setting

/var/webeng/opensource/aetna-anaconda/lib/python2.7/site-packages/sklearn/grid_search.pyc in fit(self, X, y)
    594 
    595         """
--> 596         return self._fit(X, y, ParameterGrid(self.param_grid))
    597 
    598 

/var/webeng/opensource/aetna-anaconda/lib/python2.7/site-packages/sklearn/grid_search.pyc in _fit(self, X, y, parameter_iterable)
    376                                     train, test, self.verbose, parameters,
    377                                     self.fit_params, return_parameters=True)
--> 378             for parameters in parameter_iterable
    379             for train, test in cv)
    380 

/var/webeng/opensource/aetna-anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in __call__(self, iterable)
    658                 # consumption.
    659                 self._iterating = False
--> 660             self.retrieve()
    661             # Make sure that we get a last message telling us we are done
    662             elapsed_time = time.time() - self._start_time

/var/webeng/opensource/aetna-anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in retrieve(self)
    510                 self._lock.release()
    511             try:
--> 512                 self._output.append(job.get())
    513             except tuple(self.exceptions) as exception:
    514                 try:

/var/webeng/opensource/aetna-anaconda/lib/python2.7/multiprocessing/pool.pyc in get(self, timeout)
    556             return self._value
    557         else:
--> 558             raise self._value
    559 
    560     def _set(self, i, obj):

error: 'i' format requires -2147483648 <= number <= 2147483647

Когда я запускаю тот же код с подмножеством из 1000 строк, он работает. Пробовал менять pre_dispatch, но все равно возникают проблемы. Это из-за размера данных или что-то еще? Спасибо.

Использование sklearn 0.15.2 на Python 2.7.9


person Nitin    schedule 21.04.2015    source источник
comment
Что бы ни было i, оно больше, чем 32-битное целое число со знаком - оно, безусловно, связано с размером ваших данных. Кроме того, n_jobs должно быть › 1?   -  person AGS    schedule 22.04.2015
comment
Да вот и я тоже думаю. Установка n_jobs вместо -1 говорит о том, что вы можете использовать все ядра на машине.   -  person Nitin    schedule 22.04.2015
comment
Каковы размеры X? Что такое класс X? Вы пытались уменьшить значение n_estimators? Вы пробовали другую функцию подсчета очков, кроме f1? Какой бэкенд вы используете? Вы пробовали backend=threading?   -  person MaxBenChrist    schedule 15.01.2016
comment
Вы получаете сообщение об ошибке, если устанавливаете n_jobs=32 (или любое другое число, равное вашему количеству ядер)?   -  person pavel    schedule 30.01.2016
comment
Может быть связано с этим? github.com/scikit-learn/scikit-learn/issues/   -  person pavel    schedule 30.01.2016


Ответы (1)


Я вижу 3 возможных пути решения этой проблемы:

1) попробуйте обновить sklearn до последней версии

2) попробуй заменить

from sklearn.grid_search import GridSearchCV

с:

from sklearn.model_selection import GridSearchCV

3) Если вы хотите использовать n_jobs > 1 внутри GridSearchCV, вам необходимо защитить скрипт с помощью if __name__ == '__main__':

e.g.

if __name__ == '__main__':
    clf = MLPClassifier()
    my_param_grid = {'activation': ('tanh', 'relu')}
    grid= model_selection.GridSearchCV(clf,   
    param_grid=my_param_grid,n_jobs=-1)
    grid.fit(X, y)

Подумайте о том, чтобы сделать все 3 шага

person seralouk    schedule 01.06.2017
comment
Я все еще получаю ту же ошибку BrokenProcessPool, используя все три шага. Я на машине с окнами - person Gramatik; 22.06.2021