【问题标题】:Unpickling StandardScaler (dumped from Python 2.7) in Python 3.5在 Python 3.5 中 Unpickling StandardScaler(从 Python 2.7 转储)
【发布时间】:2019-09-13 19:21:22
【问题描述】:

我在 Python 2.7 中使用 https://github.com/inspirehep/magpie 训练了多标签分类模型。

现在我正在尝试在 Python 3.5 中移植相同的内容。
要移植,需要 Word2Vec Embedding、Scaler 和 Keras 模型移植到 Python 3.5。

词嵌入和 Keras 模型移植良好。

我正在使用 StandardScaler。我在 Python 2.7 中对它进行了腌制,并在 Python 3.5 中将其解封 解压就好了。

当我在 Python 3.5 中运行预测时,出现以下错误:

sklearn.exceptions.NotFittedError:此 StandardScaler 实例尚未安装。在使用此方法之前,使用适当的参数调用“fit”。

Python 2.7:

scaler_path = 'path to file ......'
pickle.dump(scaler_obj, open(scaler_path, 'wb'))

Python 3:

from sklearn.preprocessing import StandardScaler
scaler_path = 'path to file ......'
loaded_scaler = pickle.load(open(scaler_path, 'rb'),encoding='bytes')

sklearn.exceptions.NotFittedError:此 StandardScaler 实例尚未安装。在使用此方法之前,使用适当的参数调用“fit”。

【问题讨论】:

  • 不推荐这样做,可能会产生意想不到的影响。一个合适的StandardScaler 只学习了 4 个属性(它们是 numpy 数组)。您可以保存这些并将它们设置为新的StandardScaler。您在保存时使用了哪个版本的 scikit-learn?当前的 scikit-learn 版本是否相同?无论如何,错误似乎与此无关。显示错误的完整堆栈跟踪和完整代码

标签: python scikit-learn


【解决方案1】:

我已经尝试使用 joblib 转储和加载它工作正常。

另外,我在 Python 2 中分别腌制了 StandardScaler 的 4 个属性——mean_、scale_、var_ 和 n_samples_seen_。

然后在 Python 3 中解压它们,它工作正常。

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 2016-01-24
    • 2017-12-17
    • 2016-08-19
    • 2017-06-28
    • 2016-10-08
    • 2018-03-28
    • 2018-12-24
    相关资源
    最近更新 更多