8
votes

AttributeError: l'objet 'SMOTE' n'a pas d'attribut '_validate_data'

Je rééchantillonne mes données (multiclasse) en utilisant SMOTE.

sm = SMOTE(random_state=1)
X_res, Y_res = sm.fit_resample(X_train, Y_train)

Cependant, j'obtiens cette erreur d'attribut. Quelqu'un peut-il aider?


0 commentaires

6 Réponses :


1
votes

Bienvenue à SO! Pour votre prochaine question comme celle-ci, vous voudrez probablement inclure les versions de python, sklearn et imblearn que vous utilisez.

J'ai moi-même rencontré ce même problème et les développeurs l'ont remarqué: https://github.com/scikit-learn-contrib/imbalanced-learn/issues/727

Vous voudrez peut-être suivre cette page pour voir si une solution est publiée dans les prochains jours. Il semble que la bibliothèque sklearn ne soit pas nettoyée correctement après l'installation de imblearn.

MISE À JOUR
Cela peut être résolu en mettant à jour votre sklearn vers la version 0.23 ou supérieure. Cela devrait être possible pour vous soit:
pip update scikit-learn
OU
conda update scikit-learn


2 commentaires

Cela ne résout pas le problème.


La mise à jour de conda scikit-learn ne fonctionne pas car la version la plus récente de sklearn est la 0.22.1 sur conda main



1
votes

bien que la mise à jour de sklearn ne fonctionne pas non plus pour moi, cependant la configuration d'un nouvel environnement a fonctionné, comme proposé dans l'une des solutions fournies dans le lien https://github.com/scikit-learn-contrib/imbalanced-learn/issues/ 727 mentionné dans la réponse.


0 commentaires

1
votes

La mise à niveau / rétrogradation de scikit-learn ne fonctionne pas?

Mon système d'exploitation: Ubuntu MATE 18.04 x64

Eu ce même problème et essayé d'autres solutions en vain.

J'utilisais à l'origine python 3.7.7 et je l'ai fait fonctionner en utilisant python 3.6.8 place.

Anaconda

import sklearn
sklearn.__version__
>>> '0.23.1'
import imblearn
imblearn.__version__
>>> '0.7.0'

...
# Now works
X_res, Y_res = sm.fit_resample(X_train, Y_train)

VirtualEnv - vous aurez besoin de python 3.6.8 déjà installé sur votre ystem

virtualenv --python=python3.6 myenv
source myenv/bin/activate
pip install scikit-learn
pip install imblearn

vérifier les versions

conda create -n myenv python=3.6.8
conda activate myenv
pip install scikit-learn
pip install imblearn


0 commentaires

8
votes

Réponse courte

Vous devez mettre à jour scikit-learn vers la version 0.23.1.

Longue réponse

La dernière version 0.7.0 de imbalanced-learn semble avoir une dépendance non documentée sur scikit-learn v0.23.1. Cela vous donnerait AttributeError: 'SMOTE' object has no attribute '_validate_data' si votre scikit-learn est de 0,22 ou moins.

Si vous utilisez Anaconda , l'installation de scikit-learn version 0.23.1 peut être délicate. conda update scikit-learn peut ne pas mettre à jour scikit-learn version 0.23 ou supérieure car la dernière version de scikit-learn Conda a à ce moment est 0.22.1. Si vous essayez de l'installer en utilisant conda install scikit-learn=0.23.1 ou pip install scikit-learn==0.23.1 , vous obtiendrez des tonnes de vérifications de compatibilité et l'installation risque de ne pas être rapide. Par conséquent, le moyen le plus simple d'installer scikit-learn version 0.23.1 dans Anaconda est de créer un nouvel environnement virtuel avec des packages minimums afin qu'il y ait moins ou pas de problèmes de conflit. Ensuite, dans le nouvel environnement virtuel, installez scikit-learn version 0.23.1 suivie de la version 0.7.0 de imbalanced-learn .

conda create -n test python=3.7.6
conda activate test
pip install scikit-learn==0.23.1
pip install imbalanced-learn==0.7.0

Enfin, vous devez réinstaller votre IDE dans le nouvel environnement virtuel afin d'utiliser ces packages.

Cependant, une fois que la version 0.23.1 de scikit-learn est disponible dans Conda et qu'il n'y a pas de problèmes de compatibilité, vous pouvez l'installer directement dans l'environnement de base.


0 commentaires

0
votes

L'erreur reçue était : AttributeError: l'objet 'SMOTE' n'a pas d'attribut '_validate_data'

Cause fondamentale: nécessite scikit-learn 0.23, mais dans conda - python 3.7, nous n'avons que scikit-learn 0.22

Solution : créez un environnement virtuel avec python3.6.8 et installez scikit-learn 0.23 comme ci-dessous

  1. Créer un environnement virtuel pour python 3.6.8

    PS C: \ Utilisateurs \ harish \ Documents> conda create -n myenv python = 3.6.8

  2. Activer l'environnement

    PS C: \ Utilisateurs \ harish \ Documents> conda activer myenv

  3. Installez scikit-learn et imblearn dans l'environnement virtuel

    PS C: \ Users \ harish \ Documents> pip install scikit-learn PS C: \ Users \ harish \ Documents> pip install imblearn --user REMARQUE: ceci met à jour scikit-learn .... Collecting scikit-learn> = 0.23 PS C: \ Users \ harish \ Documents> conda list REMARQUE: il devrait être 0,23 ... scikit-learn 0.23.2 pypi_0 pypi

  4. Activez le noyau

    PS C: \ Users \ harish \ Documents> python -m ipykernel install --user --name = myenv Installé kernelspec myenv dans C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv PS C: \ Users \ harish \ Documents> cd C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv

PS C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv> ls

{
 "argv": [
  "C:\\Users\\harish\\Anaconda3\\python.exe",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python"
}

PS C: \ Users \ harish \ AppData \ Roaming \ jupyter \ kernels \ myenv> cat kernel.json

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        8/23/2020   6:41 PM            185 kernel.json
-a----        1/28/2020   2:18 AM           1084 logo-32x32.png
-a----        1/28/2020   2:18 AM           2180 logo-64x64.png
  1. Dans le notebook sur lequel vous travaillez, Kernel >> Cange Kernel >> New Env


0 commentaires

2
votes

Étape 1 - Ouvrez votre notebook Jupyter

Étape 2 - Tapez PIP Install --Upgrade Scikit-Learn

Étape 3 - Redémarrez le noyau

Suivez toutes les étapes telles quelles et c'est fait !! (mis à jour)


1 commentaires

Oui plutôt que de créer une nouvelle mise à jour d'environnement scikit apprenez et redémarrez le noyau