【预测模型】基于emd-SVR实现数据预测matlab源码

204 阅读2分钟

1 模型

针对非平稳,非线性时间序列变化复杂,难以用单一智能方法进行有效预测的问题,提出一种新的基于经验模式分解和支持向量回归的混合智能预测模型.经验模式分解能将非平稳时间序列按其内在的时间特征尺度自适应地分解为多个基本模式分量,根据这些分量各自趋势变化的剧烈程度选择不同的核函数进行支持向量回归预测,对各预测分量进行加权组合,得到原始序列的准确预测值.实证研究表明对于非平稳,非线性时间序列的预测,不论是单步预测还是多步预测,该模型均能取得很好的预测效果.

2 部分代码

```matlab

%% 清空环境变量

tic;

close all;

clear;

clc;

format compact;

%% 数据的提取和预处理

tsx=xlsread('001.xlsx','A1:H406');

ts=xlsread('001.xlsx','J1:J406');

ts = ts';

tsx = tsx';

[TS,TSps] = mapminmax(ts,1,2);

[TSX,TSXps] = mapminmax(tsx,1,2);

% 对数据进行转置,以符合格式要求

rand('seed',0)

[m n]=sort(rand(1,length(TS)));

m=350;

TSX1 = TSX(:,n(1:m))';

TS1 = TS(:,n(1:m))';

TSX2 = TSX(:,n(m+1:end))';

TS2 = TS(:,n(m+1:end))';

TY = mapminmax('reverse',predict',TSps);

T_test=mapminmax('reverse',TS2',TSps);

N = length(T_test);

R2 = (N*sum(TY.*T_test)-sum(TY)*sum(T_test))^2/((N*sum((TY).^2)-(sum(TY))^2)*(N*sum((T_test).^2)-(sum(T_test))^2))

figure

plot(TY,'r-o')

hold on

plot(T_test,'k*-')

title('支持向量机')

legend('svm预测数据','真实数据')

xlabel('样本编号')

```

3 仿真结果

4 参考文献

[1]王巍, 赵宏, 梁朝晖,等. 基于EMD和SVR的混合智能预测模型及实证研究[J]. 计算机工程与应用, 2012, 048(004):225-227.

5 MATLAB代码与数据下载地址

见博客主页