在加载模型时,如何使用min max scaler来拟合测试数据?

问题描述 投票:2回答:1

我正在做自动编码器模型。我保存了模型,在此之前我使用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个型号(所以我不能再次训练并保存它,因为它花费了很多时间,所以我想要出路)。

有没有办法可以通过我训练它的方式来改变它来缩放测试数据(可能是保存缩放值,我不知道)。或者可以对模型进行除垢以便我可以在非缩放数据上测试模型。

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

python machine-learning scaling test-data normalization
1个回答
2
投票
X_test_scaled  = scaler.fit_transform(X_test)

给出X_test的特征的最小值和最大值,而不是X_test,将缩放X_train

您的原始代码不起作用的原因是因为您可能在将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对象。它包含从训练数据中获得的所有信息(缩放因子等)。你只需在qazxswpoi上调用它。

© www.soinside.com 2019 - 2024. All rights reserved.