没有名为'sklearn.neighbors._base'的模块。

15

我最近在jupyter中使用命令安装了imblearn包

!pip show imbalanced-learn

但我无法导入这个包。

from tensorflow.keras import backend
from imblearn.over_sampling import SMOTE

我收到了以下错误

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-20-f19c5a0e54af> in <module>
      1 # from sklearn.utils import resample
      2 from tensorflow.keras import backend
----> 3 from imblearn.over_sampling import SMOTE
      4 
      5 

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/__init__.py in <module>
     32     Module which allowing to create pipeline with scikit-learn estimators.
     33 """
---> 34 from . import combine
     35 from . import ensemble
     36 from . import exceptions

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/combine/__init__.py in <module>
      3 """
      4 
----> 5 from ._smote_enn import SMOTEENN
      6 from ._smote_tomek import SMOTETomek
      7 

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/combine/_smote_enn.py in <module>
      8 from sklearn.utils import check_X_y
      9 
---> 10 from ..base import BaseSampler
     11 from ..over_sampling import SMOTE
     12 from ..over_sampling.base import BaseOverSampler

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/base.py in <module>
     14 from sklearn.utils.multiclass import check_classification_targets
     15 
---> 16 from .utils import check_sampling_strategy, check_target_type
     17 
     18 

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/utils/__init__.py in <module>
      5 from ._docstring import Substitution
      6 
----> 7 from ._validation import check_neighbors_object
      8 from ._validation import check_target_type
      9 from ._validation import check_sampling_strategy

~/.virtualenvs/p3/lib/python3.6/site-packages/imblearn/utils/_validation.py in <module>
     11 
     12 from sklearn.base import clone
---> 13 from sklearn.neighbors._base import KNeighborsMixin
     14 from sklearn.neighbors import NearestNeighbors
     15 from sklearn.utils.multiclass import type_of_target

ModuleNotFoundError: No module named 'sklearn.neighbors._base'

环境中的其他软件包

numpy==1.16.2
pandas==0.24.2
paramiko==2.1.1
matplotlib==2.2.4
scikit-learn==0.22.1
Keras==2.2.4
tensorflow==1.12.0
tensorboard==1.12.0
tensorflow-hub==0.4.0
xlrd==1.2.0
flask==1.0.2
wtforms==2.2.1
bs4==0.0.1
gensim==3.8.1
spacy==2.2.3
nltk==3.4.5 
wordcloud==1.6.0
pymongo==3.10.1    
imbalanced-learn==0.6.1

我检查了sklearn包,它包含了base模块,而不是_base。但修改它可能不是正确的解决方案。还有其他解决方法来解决这个问题吗。


sklearn.neighbors._base自scikit-learn 0.22.1以来就存在了(https://github.com/scikit-learn/scikit-learn/commit/62aee0666e8803f20ecf0f6214621367e50f3961#diff-4ff1a647d9d4ef33358643ec58c914c7)。您确定您正在查看正确的环境吗? - AKX
4个回答

17

如果您想坚持使用最新版本的scikit-learn,请在安装imblearn之前将以下代码添加到您的脚本中或在您的环境中执行以下代码

import sklearn.neighbors._base
sys.modules['sklearn.neighbors.base'] = sklearn.neighbors._base

这必须在后面

pip install sklearn

或在笔记本环境中:

!pip install sklearn

这个问题源于在新版scikit-learn中某些模块的名称带有下划线。


3
对我有用,当我导入"missingpy"时,在sklearn版本0.24.1中出现错误"No module named 'sklearn.neighbors.base'"。 - Ankit Seth

11

以前的sklearn.neighbors.base已经更名为sklearn.neighbors._base在版本0.22.1中。 您可能正在使用早于该版本的scikit-learn版本。 安装最新版本可解决此问题:

pip install -U scikit-learn

或者

pip install scikit-learn==0.22.1


3

我曾经遇到一个类似的问题,尝试从imblearn.over_sampling导入SMOTE,而我的scikit-learn版本已经是最新的(0.24.1)。对我有用的是:

首先,我通过使用以下命令将scikit-learn版本降级至0.22.1:

 pip install scikit-learn==0.22.1

接下来,我使用以下命令更新了imbalanced-learn软件包:

pip install -U imbalanced-learn

卸载了scikit-learn-0.22.1,安装了更新版本(scikit-learn-0.24.1),并更新了imbalanced-learn包。此后一切正常。


0

如果在特定的环境中,您必须从包文件中将_base文件或base文件复制到该环境中。

我在我的tensorflow环境中遇到了同样的问题。我只需将_basebase文件复制到我的tensorflow环境中即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接