将sklearn的BaggingClassifier与GridSearchCV一起使用时的ZeroDivisionError

时间:2019-05-04 09:41:26

标签: python scikit-learn divide-by-zero

我正在尝试通过套袋改进完美运行的伯努利·朴素贝叶斯模型。

但是,当我尝试交叉验证BaggingClassifier时,我从parallel.py收到了一个非常意外的ZeroDivisionError

我尝试更改所有我知道的参数,重新启动了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)

这是我的错误的堆栈跟踪:

  

[Parallel(n_jobs = 1)]:将后端SequentialBackend与1一起使用   并发工人。追溯(最近一次通话):

     

文件“”,第33行,在       clf.fit(data.data,data.targetbin)

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py​​”,   722行,适合       self._run_search(evaluate_candidates)

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py​​”,   _run_search中的1191行       Evaluation_candidates(ParameterGrid(self.param_grid))

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ model_selection_search.py​​”,   第711行,在evaluate_candidates中       cv.split(X,y,groups))

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib \ parallel.py”,   第917行,在致电中       如果self.dispatch_one_batch(迭代器):

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib \ parallel.py”,   第759行,在dispatch_one_batch中       self._dispatch(任务)

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib \ parallel.py”,   _dispatch中的第716行       job = self._backend.apply_async(batch,callback = cb)

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib_parallel_backends.py”,   第184行,位于apply_async中       回调(结果)

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib \ parallel.py”,   第306行,在致电中       self.parallel.print_progress()

     

文件   “ C:\ Users \ Dan \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib \ parallel.py”,   第806行,在print_progress中       如果(is_last_item或光标%频率):

     

ZeroDivisionError:整数除法或以零为模

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

我尝试调试lib,发现self.verbose的{​​{1}}是sklearn/externals/joblib/parallel.py,但是默认情况下应该至少是-1。所以我认为这是一个错误。