Importing SMOTE raise AttributeError: module 'sklearn.metrics._dist_metrics' has no attribute 'DistanceMetric32'

Question:

Running from imblearn.over_sampling import SMOTE will raise following error.

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
d:AOneDrive - UBCENGR518 Machine LearningProjectcodesmodel_training_laptop - Copy.ipynb Cell 2 in <cell line: 1>()
----> 1 from imblearn.over_sampling import SMOTE

File e:Anacondalibsite-packagesimblearn__init__.py:52, in <module>
     48     sys.stderr.write("Partial import of imblearn during the build process.n")
     49     # We are not importing the rest of scikit-learn during the build
     50     # process, as it may not be compiled yet
     51 else:
---> 52     from . import combine
     53     from . import ensemble
     54     from . import exceptions

File e:Anacondalibsite-packagesimblearncombine__init__.py:5, in <module>
      1 """The :mod:`imblearn.combine` provides methods which combine
      2 over-sampling and under-sampling.
      3 """
----> 5 from ._smote_enn import SMOTEENN
      6 from ._smote_tomek import SMOTETomek
      8 __all__ = ["SMOTEENN", "SMOTETomek"]

File e:Anacondalibsite-packagesimblearncombine_smote_enn.py:10, in <module>
      7 from sklearn.base import clone
      8 from sklearn.utils import check_X_y
---> 10 from ..base import BaseSampler
     11 from ..over_sampling import SMOTE
     12 from ..over_sampling.base import BaseOverSampler

File e:Anacondalibsite-packagesimblearnbase.py:15, in <module>
     12 from sklearn.preprocessing import label_binarize
     13 from sklearn.utils.multiclass import check_classification_targets
---> 15 from .utils import check_sampling_strategy, check_target_type
     16 from .utils._validation import ArraysTransformer
     17 from .utils._validation import _deprecate_positional_args

File e:Anacondalibsite-packagesimblearnutils__init__.py:7, in <module>
      1 """
      2 The :mod:`imblearn.utils` module includes various utilities.
      3 """
      5 from ._docstring import Substitution
----> 7 from ._validation import check_neighbors_object
      8 from ._validation import check_target_type
      9 from ._validation import check_sampling_strategy

File e:Anacondalibsite-packagesimblearnutils_validation.py:15, in <module>
     12 import numpy as np
     14 from sklearn.base import clone
---> 15 from sklearn.neighbors._base import KNeighborsMixin
     16 from sklearn.neighbors import NearestNeighbors
     17 from sklearn.utils import column_or_1d

File e:Anacondalibsite-packagessklearnneighbors__init__.py:6, in <module>
      1 """
      2 The :mod:`sklearn.neighbors` module implements the k-nearest neighbors
      3 algorithm.
      4 """
----> 6 from ._ball_tree import BallTree
      7 from ._kd_tree import KDTree
      8 from ._distance_metric import DistanceMetric

File sklearnneighbors_ball_tree.pyx:1, in init sklearn.neighbors._ball_tree()

AttributeError: module 'sklearn.metrics._dist_metrics' has no attribute 'DistanceMetric32'
Asked By: Leo

||

Answers:

This is probably a case where upgrading scikit-learn and imbalanced-learn will resolve the problem.

pip install --upgrade scikit-learn
pip install --upgrade imbalanced-learn

Not all versions of scikit-learn and imbalanced-learn are compatible with one another. Version 0.10.0 should be compatible with scikit-learn>=1.0.0 (e.g. discussion here).

Answered By: Alexander L. Hayes

changing to scikit-learn==0.24.2 solved the problem. Thanks!

Answered By: Saif AlKhalidy
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.