无法使用 sklearn 的 joblib 加载 pickle 文件

Flu*_*uxy 0 python pickle scikit-learn

我在集群中训练了一个模型,下载了它(pkl 格式)并尝试在本地加载。我知道 sklearn 的 joblib 版本用于保存模型mymodel.pkl(但我不知道到底是哪个版本......)。

from sklearn.externals import joblib

print(joblib.__version__)

model = joblib.load("mymodel.pkl")
Run Code Online (Sandbox Code Playgroud)

0.13.0我本地使用sklearn的joblib版本。

这是我得到的错误:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-100-d0a3c42e5c53> in <module>
      3 print(joblib.__version__)
      4 
----> 5 model = joblib.load("mymodel.pkl")

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\externals\joblib\numpy_pickle.py in load(filename, mmap_mode)
    596                     return load_compatibility(fobj)
    597 
--> 598                 obj = _unpickle(fobj, filename, mmap_mode)
    599 
    600     return obj

~\AppData\Local\Continuum\anaconda3\lib\site-packages\sklearn\externals\joblib\numpy_pickle.py in _unpickle(fobj, filename, mmap_mode)
    524     obj = None
    525     try:
--> 526         obj = unpickler.load()
    527         if unpickler.compat_mode:
    528             warnings.warn("The file '%s' has been generated with a "

~\AppData\Local\Continuum\anaconda3\lib\pickle.py in load(self)
   1083                     raise EOFError
   1084                 assert isinstance(key, bytes_types)
-> 1085                 dispatch[key[0]](self)
   1086         except _Stop as stopinst:
   1087             return stopinst.value

KeyError: 239
Run Code Online (Sandbox Code Playgroud)

更新:

我也尝试过,但出现错误AttributeError: 'str' object has no attribute 'readable'

with io.BufferedReader("mymodel.pkl") as pickle_file:
    model = pickle.load(pickle_file)
Run Code Online (Sandbox Code Playgroud)

小智 6

你试图用 转储它joblib.dump('pipeline','mymodel.pkl')。这仅转储了字符串“pipeline”!不是您实际的管道对象。

正确转储它:

joblib.dump(pipeline,'mymodel.pkl')
Run Code Online (Sandbox Code Playgroud)

...然后读回:

model = joblib.load('mymodel.pkl')
Run Code Online (Sandbox Code Playgroud)