Windows下auto.arima并行报错:'mc.cores' >1不支持的问题求助
解决Windows下auto.arima多核心并行报错的方案
报错核心原因是forecast包的auto.arima默认用mclapply实现并行,而Windows系统不支持mclapply开启多核心(该函数仅兼容macOS/Linux)。旧电脑之前大概率未真正启用并行(或依赖更早版本的临时兼容逻辑),以下两种方案可实现Windows下的多核心运行:
方案1:使用fable包的跨平台并行版本
fable是forecast的下一代工具,原生支持跨平台并行,操作更简洁:
- 安装并加载依赖包:
install.packages(c("fable", "future", "tsibble")) library(fable) library(future) library(tsibble) - 设置并行会话,指定核心数:
plan(multisession, workers = 14) - 转换时间序列格式并运行模型:
# 将单变量时间序列转为tsibble格式(fable要求的结构) ForecastTS_tsbl <- as_tsibble(ForecastTS) # 匹配原代码参数(d=1, D=1),加入外部回归变量 fit_arima_Sales <- ForecastTS_tsbl %>% model(ARIMA(value ~ pdq(d=1) + PDQ(D=1) + as.numeric(Forecastxreg), stepwise = FALSE, approximation = FALSE)) - 提取模型结果:执行
fit_arima_Sales %>% pull(.model)即可获得和原auto.arima一致的模型对象。
方案2:用foreach+doParallel手动实现并行搜索
若不想切换工具包,可手动拆分ARIMA阶数搜索任务,用Windows支持的并行方式实现:
- 安装并加载依赖包:
install.packages(c("foreach", "doParallel", "forecast")) library(foreach) library(doParallel) library(forecast) - 注册并行集群:
cl <- makeCluster(14) registerDoParallel(cl) - 定义阶数搜索范围(匹配
auto.arima默认规则):p_range <- 0:3 q_range <- 0:3 P_range <- 0:2 Q_range <- 0:2 all_orders <- expand.grid(p = p_range, q = q_range, P = P_range, Q = Q_range) - 并行训练并筛选最优模型:
# 并行训练所有候选模型 model_list <- foreach(i = 1:nrow(all_orders), .packages = "forecast") %dopar% { arima(ForecastTS, order = c(all_orders$p[i], 1, all_orders$q[i]), seasonal = list(order = c(all_orders$P[i], 1, all_orders$Q[i])), xreg = Forecastxreg) } # 按AIC值筛选最优模型 aic_values <- sapply(model_list, AIC) fit_arima_Sales <- model_list[[which.min(aic_values)]] # 关闭并行集群 stopCluster(cl)
注意:若原auto.arima的阶数搜索范围不同,需调整p_range、q_range等参数。
内容的提问来源于stack exchange,提问作者RyanM0913
相关产品推荐
相关产品推荐

