多种时间序列预测算法的MATLAB实现
1.多种时间序列预测算法
自回归(AR) 、移动平均(MA)、 自回归移动平均(ARMA)、 自回归积分移动平均(ARIMA) 、季节性自回归积分移动平均(SARIMA)、 具有外生回归量的季节性自回归积分移动平均(SARIMAX) 、向量自回归(VAR)、 向量自回归移动平均(VARMA)、 具有外生回归量的向量自回归移动平均(VARMAX) 、简单指数平滑(SES) 、Holt-Winters指数平滑(HWES)
2.MATLAB代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 主程序
% 兼MATLAB 2014b
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;close all;clear all;warning off;%清除变量%% 1) 生成 “有一定规律” 的合成数据(含趋势 + 季节 + 噪声 + 外生变量)
N = 240; % 数据长度(20 年 × 月度,季节周期 s=12)
s = 12; % 季节周期
[y, y_multi, Xex] = gen_data(N, s);
% y : 单变量序列 (Nx1)
% y_multi : 多变量序列 (Nx2) -> 两个相关联的系列 y1,y2
% Xex : 外生变量 (Nx1)H = 24; % 预测步长(未来 24 点)
train_ratio = 0.8;
T = floor(N*train_ratio);
y_tr = y(1:T); y_te = y(T+1:end);
X_tr = Xex(1:T,:); X_te = Xex(T+1:end,:);
Y_tr = y_multi(1:T,:); Y_te = y_multi(T+1:end,:); % 多变量%% 2) 单变量模型 =========================================================
% 参数(可改)
p=2; d=0; q=1; % ARIMA 参数
P=1; D=1; Q=1; % 季节 ARIMA 参数
s_season = s; % 季节周期% 2.1 AR(p)
model_ar = ar_fit(y_tr, p);
[yhat_ar, yfc_ar] = model_ar.predict(y, H);
plot_util(y, yhat_ar, yfc_ar, T, 'AR(p)');% 2.2 MA(q)
model_ma = ma_fit(y_tr, q);
[yhat_ma, yfc_ma] = model_ma.predict(y, H);
plot_util(y, yhat_ma, yfc_ma, T, 'MA(q)');% 2.3 ARMA(p,q)
model_arma = arma_fit(y_tr, p, q);
[yhat_arma, yfc_arma] = model_arma.predict(y, H);
plot_util(y, yhat_arma, yfc_arma, T, 'ARMA(p,q)');% 2.4 ARIMA(p,d,q)
d = 1; % 演示做一次非季节差分
model_arima = arima_fit(y_tr, p, d, q);
[yhat_arima, yfc_arima] = model_arima.predict(y, H);
plot_util(y, yhat_arima, yfc_arima, T, sprintf('ARIMA(%d,%d,%d)',p,d,q));% 2.5 SARIMA(p,d,q)(P,D,Q)_s
d = 0; D = 1; % 演示做一次季节差分
model_sarima = sarima_fit(y_tr, p,d,q, P,D,Q, s_season);
[yhat_sarima, yfc_sarima] = model_sarima.predict(y, H);
plot_util(y, yhat_sarima, yfc_sarima, T, ...sprintf('SARIMA(%d,%d,%d)(%d,%d,%d)_%d',p,d,q,P,D,Q,s_season));% 2.6 SARIMAX:带外生变量
model_sarimax = sarimax_fit(y_tr, X_tr, p,d,q, P,D,Q, s_season);
[yhat_sarimax, yfc_sarimax] = model_sarimax.predict(y, Xex, H);
plot_util(y, yhat_sarimax, yfc_sarimax, T, 'SARIMAX');% 2.7 SES(简单指数平滑)
alpha = 0.2;
model_ses = ses_fit(y_tr, alpha);
[yhat_ses, yfc_ses] = model_ses.predict(y, H);
plot_util(y, yhat_ses, yfc_ses, T, 'SES');% 2.8 Holt-Winters(HWES,加性)
alpha = 0.2; beta=0.1; gamma=0.2;
model_hwes = hwes_fit(y_tr, s, alpha,beta,gamma, 'additive');
[yhat_hwes, yfc_hwes] = model_hwes.predict(y, H);
plot_util(y, yhat_hwes, yfc_hwes, T, 'Holt-Winters (additive)');%% 3) 多变量模型 =========================================================
% 3.1 VAR(p)
pvar = 2;
model_var = var_fit(Y_tr, pvar);
[Yhat_var, Yfc_var] = model_var.predict(y_multi, H);
plot_util(Y_tr(:,1), Yhat_var(:,1), Yfc_var(:,1), T, 'VAR - y1');
plot_util(Y_tr(:,2), Yhat_var(:,2), Yfc_var(:,2), T, 'VAR - y2');% 3.2 VARMA(p,q) —— 两步法(先 VAR,再在残差上加 MA)
pvar=2; qma=1;
model_varma = varma_fit(Y_tr, pvar, qma);
[Yhat_varma, Yfc_varma] = model_varma.predict(y_multi, H);
plot_util(Y_tr(:,1), Yhat_varma(:,1), Yfc_varma(:,1), T, 'VARMA - y1');
plot_util(Y_tr(:,2), Yhat_varma(:,2), Yfc_varma(:,2), T, 'VARMA - y2');% 3.3 VARMAX(带外生量 Xex)—— 将 Xex 作为各方程的额外回归项
model_varmax = varmax_fit(Y_tr, X_tr, pvar, qma);
[Yhat_varmax, Yfc_varmax] = model_varmax.predict(y_multi, Xex, H);
plot_util(Y_tr(:,1), Yhat_varmax(:,1), Yfc_varmax(:,1), T, 'VARMAX - y1');
plot_util(Y_tr(:,2), Yhat_varmax(:,2), Yfc_varmax(:,2), T, 'VARMAX - y2');fprintf('全部模型演示完成。请查看各图窗。\n');
function model = arima_fit(y, p, d, q)
% ARIMA(p,d,q) —— 先差分,再拟合 ARMA
yd = diff_series(y, d);
yd = yd(~isnan(yd));
arma = arma_fit(yd, p, q);
model.p=p; model.d=d; model.q=q; model.arma=arma;
model.predict = @(y_full,H) arima_predict(y_full, d, arma, H);
endfunction [yhat,yfc] = arima_predict(y_full, d, arma, H)
y = y_full(:);
yd = diff_series(y, d);
idx = ~isnan(yd);
yfit_on_diff = NaN(length(y),1);
[yhatd, yfc_d] = arma.predict(yd(idx), H);
yfit_on_diff(idx) = yhatd;
% 将差分域拟合还原到原序列:累加还原
yhat = restore_diff(y, yfit_on_diff, d);
yfc = restore_forecast(y, yhat, yfc_d, d);
endfunction yrest = restore_diff(y, yhatd, d)
yrest = yhatd;
for k=1:dfor t=1:length(yrest)if isnan(yrest(t)), continue; endif t==1, yrest(t)=y(t); else, yrest(t)=yrest(t-1)+yhatd(t); endend
end
endfunction yfc = restore_forecast(y, yhat, yfc_d, d)
last = y(end);
yfc = NaN(length(yfc_d),1);
cur = last;
for h=1:length(yfc_d)cur = cur + yfc_d(h);yfc(h) = cur;
end
end
function model = ar_fit(y, p)
% AR(p) Yule-Walker 估计 + 递推预测
y = y(:);
T = length(y);
% 去均值
mu = mean(y(~isnan(y)));
yc = y - mu;
% 自相关
r = xcorr(yc,'unbiased');
mid = length(r)/2 + 0.5;
r0_to_p = r(mid:mid+p);
R = toeplitz(r0_to_p(1:p));
rvec = r0_to_p(2:p+1);
phi = R \ rvec; % AR 系数(不含常数)model.mu = mu;
model.phi = phi(:)';
model.order = p;
model.predict = @(y_full, H) ar_predict(y_full, mu, phi, H);
end% function [yhat, yfc] = ar_predict(y_full, mu, phi, H)
% p = length(phi);
% y = y_full(:);
% T = length(y);
% yhat = NaN(T,1);
% for t=p+1:T
% % yhat(t) = mu + phi * (y(t-1:-1:t-p) - mu);
% yhat(t) = mu + phi * (y(t-1:-1:t-p)' - mu);
% end
% yfc = NaN(H,1);
% y_ext = [y; yhat(end)]; % 初始
% for h=1:H
% last = y_ext(end:-1:end-p+1);
% y_next = mu + phi*(last - mu);
% y_ext = [y_ext; y_next];
% yfc(h) = y_next;
% end
% endfunction [yhat, yfc] = ar_predict(y_full, mu, phi, H)phi = phi(:); % 强制列向量 (p×1)y = y_full(:);T = length(y);p = length(phi);yhat = NaN(T,1);for t = p+1:Tylag = y(t-1:-1:t-p) - mu; % 得到 p×1 向量yhat(t) = mu + phi' * ylag; % 点积 → 标量end% --- 预测 ---yfc = NaN(H,1);y_ext = y;for h = 1:Hlast = y_ext(end:-1:end-p+1) - mu; % p×1y_next = mu + phi' * last;y_ext = [y_ext; y_next];yfc(h) = y_next;end
end
3.程序结果




4.代码、程序订制(MATLAB、Python) →QQ:1579325979
4.1 各类智能算法
| 中文名称 | 英文全称 | 缩写 | 出现年份 |
| 遗传算法 | Genetic Algorithm | GA | 1975 |
| 粒子群优化算法 | Particle Swarm Optimization | PSO | 1995 |
| 蚁群优化算法 | Ant Colony Optimization | ACO | 1992 |
| 模拟退火算法 | Simulated Annealing | SA | 1983 |
| 免疫优化算法 | Immune Optimization Algorithm | IA | 1986 |
| 贪婪算法 | Greedy Algorithm | - | 1970 |
| 差分进化算法 | Differential Evolution | DE | 1997 |
| 混合蛙跳算法 | Shuffled Frog Leaping Algorithm | SFLA | 2003 |
| 人工蜂群算法 | Artificial Bee Colony | ABC | 2005 |
| 人工鱼群算法 | Artificial Fish Swarm Algorithm | AFSA | 2002 |
| 萤火虫算法 | Glowworm Swarm Optimization | GSO | 2005 |
| 果蝇优化算法 | Fruit Fly Optimization Algorithm | FOA | 2011 |
| 布谷鸟搜索算法 | Cuckoo Search | CS | 2009 |
| 猴群算法 | Monkey Algorithm | MA | 2008 |
| 免疫网络算法 | Immune Network Algorithm | aiNet | 2000 |
| 水滴算法 | Intelligent Water Drops Algorithm | IWD | 2007 |
| 和声搜索算法 | Harmony Search | HS | 2001 |
| 克隆选择算法 | Clonal Selection Algorithm | CLONALG | 2000 |
| 禁忌搜索算法 | Tabu Search | TS | 1986 |
| 爬山算法 | Hill Climbing | HC | 1940 |
| 引力搜索算法 | Gravitational Search Algorithm | GSA | 2009 |
| 细菌觅食优化算法 | Bacterial Foraging Optimization | BFO | 2002 |
| 蝙蝠算法 | Bat Algorithm | BA | 2010 |
| 邻域搜索算法 | Neighborhood Search | NS | 1960 |
| 变邻域搜索算法 | Variable Neighborhood Search | VNS | 1997 |
| 蜜蜂交配优化算法 | Honey Bees Mating Optimization | HBMO | 2001 |
| 文化基因算法 | Memetic Algorithm | MA | 1989 |
| 烟花算法 | Fireworks Algorithm | FWA | 2010 |
| 思维进化算法 | Mind Evolutionary Algorithm | MEA | 1998 |
| 蜻蜓算法 | Dragonfly Algorithm | DA | 2016 |
| 虚拟力场算法 | Virtual Force Field Algorithm | VFF | 1989 |
| 遗传规划 | Genetic Programming | GP | 1992 |
| 鲸鱼优化算法 | Whale Optimization Algorithm | WOA | 2016 |
| 灰狼优化算法 | Grey Wolf Optimizer | GWO | 2014 |
| 狼群算法 | Wolf Pack Algorithm | WPA | 2007 |
| 鸡群优化算法 | Chicken Swarm Optimization | CSO | 2014 |
| 生物地理学优化算法 | Biogeography-Based Optimization | BBO | 2008 |
| 分布估计算法 | Estimation of Distribution Algorithm | EDA | 1996 |
| 帝国竞争算法 | Imperialist Competitive Algorithm | ICA | 2007 |
| 天牛须搜索算法 | Beetle Antennae Search Algorithm | BAS | 2017 |
| 头脑风暴优化算法 | Brain Storm Optimization | BSO | 2011 |
| 人工势场法 | Artificial Potential Field | APF | 1986 |
| 猫群算法 | Cat Swarm Optimization | CSO | 2006 |
| 蚁狮优化算法 | Ant Lion Optimizer | ALO | 2015 |
| 飞蛾火焰优化算法 | Moth-Flame Optimization | MFO | 2015 |
| 蘑菇繁殖优化算法 | Mushroom Reproduction Optimization | MRO | 2020 |
| 麻雀搜索算法 | Sparrow Search Algorithm | SSA | 2020 |
| 水波优化算法 | Water Wave Optimization | WWO | 2015 |
| 斑鬣狗优化算法 | Spotted Hyena Optimizer | SHO | 2017 |
| 雪融优化算法 | Snow Ablation Optimization | SAO | 2022 |
| 蝴蝶优化算法 | Butterfly Optimization Algorithm | BOA | 2019 |
| 磷虾群算法 | Krill Herd Algorithm | KHA | 2012 |
| 黏菌算法 | Slime Mould Algorithm | SMA | 2020 |
| 人类学习优化算法 | Human Learning Optimization | HLO | 2014 |
| 母亲优化算法 | Mother Optimization Algorithm | MOA | 2023 |
4.2各类优化问题
| 各种优化课题 | 各种优化课题 |
| 车间调度 | 路由路网优化 |
| 机场调度 | 顺序约束项目调度 |
| 工程项目调度 | 双层规划 |
| 港口调度 | 零件拆卸装配问题优化 |
| 生产线平衡问题 | 水资源调度 |
| 用电调度 | 库位优化 |
| 公交车发车调度 | 库位路线优化 |
| 车辆路径物流配送优化 | 武器分配优化 |
| 选址配送优化 | 覆盖问题优化 |
| 物流公铁水问题优化 | 管网问题优化 |
| 供应链、生产计划、库存优化 | PID优化 |
| 库位优化、货位优化 | VMD优化 |
4.3各类神经网络、深度学习、机器学习
| 序号 | 模型名称 | 核心特点 | 适用场景 |
| 1 | BiLSTM 双向长短时记忆神经网络分类 | 双向捕捉序列上下文信息 | 自然语言处理、语音识别 |
| 2 | BP 神经网络分类 | 误差反向传播训练 | 通用分类任务 |
| 3 | CNN 卷积神经网络分类 | 自动提取空间特征 | 图像、视频分类 |
| 4 | DBN 深度置信网络分类 | 多层受限玻尔兹曼机堆叠 | 特征学习、降维 |
| 5 | DELM 深度学习极限学习机分类 | 结合 ELM 与深度架构 | 复杂分类任务 |
| 6 | ELMAN 递归神经网络分类 | 含反馈连接的递归结构 | 时间序列、语音 |
| 7 | ELM 极限学习机分类 | 随机生成隐藏层,快速训练 | 小样本学习 |
| 8 | GRNN 广义回归神经网络分类 | 基于径向基函数回归 | 函数逼近、时间序列 |
| 9 | GRU 门控循环单元分类 | 门控机制简化 LSTM | 序列建模 |
| 10 | KELM 混合核极限学习机分类 | 结合多核 ELM | 高维复杂数据 |
| 11 | KNN 分类 | 基于距离的分类方法 | 模式识别 |
| 12 | LSSVM 最小二乘法支持向量机分类 | 最小二乘优化 SVM | 小样本分类 |
| 13 | LSTM 长短时记忆网络分类 | 门控机制处理长期依赖 | 语言建模 |
| 14 | MLP 全连接神经网络分类 | 多层感知机 | 通用分类 |
| 15 | PNN 概率神经网络分类 | 基于贝叶斯原理 | 模式识别 |
| 16 | RELM 鲁棒极限学习机分类 | 增强鲁棒性的 ELM | 噪声数据 |
| 17 | RF 随机森林分类 | 多棵决策树集成 | 高维、非线性数据 |
| 18 | SCN 随机配置网络模型分类 | 随机生成网络结构 | 快速训练 |
| 19 | SVM 支持向量机分类 | 寻找最优分类超平面 | 二分类、多分类 |
| 20 | XGBOOST 分类 | 梯度提升决策树 | 大规模结构化数据 |
| 21 | ANFIS 自适应模糊神经网络预测 | 融合模糊逻辑与神经网络 | 复杂非线性系统建模 |
| 22 | ANN 人工神经网络预测 | 多层神经元网络 | 通用预测任务 |
| 23 | ARMA 自回归滑动平均模型预测 | 线性时间序列建模 | 时间序列预测 |
| 24 | BF 粒子滤波预测 | 基于蒙特卡洛采样 | 动态系统状态估计 |
| 25 | BiLSTM 双向长短时记忆神经网络预测 | 双向捕捉序列信息 | 时间序列、文本预测 |
| 26 | BLS 宽度学习神经网络预测 | 增量学习结构 | 在线学习 |
| 27 | BP 神经网络预测 | 误差反向传播训练 | 通用预测 |
| 28 | CNN 卷积神经网络预测 | 自动特征提取 | 图像、视频预测 |
| 29 | DBN 深度置信网络预测 | 多层无监督预训练 | 特征学习预测 |
| 30 | DELM 深度学习极限学习机预测 | 结合 ELM 与深度结构 | 复杂预测任务 |
| 31 | DKELM 回归预测 | 动态核 ELM 回归 | 时间序列回归 |
| 32 | ELMAN 递归神经网络预测 | 递归结构处理时序 | 时间序列 |
| 33 | ELM 极限学习机预测 | 快速训练 | 小样本回归 |
| 34 | ESN 回声状态网络预测 | 储备池计算 | 时间序列预测 |
| 35 | FNN 前馈神经网络预测 | 前向传播 | 通用预测 |
| 36 | GMDN 预测 | 基因表达数据网络建模 | 生物信息学预测 |
| 37 | GMM 高斯混合模型预测 | 多高斯分布建模 | 密度估计、聚类 |
| 38 | GRNN 广义回归神经网络预测 | 径向基函数回归 | 函数逼近 |
| 39 | GRU 门控循环单元预测 | 门控机制简化 LSTM | 时间序列预测 |
| 40 | KELM 混合核极限学习机预测 | 多核 ELM 回归 | 高维回归 |
| 41 | LMS 最小均方算法预测 | 线性回归的迭代优化 | 自适应滤波 |
| 42 | LSSVM 最小二乘法支持向量机预测 | 最小二乘优化 SVM | 回归预测 |
| 43 | LSTM 长短时记忆网络预测 | 门控处理长期依赖 | 时间序列预测 |
| 44 | RBF 径向基函数神经网络预测 | 径向基函数逼近 | 函数拟合 |
| 45 | RELM 鲁棒极限学习机预测 | 增强鲁棒性的 ELM | 噪声数据回归 |
| 46 | RF 随机森林预测 | 决策树集成 | 回归预测 |
| 47 | RNN 循环神经网络预测 | 循环连接处理序列 | 时间序列预测 |
| 48 | RVM 相关向量机预测 | 稀疏贝叶斯学习 | 回归、分类 |
| 49 | SVM 支持向量机预测 | 寻找最优超平面 | 回归预测 |
| 50 | TCN 时间卷积神经网络预测 | 一维卷积处理时序 | 时间序列预测 |
| 51 | XGBoost 回归预测 | 梯度提升决策树 | 大规模回归 |
