我有一个对象,其中包含两个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-learn
、joblib
和其他库的版本是相同的。考虑到这个模糊的错误,我不知道从哪里开始调试。有什么想法或建议吗?
解决这个问题的方法相当平庸:在不知情的情况下,我使用
joblib
中的sklearn.externals.joblib
版本来进行酸洗,而使用较新版本的joblib
来取消对象的拾取。当我为这两个任务使用较新版本的joblib
时,问题得到了解决。我的很有趣。我正在使用
git-lfs
,因此文件已更改,joblib无法打开它们。所以我需要运行git lfs pull
来获取实际的文件。因此,如果您使用兼容的joblib版本,请确保您的文件没有以某种方式更改!碰巧我使用
from sklearn.externals import joblib
导出了模型,并尝试使用import joblib
加载。相关问题 更多 >
编程相关推荐