python - 加载模型时如何使用 min max scaler 拟合测试数据?

标签 python machine-learning scaling test-data normalization

我正在做自动编码器模型。我已经保存了模型,之前我使用 min max scaler 缩放了数据。

X_train = df.values
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)

完成此操作后,我安装了模型并将其保存为“h5”文件。现在,当我提供测试数据时,在自然地加载保存的模型后,它也应该被缩放。

所以当我加载模型并使用

缩放它时
X_test_scaled  = scaler.transform(X_test)

报错

NotFittedError: This MinMaxScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

所以我给了X_test_scaled = scaler.fit_transform(X_test) (我有一种预感这是愚蠢的)确实给出了一个结果(在加载保存的模型和测试之后)当我训练它并一起测试它时它是不同的。为了我的目的,我现在已经保存了大约 4000 个模型(所以我不能训练并再次保存它,因为它会花费很多时间,所以我想要一个出路)。

有没有一种方法可以通过按我训练的方式转换测试数据来缩放测试数据(可能会保存缩放后的值,我不知道)。或者可以对模型进行去缩放,以便我可以在非-缩放数据。

如果我过分强调或过分强调了任何一点,请在评论中告诉我!

最佳答案

X_test_scaled  = scaler.fit_transform(X_test)

将根据X_test X_train 中特征的最小值和最大值来缩放X_test

您的原始代码不起作用的原因是 您可能在将 scaler 适配到 X_train 之后没有保存它,或者以某种方式覆盖了它(例如,通过重新初始化它)。这就是引发错误的原因,因为 scaler 不适合任何数据。

当您随后调用 X_test_scaled = scaler.fit_transform(X_test) 时,您正在将 scaler 拟合到 X_test 并同时转换 X_test ,这就是代码能够运行的原因,但是正如您已经推测的那样,这一步是不正确的。

你想要的是

X_train = df.values
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)

# Save scaler
import pickle as pkl
with open("scaler.pkl", "wb") as outfile:
    pkl.dump(scaler, outfile)

# Some other code for training your autoencoder
# ...

然后在你的测试脚本中

# During test time
# Load scaler that was fitted on training data
with open("scaler.pkl", "rb") as infile:
    scaler = pkl.load(infile)
    X_test_scaled = scaler.transform(X_test)  # Note: not fit_transform.

请注意,从磁盘加载回 scaler 对象后,您不必重新调整对象。它包含从训练数据中获得的所有信息(比例因子等)。您只需在 X_test 上调用它即可。

关于python - 加载模型时如何使用 min max scaler 拟合测试数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54920707/

相关文章:

python - 选择具有给定属性值的网络节点

python - Itertools.permutations 返回 <object> 而不是排列列表

Android 位图缩放不正确

android - 为什么我的矢量可绘制缩放不符合预期?

c# - 如何解决使用主成分分析引发的 OutOfMemoryException

ffmpeg 转置源和缩放水印以适应不同的视频大小

python - 值错误: Classification metrics can't handle a mix of unknown and binary targets?

python - 执行 arch -i386 pip2 install skype4py 时可执行文件中的 CPU 类型错误

machine-learning - 是否有计算振荡信号重复次数的标准方法?

python-3.x - 如何使用 python 中的模型将输入的 0 值替换为预测值