反向目标变量缩放导致预测结果不正确

问题描述 投票:0回答:0

我正在处理“自动作文评分”的数据集,它有多组作文,每组都有自己的目标分数范围。例如,组 01 的分数范围为 2 到 12,组 02 的范围为 0 到 3,依此类推。为了训练目的标准化这些分数范围,我使用 MinMaxScaler 在 0 和 1 之间缩放分数。

然而,预测结果并没有想象中的那么好,预测分数和目标分数相差很大。这可能是由于缩放过程,因为使用 inverse_transform 方法缩减预测似乎不会产生准确的结果。这就是我缩减的方式:

test_loss, test_mae = lstm_model.evaluate([padded_essay_test, features_test], target_test)

# Make predictions on test data
predictions = lstm_model.predict([padded_essay_test, features_test])


#Scale back
original_predictions = scaler.inverse_transform(predictions)
df_predictions = pd.DataFrame(original_predictions, columns=['original_predictions'])

scores_2d = [[score] for score in df_test['predicted_score']]
original_target = scaler.inverse_transform(scores_2d)
df_target = pd.DataFrame(original_target, columns=['original_target'])

print('Test Loss:', test_loss)
print('Test MAE:', test_mae)
print(df_predictions)
print(df_target)

这是结果:

Test Loss: 0.16554389894008636
Test MAE: 0.32293763756752014
      original_predictions
0                 6.706153
1                 6.293279
2                 7.408381
3                 6.629674
4                 6.368900
...                    ...
4213             15.695969
4214             14.502607
4215             13.892921
4216             14.528075
4217             15.792664

[4218 rows x 1 columns]
      original_target
0                 7.0
1                 8.0
2                 9.0
3                 9.0
4                 9.0
...               ...
4213             33.0
4214             35.0
4215             38.0
4216             32.0
4217             39.0

[4218 rows x 1 columns]

我还尝试使用公式(预测分数*(最大分数-最小分数))+最小分数来缩减每个论文集的预测,而不是使用 inverse_transform,但效果不佳。

subset_predictions_list = []
for subset_name, subset_range in essay_set_ranges.items():
    subset_predictions = df_predictions.loc[df_test['essay_set'] == int(subset_name)]
    subset_min, subset_max = subset_range
    subset_predictions = subset_predictions * (subset_max - subset_min) + subset_min
    subset_predictions_list.append(subset_predictions)

df_subset_predictions = pd.concat(subset_predictions_list)

测试数据范围内没有异常值。测试数据范围位于训练数据范围内。 我也检查了与此相关的其他 StackOverflow 帖子,但这些提供的解决方案都没有解决上述问题。

python normalization scaling minmax inverse-transform
© www.soinside.com 2019 - 2024. All rights reserved.