Я пытаюсь настроить классификатор ГБ в 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
i
, оно больше, чем 32-битное целое число со знаком - оно, безусловно, связано с размером ваших данных. Кроме того,n_jobs
должно быть › 1? - person AGS   schedule 22.04.2015n_jobs
вместо -1 говорит о том, что вы можете использовать все ядра на машине. - person Nitin   schedule 22.04.2015