我正在处理“自动作文评分”的数据集,它有多组作文,每组都有自己的目标分数范围。例如,组 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 帖子,但这些提供的解决方案都没有解决上述问题。