ModuleNotFoundError:没有名为“sklearn.preprocessing._data”的模块

TJC*_*ARK 8 python pickle scikit-learn

我的问题与类似。

我还使用泡菜来保存和加载模型。我在 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)
Run Code Online (Sandbox Code Playgroud)

ModuleNotFoundError:没有名为“sklearn.preprocessing._data”的模块

看起来像是 sklearn 版本问题。我的 sklearn 版本是 0.20.3,Python 版本是 3.7.3。

但我在 Anaconda .zip 文件中使用 Python。是否可以在更新 sklearn 版本的情况下解决此问题?

Cle*_*rin 5

我使用 Anaconda 的 StandardScaler 有完全相同的错误消息。

通过运行修复它:

conda update --all
Run Code Online (Sandbox Code Playgroud)

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

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