参加这个Kaggle 比赛,有一些问题。使用此代码:
def r2_keras(y_true, y_pred):
SS_res = K.sum(K.square(y_true - y_pred))
SS_tot = K.sum(K.square(y_true - K.mean(y_true)))
return ( 1 - SS_res/(SS_tot + K.epsilon()) )
我的训练输出如下:
0s 138us/step - loss: 0.1340 - mean_squared_error: 0.1340 - r2_keras: 0.7565 - val_loss: 0.4112 - val_mean_squared_error: 0.4112 - val_r2_keras: 0.4064
Scaled Validation r2: 0.5182
Unscaled Validation r2: -152.1261
我使用 20% 的训练数据进行验证。
我在训练期间跟踪这些指标:
- 训练损失,mse 和 r2
- 验证损失,mse 和 r2
训练后,我在模型上获得了这些指标:
R2 用于验证缩放数据
R2 用于验证未缩放数据
scaler = StandardScaler()
scaled_train = scaler.fit_transform(train_df)
scaled_test = scaler.transform(test_df)
...
m.fit( X_train, Y_train, epochs=epochs, validation_data=(X_test,Y_test))
....
from sklearn.metrics import r2_score
scaled_r2 = r2_score(prediction, scaled_test_df[[target]].values)
unscaled_r2 = r2_score(descaled_prediction, test_df[target].values)
所以,我的问题是:
- 未缩放和缩放 r2 的相关性不高(0.31 AAMOF)。哪一个最能描述模型在看不见的数据上的准确性?
- 为什么未缩放的 r2 与缩放的 r2 不同?
- 模型 r2 与训练期间的任何验证 r2 都不相同 (
val_r2_keras)。训练后的模型 r2 不应该与训练期间报告的模型相同吗?