我已经构建了一个模型,我想测试看不见的数据。我每天提供数据,每天可以有不同的范围。例如,如果我使用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和较低的大值。
答案 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()期间看到的最大值和最小值存储在训练数据上,然后将它们用于测试数据,以正确缩放数据。