python-3.x 使用joblib加载pickle scikit-learn模型时发生键错误

bogh5gae  于 2023-03-20  发布在  Python
关注(0)|答案(6)|浏览(435)

我有一个对象,其中包含两个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和其他库的版本是相同的。我不确定从哪里开始调试,给出模糊的错误。有什么想法或建议吗?

6kkfgxo0

6kkfgxo01#

这个问题的解决方案相当平庸:我在sklearn.externals.joblib中使用joblib的版本进行pickle操作,但没有意识到这一点,而是使用了新版本的joblib来取消pickle对象。当我使用新版本的joblib执行这两项任务时,问题得到了解决。

eni9jsuy

eni9jsuy2#

在我身上,发生了我使用from sklearn.externals import joblib导出模型并尝试使用import joblib加载的情况。

pw136qt2

pw136qt23#

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

r6vfmomb

r6vfmomb4#

对我来说,相同版本的joblib被用于转储和加载,但我在python 3.7.4下保存文件,并试图用python 3.7.6加载,这引发了相同的KeyError。

xzv2uavs

xzv2uavs5#

在我的例子中,我试图加载一个XGB。我发现XGB与其他sklearn模型不兼容,所以我做了以下操作:

from xgboost import *
import joblib

def get_model(model_path):
    if 'xgb' in model_path:
        xgb_model = XGBClassifier()
        xgb_model.load_model(model_path)
        model = xgb_model
    else: 
        model = get_obj(model_path)
    return model 

xbg = get_model('Models/xgb_v1.pkl') # an xgb

tree = model = get_model('Models/dt_v1.pkl') # a decition tree
jaql4c8m

jaql4c8m6#

我试图加载多年的joblib文件,这给出了多个级别的错误,这取决于我用来绕过它们的黑客。
随着joblib版本的不断增加,黑客不再工作,我不得不创建一个专门针对sklearn-0.23的conda环境:
conda create -n outdated "scikit-learn<0.23"
之后,我可以打开文件并以不同的方式保存它们,这有时意味着用非sklearn joblib文件import joblib重新保存数据;有时这意味着使用pickle;有时这意味着使用pandas.to_csv
该解决方案特定于为后代重新保存的数据文件。

相关问题