Pickle 和 Numpy 版本

Pickle and Numpy versions

我有一些无法重新训练的旧 sklearn 模型。他们很久以前就被腌制过,版本不明确。我可以用 Python 3.6 和 Numpy 1.14 打开它们。但是当我尝试使用 Numpy 1.18 迁移到 Python 3.8 时,我在加载它们时遇到段错误。

我尝试使用 Python 3.6 中的协议 4 转储它们,但没有帮助。

节省:

with open('model.pkl', 'wb') as fid:
    pickle.dump(model, fid, protocol=4)

正在加载:

model = pickle.load(open('model.pkl', "rb"))

遇到这种情况我有什么办法吗?

对我有用的(非常task-specific但也许会对某人有所帮助):

旧依赖项:

import joblib
model = pickle.load(open('model.pkl', "rb"), encoding="latin1")
joblib.dump(model.tree_.get_arrays()[0], "training_data.pkl")

较新的依赖项:

import joblib
from sklearn.neighbors import KernelDensity

data = joblib.load("training_data.pkl")
kde = KernelDensity(
      algorithm="auto",
      atol=0,
      bandwidth=0.5,
      breadth_first=True,
      kernel="gaussian",
      leaf_size=40,
      metric="euclidean",
      metric_params=None,
      rtol=0
).fit(data)

with open("new_model.pkl", "wb") as f:
    pickle.dump(kde, f)