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?
6 Réponses :
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
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
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.
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
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.
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
Créer un environnement virtuel pour python 3.6.8
PS C: \ Utilisateurs \ harish \ Documents> conda create -n myenv python = 3.6.8
Activer l'environnement
PS C: \ Utilisateurs \ harish \ Documents> conda activer myenv
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
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
É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)
Oui plutôt que de créer une nouvelle mise à jour d'environnement scikit apprenez et redémarrez le noyau