ZeroDivisionError при использовании BaglingClassifier sklearn с GridSearchCV - PullRequest
4 голосов
/ 04 мая 2019

Я пытаюсь усовершенствовать отлично работающую модель Бернулли Наивного Байеса с пакетами.

Но когда я пытаюсь провести перекрестную проверку BaggingClassifier, я получаю очень неожиданный ZeroDivisionError, исходящий из parallel.py.

Я пытался изменить все известные мне параметры, перезагрузил python, но ничего не получалось.

Вот воспроизводимый пример с бинарно-модифицированным набором данных iris:

#%% run
import numpy as np

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import BaggingClassifier
from sklearn.naive_bayes import BernoulliNB
from sklearn.datasets import load_iris


data = load_iris()
data.targetbin = (data.target!=0).astype("int")




param_grid2={'max_samples' : np.linspace(0.5,1.0,3),
            'base_estimator__alpha':np.linspace(0.1,1,3),
            'base_estimator__binarize':[*np.linspace(0.0,1,3)],
            'base_estimator__fit_prior':[True,False]}


param_grid2={'max_samples' :[0.7]}


clf = GridSearchCV(
        BaggingClassifier(
                BernoulliNB(),
                n_estimators = 10, max_features = 0.5),
        param_grid2,
        scoring = "accuracy",
        verbose=-1)


clf.fit(data.data, data.targetbin)

А вот и трассировка стека моей ошибки:

[Параллельно (n_jobs = 1)]: использование Backend SequentialBackend с 1 одновременные работники. Traceback (последний вызов был последним):

Файл "", строка 33, в clf.fit (data.data, data.targetbin)

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ model_selection_search.py", линия 722, в форме self._run_search (evaluate_candidates)

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ model_selection_search.py", строка 1191, в _run_search evaluate_candidates (ParameterGrid (self.param_grid))

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ model_selection_search.py", строка 711, в параметрах оценки cv.split (X, y, группы)))

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib \ parallel.py", линия 917, вызов если self.dispatch_one_batch (итератор):

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib \ parallel.py", строка 759, в dispatch_one_batch self._dispatch (задачи)

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib \ parallel.py", строка 716, в _dispatch job = self._backend.apply_async (пакетный, обратный вызов = cb)

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib_parallel_backends.py", строка 184, в apply_async Обратный вызов (результат)

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib \ parallel.py", линия 306, вызов self.parallel.print_progress ()

Файл "C: \ Users \ Dan \ Anaconda3 \ Lib \ сайт-пакеты \ sklearn \ внешнеположенности \ joblib \ parallel.py", строка 806, в print_progress if (is_last_item или частота курсора%):

ZeroDivisionError: целочисленное деление или по модулю на ноль

Что я делаю не так?

1 Ответ

2 голосов
/ 04 мая 2019

Я попытался отладить библиотеку и обнаружил, что self.verbose для sklearn/externals/joblib/parallel.py равно -1, однако по умолчанию оно должно составлять не менее 0. Так что я думаю, что это ошибка.

...