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'
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).
changing to scikit-learn==0.24.2 solved the problem. Thanks!
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'
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).
changing to scikit-learn==0.24.2 solved the problem. Thanks!