缩放TEST数据,这不是列车数据的真实代表

时间:2018-01-30 10:43:43

标签: python pandas scikit-learn

我已经构建了一个模型,我想测试看不见的数据。我每天提供数据,每天可以有不同的范围。例如,如果我使用MinMaxScaler(),我会将训练数据缩放到[0,1]间隔。

现在,训练集中的最大值为100,将转换为1.

当我的测试数据每天进来时,实际上可能会发现最大值实际为10,这也会转换为1.

# min_max_scaler = preprocessing.MinMaxScaler()
# df_scaled = min_max_scaler.fit_transform(df.values)

我尝试使用标准化,例如df_norm = (df - df.mean()) / (df.max() - df.min()),然后在测试数据上使用这些值:

test_norm = (test_df - df.mean()) / (df.max() - df.min())

但我的数据不是正常分发的。它可能是指数分布的,具有大量的0和较低的大值。

1 个答案:

答案 0 :(得分:1)

没有您的最大测试值(即10)不会缩放为1,但如果在训练数据中对已学习的最大值和最小值进行正确使用,则为0.1。

这可以通过仅在测试数据上调用min_max_scaler.transform()来实现。 fit()fit_transform()仅用于培训数据。

因此,对于训练数据,代码是相同的:

df_train_scaled = min_max_scaler.fit_transform(df_train.values)

但是对于测试数据,它变成了:

df_test_scaled = min_max_scaler.transform(df_test.values)

这样,MinMaxScaler会将fit()期间看到的最大值和最小值存储在训练数据上,然后将它们用于测试数据,以正确缩放数据。