web-dev-qa-db-fra.com

KeyError lors du chargement d'un modèle scikit-learn mariné à l'aide de joblib

J'ai un objet qui contient en son sein deux scikit-learn modèles, un IsolationForest et un RandomForestClassifier, que je voudrais décaper puis décompresser et utiliser pour produire des prédictions. En dehors des deux modèles, l'objet contient quelques StandardScaler et quelques Python listes.

Le décapage de cet objet à l'aide de joblib n'est pas problématique, mais lorsque j'essaye de le décompresser plus tard, j'obtiens l'exception suivante:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 578, in load
   obj = _unpickle(fobj, filename, mmap_mode)
 File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 508, in _unpickle
   obj = unpickler.load()
 File "/usr/lib/python3.5/pickle.py", line 1039, in load
   dispatch[key[0]](self)
KeyError: 0

La même application décapine et décompresse à la fois l'objet, donc les versions de scikit-learn, joblib et les autres bibliothèques sont les mêmes. Je ne sais pas par où commencer le débogage, étant donné la vague erreur. Des idées ou des conseils?

12
haroba

La solution à cela était assez banale: sans m'en rendre compte, j'utilisais la version de joblib dans sklearn.externals.joblib pour le décapage, mais une version plus récente de joblib pour décompresser l'objet. Le problème a été résolu lorsque j'ai utilisé la nouvelle version de joblib pour les deux tâches.

15
haroba

Avec moi, il est arrivé que j'exporte le modèle en utilisant from sklearn.externals import joblib et a essayé de charger à l'aide de import joblib.

9
Marcos Paulo

Le mien était intéressant. Je travaillais avec git-lfs et donc les fichiers ont été modifiés et joblib n'a pas pu les ouvrir. Je devais donc exécuter git lfs pull pour obtenir les fichiers réels. Donc, si vous utilisez des versions compatibles de joblib, assurez-vous que vos fichiers ne sont pas modifiés d'une manière ou d'une autre!

1
Iman Mirzadeh