【发布时间】:2021-02-23 19:34:21
【问题描述】:
假设您有数字时间序列数据,并且您设法将其拆分为:
X_train、y_train、X_val、y_val、X_test、y_test。
并且您正确地缩放了所有结果:
X_train_scaled, y_train_scaled, X_val_scaled, y_val_scaled, X_test_scaled, y_test_scaled
现在您运行以下代码:
linear = Sequential([
Dense(units=1,activation='linear',input_shape=[X_train_scaled.shape[1])
])
linear.compile(loss='mse',optimizer='adam')
history = linear.fit(X_train_scaled, y_train_scaled,
epochs=50, verbose=1, shuffle=False,
validation_data=(X_valid_scaled.values,y_valid_scaled.values))
如果我们的想法是计算 MSE,我们可以使用缩放的测试数据并通过 2 种“不同”的方式计算它:
mse_linear_scaled_1 = linear.evaluate(X_test_scaled,y_test_scaled)
或使用来自https://www.tensorflow.org/api_docs/python/tf/keras/losses/MeanSquaredError的独立版本
mse = keras.losses.MeanSquaredError()
mse_linear_scaled_2 = mse(y_test_scaled.values,y_pred_scaled).numpy()
如果你做这个练习,mse_linear_scaled_1 = mse_linear_scaled_2(如预期)。
现在问题来了(如果你读到这里,谢谢......)。如果您使用测试数据的 原始比例 执行相同的最后一部分(最终的想法是获取 RMSE 值以将其置于真实数据的上下文中)结果彼此之间非常不同。
mse_linear_unscaled_1 = linear.evaluate(X_test,y_test)
给出的数字与做的完全不同
mse_linear_unscaled_2 = mse(y_test,y_pred).numpy()
如果我想在原始时间序列数字的尺度上得到正确的 RMSE 数字,猜猜这应该是正确的做法吗?
np.sqrt(mse_linear_unscaled_2)
也许.evaluate() 没有考虑到这一点,并且正在做一些我不知道的事情,所以它不会返回正确的数字?
【问题讨论】:
标签: python tensorflow keras mse