ModuleNotFoundError: No module named 'sklearn.preprocessing._data'

ModuleNotFoundError: No module named 'sklearn.preprocessing._data'

我的问题类似于

我还使用 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 版本 是否可以解决这个问题?

我在使用 Anaconda 的 StandardScaler 中收到了完全相同的错误消息。

已由 运行ning 修复:

conda update --all

我认为这个问题是由于 运行 在装有较新版本的 scikit-learn 的机器上创建缩放器文件的 pickle 转储,然后尝试 运行 pickle 加载造成的带有旧版本 scikit-learn 的机器。 (当使用旧版本的 scikit-learn 在机器上 运行ning pickle load 时出现错误,但在使用较新版本的 scikit-learn 的机器上 运行ning pickle load 时没有错误。两者windows 台机器)。也许这是由于较新的版本对有关下划线的函数使用了不同的命名约定(如上所述)?

Anaconda 不让我自己更新 scikit-learn 库,因为它声称它需要旧版本(出于某种原因我无法理解)。也许另一个图书馆正在使用它?所以我不得不通过同时更新所有库来修复它,这很有效。

通过以下方式升级到 sklearn 的兼容版本: pip install -U scikit-learn

我在更新 scikit-learn 后遇到了类似的问题。就我而言,罪魁祸首是 QuantileTransformer。改变

from sklearn.preprocessing.data import QuantileTransformer

from sklearn.preprocessing import QuantileTransformer

对我有用。

当 sklearn 版本不匹配时,会出现这个非常具体的问题。例如,尝试反序列化与另一个 sklearn 版本 < 0.22.X 一起转储的 sklearn(>= 0.22.X) 对象。 Sklearn 在这些版本之间引入了一个变化,查看他们的发布网站以获取 mo 信息

安装旧版本的 sklearn pip install "scikit-learn==0.19.0"

从 sklearn 导入 preprocessing._data 作为 StandardScaler