You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GluonTS TransformerPredictor转换forecast_it为列表时遇形状错误

解决GluonTS TransformerPredictor预测迭代器转列表的形状错误

可能的原因及修复步骤

1. 修正feat_dynamic_real的维度

GluonTS要求feat_dynamic_real的形状为**(时间步数量, 动态特征数量)**。你的代码中使用了.T转置,可能导致维度颠倒:

  • 如果df['feat_dynamic_real']的每一列对应一个动态特征,那么df['feat_dynamic_real'].values本身就是正确的(时间步, 特征数)形状,不需要转置。
  • 移除.T,并确认维度:
train_data = ListDataset(
    [{
        'start': df.index[0],
        'target': df['target'].values,
        'feat_dynamic_real': df['feat_dynamic_real'].values  # 移除.T
    }],
    freq='D'
)

2. 统一处理feat_static_cat字段

当数据集没有静态类别特征时,不要设置为None,而是直接省略该字段,或者设置为空数组,避免样本间字段结构不一致:

# 无静态特征时,直接去掉feat_static_cat键
train_data = ListDataset(
    [{
        'start': df.index[0],
        'target': df['target'].values,
        'feat_dynamic_real': df['feat_dynamic_real'].values
    }],
    freq='D'
)

3. 匹配input_size与输入特征维度

TransformerPredictor的input_size需要等于目标变量维度(1) + 动态特征数量,否则会导致模型输出形状异常:

# 计算动态特征数量
num_dynamic_feat = df['feat_dynamic_real'].shape[1] if 'feat_dynamic_real' in df.columns else 0
input_size = 1 + num_dynamic_feat

predictor = TransformerPredictor(
    input_size=input_size,
    prediction_length=30,
    freq='D',
    context_length=30,
    trainer=Trainer(epochs=10)
)

4. 验证预测迭代器元素

如果以上修复后仍有问题,先逐个查看forecast_it的元素,确认每个预测结果的结构是否正常:

forecast_it, ts_it = make_evaluation_predictions(dataset=train_data, predictor=predictor)
# 打印第一个预测结果
for forecast in forecast_it:
    print("预测结果形状:", forecast.mean.shape)
    print("预测结果结构:", dir(forecast))
    break

内容的提问来源于stack exchange,提问作者Grace Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:42:40