如何在GluonTS中使用滑动窗口生成的test_pairs进行预测评估?
解决GluonTS中test_pairs预测时ts_it为空的问题
问题出在test_pairs是TestData类型,它包含两个核心部分:用于模型预测输入的测试数据集,以及对应的真实标签序列。直接把test_pairs传给make_evaluation_predictions会导致函数无法正确解析数据,所以ts_it返回空值。
正确的使用方式如下:
1. 正确传入测试数据进行预测
将test_pairs.test_data作为dataset参数传入make_evaluation_predictions,这才是模型需要的输入数据集:
forecast_it, ts_it = make_evaluation_predictions( dataset=test_pairs.test_data, predictor=predictor, num_samples=100, )
2. 获取真实标签序列
真实的目标序列需要从test_pairs.label中提取,它和forecast_it的结果是一一对应的:
# 转换预测结果和真实序列为列表 forecasts = list(forecast_it) actuals = list(test_pairs.label)
3. 评估预测结果
可以用GluonTS的内置评估指标对比forecasts和actuals:
from gluonts.evaluation import Evaluator evaluator = Evaluator() agg_metrics, item_metrics = evaluator(actuals, forecasts) # 打印整体评估指标 print("整体评估指标:") for metric, value in agg_metrics.items(): print(f"{metric}: {value:.4f}")
完整示例代码
# 分割数据集 training_dataset, test_template = split( dataset, date=pd.Period("2015-04-07 00:00:00", freq="1H") ) test_pairs = test_template.generate_instances( prediction_length=prediction_length, windows=3, distance=24, ) # 训练模型 predictor = estimator.train(training_dataset) # 生成预测 forecast_it, ts_it = make_evaluation_predictions( dataset=test_pairs.test_data, predictor=predictor, num_samples=100, ) # 转换为列表 forecasts = list(forecast_it) actuals = list(test_pairs.label) # 评估结果 evaluator = Evaluator() agg_metrics, item_metrics = evaluator(actuals, forecasts) print("整体评估指标:") for metric, value in agg_metrics.items(): print(f"{metric}: {value:.4f}")
内容的提问来源于stack exchange,提问作者Lord-Goku
相关产品推荐
相关产品推荐

