使用joblib加载pickle scikit-learn模型时的KeyError

har*_*oba 11 python python-3.x scikit-learn joblib

我有一个对象,其中包含两个scikit-learn模型,一个IsolationForest和一个RandomForestClassifier,我想腌制,然后unpickle和用于产生预测.除了这两个模型,该对象包含几个StandardScalers和几个Python列表.

使用这个对象进行joblib挑选是没有问题的,但是当我稍后尝试取消它时,我得到以下异常:

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
Run Code Online (Sandbox Code Playgroud)

同一个应用程序都咸菜和unpickles的对象,这样的版本scikit-learn,joblib和其他库是相同的.鉴于模糊的错误,我不确定从哪里开始调试.任何想法或指针?

har*_*oba 19

对此的解决方案非常平庸:没有意识到它我使用joblibin 的版本sklearn.externals.joblib进行酸洗,但是更新版本的joblib用于解开对象.当我使用较新版本的joblib两个任务时问题得到了解决.


Mar*_*ulo 9

和我一起,发生了我使用导出模型from sklearn.externals import joblib并尝试使用加载的情况import joblib


Ima*_*deh 5

我的很有趣。我正在使用git-lfs,因此文件已更改,joblib 无法打开它们。所以我需要运行git lfs pull以获取实际文件。因此,如果您使用兼容的 joblib 版本,请确保您的文件没有以某种方式更改!