使用joblib加载pickled scikit学习模型时出现KeyError

2024-04-29 08:00:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对象,其中包含两个scikit-learn模型,一个IsolationForest和一个RandomForestClassifier,我想对其进行pickle和稍后的unpickle操作,并用于生成预测。除了这两个模型之外,该对象还包含两个StandardScaler和两个Python列表。

使用joblib来pickle这个对象是没有问题的,但是当我稍后尝试取消pickle时,我得到了以下异常:

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

同一个应用程序同时pickle和unpickle对象,因此scikit-learnjoblib和其他库的版本是相同的。考虑到这个模糊的错误,我不知道从哪里开始调试。有什么想法或建议吗?


Tags: 对象inpy模型homepackageslinesite
3条回答

解决这个问题的方法相当平庸:在不知情的情况下,我使用joblib中的sklearn.externals.joblib版本来进行酸洗,而使用较新版本的joblib来取消对象的拾取。当我为这两个任务使用较新版本的joblib时,问题得到了解决。

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

碰巧我使用from sklearn.externals import joblib导出了模型,并尝试使用import joblib加载。

相关问题 更多 >