一、EMD及SVM简介

1 引言 时刻序列猜测是将猜测方针的历史数据按照时刻的顺序排列成为时刻序列,然后剖析它随时刻的改变趋势,外推猜测值。时刻序列猜测,尤其对错平稳、非线性时刻序列的猜测在 经济、金融、工业、生物医学等领域中有着重要的使用。现在常用于时刻序列猜测的有回归模型神经网络等办法,但是这些传统的单一猜测办法难以在信息匮乏和不确定性条件下做出精确有用的猜测?,这就使得有必要依据时刻序列动摇趋势改变的规则和特色,找到一个鲁棒性强、猜测精度高且有用的猜测办法。 经历形式分解(Empirical Mode Decomposition, EMD) 可以依据信号本身的内在特性,将信息自适应地分解到不同的基本形式重量(Intrinsic Mode Function, IMF) 中, 是一种有用的非平稳、非线性信号剖析办法。本文根据EMD和支持向量回归(Support Vector Regression, SVR) 办法, 提出一种新的混合智能猜测模型,为非平稳、非线性时刻序列的猜测问题提供了很好的解决办法。纺织材料价格的猜测实例充分标明该模型的精确性和有用性。

2 理论基础 2.1 经历形式分解 EMD可将恣意信号分解为若干个IMF和一个余项的和34。所谓IMF便是满意如下两个条件的函数或信号:(1) 在整个数据序列中,极值点的数量(包含极大值点和极小值点)与过零 点的数量有必要持平,或最多相差不多于一个;(2)任何一点,信号部分极大值确定的上包络线和部分极小值确定的下包络线的均值为零。EMD分解的具体步骤如下: (1)假定信号为x(t),取其上下包络部分均值组成的序列为m(t),则: h(t)=x(t)-m(t)(1) 对非线性、非平稳数据而言,一般一次处理不足以形成IMF, 一些非对称波仍然存在。把h(t) 看作待处理数据重复上述操作k次,得到:

【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】
(2)当hg(t) 满意IMF的条件时, 就获得了第一个IMF, 记做斤(t)=hg(t)。 (2) 将第一个IMF从信号中分离出来, 得到剩余信号r, () 为: r(t)=x(t)-f(t) (3)
【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】
2.2 支持向量回归 SVR是由Vapnik等人于1995年提出的闯。该算法具有小样本学习、全局最优和推行能力强等突出优点,已成功使用于交通流量及风速猜测等许多领域,并表现出比多层感知器等传统人工神经网络优胜的猜测性能。
【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】
【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】
3 混合智能猜测模型 在选用单一SVR进行猜测时,相同的时刻序列选用不同的核函数会得到不同较大的猜测成果。因此本文提出一种根据 EMD 和 SVR 的混合智能猜测模型,很好地改善了猜测作用。混合智能猜测模型的基本核算流程如下:
【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】

二、部分源代码

%% 清空环境变量
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))';
%% 选择回归猜测剖析最佳的SVM参数c&g
kerneltype=1;%kerneltype=0(线性核) 1(多项式核) 2(rbf核函数) 3(sigmoid核函数)
[bestmse,bestc,bestg] = SVMcgForRegress(TS1,TSX1,-4,4,-4,4,3,0.5,0.5,0.05,kerneltype);
disp('打印选择成果');
str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);
disp(str);
%% 使用回归猜测剖析最佳的参数进行SVM网络训练
cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01 -d 1'];
model = svmtrain(TS1,TSX1,cmd);
 function [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep,kerneltype) %v,cstep这些不写的话便是默认值
%
% 使用网格查找与穿插验证进行核参数与惩罚参数选择
% cmin cmax c的取值规模
% gmin gmax g的取值规模
% v 便是穿插验证参数  一般是5折穿插验证
% cstep gstep 网格取值的步长
% msestep 误差的步长  只是为了最后画等高线图用一用,这样比较好看
% kerneltype=0(线性核) 1(多项式核) 2(rbf核函数) 3(sigmoid核函数)
[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
[m,n] = size(X);
cg = zeros(m,n);
eps = 10^(-4);
bestc = 0;
bestg = 0;
mse = Inf;
basenum = 2;
for i = 1:m  %每更改一组c g值,跑5折穿插验证  最终选择精度最高的那一组c g 
    for j = 1:n
        cmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3 -t ',num2str(kerneltype),' -p 0.1 -d 1'];
        cg(i,j) = svmtrain(train_label, train, cmd);
        if cg(i,j) < mse
            mse = cg(i,j);
            bestc = basenum^X(i,j);
            bestg = basenum^Y(i,j);
        end
        if abs( cg(i,j)-mse )<=eps && bestc > basenum^X(i,j)
            mse = cg(i,j);
            bestc = basenum^X(i,j);
            bestg = basenum^Y(i,j);
        end

三、运转成果

【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】
【优化预测】基于matlab EMD优化SVR数据预测【含Matlab源码 1403期】

四、matlab版别及参考文献

1 matlab版别 2014a

2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]周品.MATLAB 神经网络规划与使用[M].清华大学出版社,2013. [4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013. [5]方清城.MATLAB R2016a神经网络规划与使用28个事例剖析[M].清华大学出版社,2018. [6]王巍,赵宏,梁朝晖,马涛.根据EMD和SVR的混合智能猜测模型及实证研究[J].核算机工程与使用. 2012,48(04)