一种基于小波分解-神经网络的海浪波高预测方法
技术领域
本发明涉及海洋监测技术领域,尤具体地说是一种基于小波分解-神经网络的海浪波高预测方法。
背景技术
随着人们对陆地资源的不断开发利用,使得陆地资源不断衰竭。人类开始将目光投向资源丰富的海洋,海洋逐渐成为人类获取资源的重要途径。但海上的天气复杂多变,是海洋作业时的重要危险来源,如何对海上极端天气尤其是海浪的极值波高进行及时准确的预报成为当今专家学者研究的重点。
凭借风产生一系列波的这个物理过程非常复杂,不稳定,是非线性的,不确定,目前为止对这个物理过程的研究尚未成熟。海浪波高预测尤其是极值波高的预测对于海上航行、近岸工程等具有较为重要的作用。海浪波高的预测主要有两种,一是通过海浪模式,输入具有物理意义的边界条件后计算若干小时后的波高值,另一种方法是利用数学上的预测技术,忽略海浪本身的物理属性来对海浪波高进行预测。
即传统的波浪预测是使用简化法(参数法)或精确法(数值计算法)。简化法从风速获取和持续时间上明确给出波高和周期;精确法则需要波形增长方程式的数值解。数值计算法比参数法更准确,可以同时在多个位置提供信息,并且当风速随着其在给定持续时间内的方向和区域变化时更为合理,但需要大量的海洋学和气象学参数,使得实际预测中预测代价增加,需要大量的海洋学和气象学参数,导致数据的获取任务繁重,可操作性降低。
发明内容
本发明的技术任务是针对以上不足之处,提供一种基于小波分解-神经网络的海浪波高预测方法,对海浪波高进行预测,使对未来一段时间的海浪极值波高的预报成为可能,为海上作业和海上航行提供强有力的保障。
一种基于小波分解-神经网络的海浪波高预测方法,
通过浮标数据生成时间序列,对该时间序列进行分解后重构,解决序列中的杂波;对浮标数据做神经网络训练样本的处理;
进行神经网络模型的训练,对时间序列进行小波分解重构,训练中不断优化训练样本及小波分解层数,利用反馈神经网络进行训练建立相应的小波分解-神经网络模型;
利用在神经网络建立的测试样本对小波分解-神经网络模型进行测试样本测试。
进一步的,建立神经网络模型的训练样本数据处理过程如下:
第一个训练样本的输入样本为x1,x2…xm;理想输出为xm+1,xm+2…xm+n;
第二个训练样本的输入样本为x2,x3…xm+1;理想输出为xm+2,xm+3…xm+n+1;
第三个训练样本的输入样本为x3,x4…xm+2;理想输出为xm+3,xm+4…xm+n+2;
依此规律,第t个训练样本的输入样本为xt,xt+1…xm+t-1;理想输出为xm+t,xm+t+1…xm+t-1+ n。
通过根据该处理过程处理浮标数据,经过反复试验,得到比较理想的所需训练样本的输入样本和输出样本。
优选的,神经网络训练样本处理时选择的浮标数据为每天每小时同一时刻的数据。比如1:40时刻、2:40时刻…24:40时刻,每天得到24的数据,用一周的数据建立模型,就可以得到168个海浪波高数据。根据这168个海浪波高数据,对这些数据做神经网络训练样本的处理。
优选的,m等于5,即第t个训练样本的输入样本为xt,xt+1,xt+2,xt+3,xt+4,输出样本为x5+t,x6+t…x4+t+n。t=1,则训练样本的输入样本为x1,x2,x3,x4,x5,输出样本为x6,x7…x5+n。
优选的,n等于1,即第t个训练样本的理想输出数据为xm+t。t=1,则训练样本的输出样本为xm+1。
当m=5,且n=1时,第一个训练样本的输入样本为x1,x2,x3,x4,x5;输出样本为x6。
优选的,对序列进行不同层的分解重构,将重构的结果依次进行网络训练,根据根据神经网络模型的训练效果比较,小波分解-神经网络模型选择一层小波分解重构,此时效果最好,误差最小。
优选的,将浮标数据生成的时间序列进行两层分解,然后进行重构,解决序列中的杂波,解决预测过程中受杂波干扰的问题,提高预测的准确性。
优选的,采用测试样本,分别通过对未来六小时、未来十二小时和未来十八小时的海浪波高数据预测,进行小波分解-神经网络模型的可靠性测试。测试样本即上述数据处理所得训练样本,通过三个测试样本分别对间隔六小时的三个时间段进行预测,通过观察预测值和真实值之间的误差,检测新建的模型是否合理可靠。
本发明的一种基于小波分解-神经网络的海浪波高预测方法,具有以下优点:
利用时间序列预测方法相对以前复杂的海浪形成的物理方法预测更具有可操作性强、预测成本低、可靠性强的特点;
利用神经网络在时间序列预测的优化,将海浪波高预测与神经网络结合起来,为海洋气象以及相关领域的预测提供新的思路;
利用小波分解使以前预测过程中受杂波干扰的问题得以解决,提高预测的准确性和可靠性。
本方法针对海浪的波高的不确定性和不稳定性,通过神经网络方法,结合小波分析,预测海浪的极值波高。利用神经网络对海浪波高进行预测,使得对未来一段时间的海浪极值波高预报成为可能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
附图1是实施例中小波分解层数对比图;
附图2是实施例中目标误差变化图;
附图3是实施例中未来六小时海浪波高神经网络模型预测图;
附图4是实施例中未来六小时海浪波高神经网络模型预测误差;
附图5是实施例中未来十二小时海浪波高神经网络模型预测图;
附图6是实施例中未来十二小时海浪波高神经网络模型预测误差;
附图7是实施例中未来十八小时海浪波高神经网络模型预测图;
附图8是实施例中未来十八小时海浪波高神经网络模型预测误差;
附图9是小波分解示意图;
附图10是反馈神经网络结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的方案,下面结合具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于小波分解-神经网络的海浪波高预测方法,通过浮标数据生成时间序列,对该时间序列进行分解后重构,解决序列中的杂波;并对浮标数据做神经网络训练样本的处理。
将未处理的时间序列进行两层分解,然后进行重构,解决序列中的杂波,减少预测过程中的杂波干扰。
建立神经网络模型的训练样本数据处理过程如下:
第一个训练样本的输入样本为x1,x2…xm;理想输出为xm+1,xm+2…xm+n;
第二个训练样本的输入样本为x2,x3…xm+1;理想输出为xm+2,xm+3…xm+n+1;
第三个训练样本的输入样本为x3,x4…xm+2;理想输出为xm+3,xm+4…xm+n+2;
依此规律,第t个训练样本的输入样本为xt,xt+1…xm+t-1;理想输出为xm+t,xm+t+1…xm+n+t-1。
进行神经网络模型的训练,对时间序列进行小波分解重构,训练中不断优化训练样本及小波分解层数,直至最优。利用反馈神经网络进行训练建立相应的小波分解-神经网络模型。
通过根据上述处理过程处理浮标数据,在训练中经过反复试验,得到比较理想的所需训练样本的输入样本和输出样本。
当m=5,且n=1时,第一个训练样本的输入样本为x1,x2,x3,x4,x5;输出样本为x6。
根据根据神经网络模型的训练效果比较,小波分解-神经网络模型选择一层小波分解重构,此时效果最好,误差最小。
利用在神经网络建立的测试样本对小波分解-神经网络模型进行测试样本测试。采用测试样本分别通过对未来六小时、未来十二小时和未来十八小时的海浪波高数据预测,进行小波分解-神经网络模型的可靠性测试。
实施例
通过利用小波分解和重构可以有效的去除杂波,小波分解把序列分解为两部分:低频信息和高频信息。低频信息是变化缓慢的部分,是图像的框架,也是轮廓,占全部信息的大部分。高频信息是变化迅速的部分,反映的是图像的细节信息,占全部信息的小部分。上述分解为第一层分解,在第一层分解的基础上把高频信息部分在分解为两部分:低频信息和高频信息,此为第二层分解。第三层分解是把第二层分解出开的高频信息再分解为低频信息和高频信息,以此类推。重构是分解的逆过程,对低频系数和高频系数分别进行抽样和低通、高速滤波处理。
因杂波具有随机性特征,所以在分解过程中分多少层将需要结合具体的波而定,本实施例中分解层数的确定依据结合神经网络训练的效果而定。将需要分解的序列依次分解为1到4层然后重构,将重构的结果依次进行网络训练,选择合理的分解层数。如附图1所示,为1到4层的小波分解层数对比图,由图中对比可以看出,当分解层数为一层时效果最好,误差最小。因此将小波分解-神经网络模型选择一层小波分解。
时间序列的分解与重构:
生成时间序列A=[
1.16 1.15 1.01 1.14 1.05 0.99 1.01 1.02 1.03 1.12 1.17 1.19 1.24 1.221.09 1.11 1.14 1.21 1.16 1.09 1.13 1.08 1.09 1.11 1.10 1.20 1.33 1.46 1.391.36 1.36 1.33 1.27 1.22 1.17 1.13 1.06 1.09 1.09 1.03 1.02 1.04 1.01 1.000.99 1.06 0.97 0.92 0.89 0.89 0.85 0.82 0.86 0.85 0.76 0.79 0.85 0.82 0.830.80 0.91 0.85 0.81 0.87 0.91 0.91 0.92 0.86 0.87 0.88 0.89 0.91 0.90 0.940.94 0.94 1.08 1.07 1.07 1.00 0.92 0.91 0.90 0.93 0.83 0.90 0.92 0.95 0.910.94 0.96 0.94;
]
将这个时间序列进行两层分解后进行重构,通过这一分解重构过程,有效解决了序列A中的杂波,为将要进行的神经网络训练做准备。
小波分解-神经网络模型的训练
生成训练样本,通过浮标数据检测可以得到每天每小时同一时刻的浪高数据,以四是时刻为例,如1:40时刻,2:40时刻…24:40时刻。用一周的数据建立模型,每天可以得到24个数据,一周就可以得到168个海浪波高数据。如2013年7月24号的数据如表1-1所示:
表1-1 2013年7月24号海浪波高表
时刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
波高 |
1.24 |
1.17 |
1.23 |
1.17 |
1.21 |
1.16 |
1.15 |
1.01 |
1.14 |
1.05 |
0.99 |
1.01 |
时刻 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
波高 |
1.02 |
1.03 |
1.12 |
1.17 |
1.19 |
1.24 |
1.22 |
1.09 |
1.11 |
1.14 |
1.21 |
1.16 |
表1-2 数据处理过程
输入样本 |
理想输出 |
x<sub>1</sub>,x<sub>2</sub>…x<sub>m</sub> |
x<sub>m+1</sub>,x<sub>m+2</sub>…x<sub>m+n</sub> |
x<sub>1</sub>,x<sub>2</sub>…x<sub>m</sub> |
x<sub>m+2</sub>,x<sub>m+3</sub>…x<sub>m+n+1</sub> |
x<sub>3</sub>,x<sub>4</sub>…x<sub>m+2</sub> |
x<sub>m+3</sub>,x<sub>m+4</sub>…x<sub>m+n+2</sub> |
通过观察表1-1的数据,对上面数据做神经网络训练样本的处理。数据处理过程如表1-2所示。根据多次实验最终确定m=5,n=1效果最好,即用前五个时间点的数据作为神经网络的输入、后面一个点的数据作为输出,然后依次向前走动。第一个样本的理想输出变成下一个样本的输入,再下一个时刻的数据作为理想输出。例如,第一个训练样本为:输入样本1.24 1.17 1.23 1.17 1.21,输出样本1.16;第二个训练样本为:输入样本1.17 1.231.17 1.21 1.16,输出样本1.15。
根据上述数据处理过程对四天的数据进行处理,一共得到92个输入样本,92个输出样本,即一共得到92个训练样本。
利用小波神经网络相结合的模型,将92个训练样本进行小波分解和重构,然后利用反馈神经网络进行训练,建立相应的模型。
具体的matlab程序如下:
clc
clear
%% 网络参数配置
load p %数据载入
Q=(p(1:92,:)); %获取小波分解后的输入样本
T=(p(2:93,5))'; %获取小波分解后的输出样本
[pn,minp,maxp,tn,mint,maxt]=premnmx(T,Q); %将数据归一化
NodeNum1=11; %隐层节点数 1
TypeNum=1; %输出位数
Epochs=1500; %训练次数
TF1= 'tansig';%隐含层激活函数
net=newelm(minmax(tn),[NodeNum1 TypeNum],{TF1, 'tansig'}); %建立反馈神经网络
net.trainparam.epochs=Epochs;
net.trainparam.goal=1e-10; %目标误差0.00001
net.trainParam.lr=0.01; %学习率默认值0.01
net.trainparam.min_grad=1e-15;
net.trainparam.show=20000;
net.trainparam.time=inf;
net=train(net,tn,pn); %反馈神经网络进行样本训练。
x=sim(net,tn); %用训练样本进行仿真,得到训练样本的预测值。
[a]=postmnmx(x,minp,maxp);
A=a(:);
e=sum((T'-a).^2); %%%总误差输出
m=T';
for i=1:92 figure;
plot([1:6],m(i,:),'r+:',[1:6],a(i,:),'G+:');title('训练样本的拟合情况:+为真实值,0 为网络输出值');
xlabel('时间');
end
目标误差变化如图2所示。
利用在神经网络建立的测试样本(同上述的训练样本)对小波分解-神经网络模型进行测试样本测试。分别利用上述样本中的三个测试样本对新建的模型逐一进行模型可靠性测试,分别为未来六小时、未来十二小时和未来十八小时的测试,通过观察预测值和真实值之间的误差,检测新建立的模型是否合理可靠。具体matlab程序如下:
p2n=tramnmx(input_test,mint,maxt); %测试数据的归一化
B=sim(net,p2n); %对测试样本进行数值仿真
[s]=postmnmx(B,minp,maxp); %预测结果去归一化处理
C=s(:);
Figure(1)
plot(1:24,Y,'r-*',1:24,C,'bo--') %预测值与真实值比较图
title('海波近期波高预测','fontsize',12)
legend('预测海波','实际海波')
xlabel('时间点');
ylabel('海浪波高');figure(2)
plot(1:24,abs(Y-C),'r-') %预测值和真实值之间的误差变化图
title('误差图') ;
上述测试程序是以第一个测试样本为例进行测试,通过样本测试不断地调整神经网络的参数和小波分解的层数,最后选择一个性能良好可靠性高的小波神经网络的模型,为更好的预测未来海浪波高提供帮助。
对未来六小时海浪波高数据进行神经网络模型预测,其预测结果如附图3所示,误差如附图4所示。
对未来十二小时海浪波高进行神经网络模型的预测,其预测结果如附图5所示,误差如附图6所示。
对未来十八小时海浪波高进行神经网络模型的预测,其预测结果如附图7所示,误差如附图8所示。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种基于小波分解-神经网络的海浪波高预测方法的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。