我的问题与 此 类似。
我还使用 pickle 来保存和加载模型。我在 pickle.load( ) 期间遇到以下错误
from sklearn.preprocessing import StandardScaler
# SAVE
scaler = StandardScaler().fit(X_train)
X_trainScale = scaler.transform(X_train)
pickle.dump(scaler, open('scaler.scl','wb'))
# =================
# LOAD
sclr = pickle.load(open('scaler.scl','rb')) # => ModuleNotFoundError: No module named 'sklearn.preprocessing._data'
X_testScale = sclr.transform(X_test)
ModuleNotFoundError:没有名为“sklearn.preprocessing._data”的模块
看起来像是 sklearn 版本问题。我的sklearn版本是0.20.3,Python版本是3.7.3。
但我在 Anaconda .zip 文件中使用 Python。是否可以在 不 更新 sklearn 版本的情况下解决这个问题?
原文由 TJCLARK 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在使用 Anaconda 的 StandardScaler 中收到了完全相同的错误消息。
通过运行修复它:
我认为问题是由于运行 pickle dump 以在具有较新版本的 scikit-learn 的机器上创建缩放器文件,然后尝试在具有较旧版本的 scikit-learn 的机器上运行 pickle load 引起的。 (在使用较旧版本的 scikit-learn 的机器上运行 pickle load 时出现错误,但在使用较新版本的 scikit-learn 的机器上运行 pickle load 时没有错误。两台 Windows 机器)。也许这是由于更新版本对有关下划线的函数使用了不同的命名约定(如上所述)?
Anaconda 不允许我自己更新 scikit-learn 库,因为它声称它需要旧版本(出于某种原因我无法理解)。也许另一个图书馆正在使用它?所以我不得不通过同时更新所有库来修复它,这很有效。