固定Holt模型参数对测试集做一步预测时参数变动问题
问题原因
你现有写法的平滑参数发生变动,是因为holt()函数仅传入model参数时,默认仍会基于新的测试集数据重新估计模型参数,不会自动沿用训练阶段得到的固定参数。
解决方法
有两种常用实现方式,都可以达到固定训练好的参数、在测试集直接预测的效果:
方式1:显式传入训练得到的所有参数,关闭参数估计
核心是调用holt()拟合测试集时,手动传入训练阶段得到的平滑参数、初始水平与趋势值,同时设置estimate = FALSE禁止重新估计参数。
library(forecast) # 训练集拟合初始Holt模型 set.seed(123) # 可加随机种子保证结果可复现 train_data <- rnorm(500) + runif(500) m_train <- holt(train_data) # 提取训练得到的固定参数 train_alpha <- m_train$model$par["alpha"] train_beta <- m_train$model$par["beta"] train_l0 <- m_train$model$initstate[1] train_b0 <- m_train$model$initstate[2] # 测试集拟合时完全沿用训练参数,不重新估计 test_data <- rnorm(100) m_test <- holt(test_data, alpha = train_alpha, beta = train_beta, initial = list(l = train_l0, b = train_b0), estimate = FALSE) # 验证参数与训练集完全一致 m_train$model$par m_test$model$par
方式2:使用refit()方法直接复用模型
forecast包为Holt模型对应的ets类提供了更简便的refit()接口,设置reestimate = FALSE即可直接复用训练好的全部参数:
# 直接复用m_train的参数拟合测试集 m_test_refit <- refit(m_train, newdata = test_data, reestimate = FALSE) # 验证参数一致 m_test_refit$model$par
内容的提问来源于stack exchange,提问作者Szymon Fraś
相关产品推荐
相关产品推荐

