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?
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.
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
.
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!