数学建模社区-数学中国

标题: 时间序列模型 (四):差分指数平滑法、 自适应滤波法 [打印本页]

作者: 浅夏110    时间: 2020-5-31 14:31
标题: 时间序列模型 (四):差分指数平滑法、 自适应滤波法
差分指数平滑法
3 n3 X. R$ C2 Y0 F5 A0 L4 s在上节我们已经讲过,当时间序列的变动具有直线趋势时,用一次指数平滑法会出现滞后偏差,其原因在于数据不满足模型要求。因此,我们也可以从数据变换的角度来考虑改进措施,即在运用指数平滑法以前先对数据作一些技术上的处理,使之能适合于 一次指数平滑模型,以后再对输出结果作技术上的返回处理,使之恢复为原变量的形态。 差分方法是改变数据变动趋势的简易方法。下面我们讨论如何用差分方法来改进指数平 滑法。
3 C8 _- r1 P/ z9 x+ ]9 d) Y
' j2 i/ C5 E6 }0 q. L0 I 一阶差分指数平滑法 9 O" h8 X1 Q4 f: h

/ ]0 z: |) s6 {/ ^  F) R) c' i8 t, t! E3 n& ]
: r0 e; p2 S( e' Z  b& J2 T
在前面我们已分析过,指数平滑值实际上是一种加权平均数。因此把序列中逐期增 量的加权平均数(指数平滑值)加上当前值的实际数进行预测,比一次指数平滑法只用 变量以往取值的加权平均数作为下一期的预测更合理。从而使预测值始终围绕实际值上 下波动,从根本上解决了在有直线增长趋势的情况下,用一次指数平滑法所得出的结果 始终落后于实际值的问题。
+ R' z1 E7 p  r3 W9 K  f* {; B9 S: k
+ h+ l1 d( K" X; {

. Y" h5 R( r8 e3 v: `! T4 ~. G例 7  某工业企业 1977~1986 年锅炉燃料消耗量资料如表 8 所示,试预测 1987 年 的燃料消耗量。
' i" i' ?/ s$ u+ g* @' J* _/ G1 ^5 P! ^/ U+ Y

$ M* ]: K: }2 Y5 a5 O- s2 b5 q# j
7 C3 n% K# m0 S8 ], ?解  由资料可以看出,燃料消耗量,除个别年份外,逐期增长量大体在 200 吨左右,即呈直线增长,因此可用一阶差分指数平滑模型来预测。我们取  α = 0.4,初始值为新序列首项值,计算结果列于表 8 中。预测 1987 年燃料消耗量为 # d" H7 i( |5 _

) b# ~8 g% z7 P8 z0 a, \7 k( V* o" _1 x   (  百吨 )! y4 K* p# t. q: K; U6 O& {4 b. ^/ x
. M! s; I- f0 D+ A1 b+ z
6 N' m7 o! a/ Q2 z$ L
/ s1 E+ s' i, r. z
二阶差分指数平滑模型 ( R% D6 z+ Y4 R( M& M5 r# A+ V

; `* {- z3 d& _5 K" t/ n7 m! s" T8 Q8 e0 D7 Q
- s. x: R1 R. h8 _: C
1 C3 I/ t! s0 E) F; m
差分方法和指数平滑法的联合运用,除了能克服一次指数平滑法的滞后偏差之外, 对初始值的问题也有显著的改进。因为数据经过差分处理后,所产生的新序列基本上是平稳的。这时,初始值取新序列的第一期数据对于未来预测值不会有多大影响。其次, 它拓展了指数平滑法的适用范围,使一些原来需要运用配合直线趋势模型处理的情况可用这种组合模型来取代。但是,于指数平滑法存在的加权系数 α 的选择问题,以及只能逐期预测问题,差分指数平滑模型也没有改进。
+ i2 u8 n# j" J8 Y1 h9 o- L, m* H, |$ D8 i8 y8 L+ R" d5 Y" X+ {
自适应滤波法
3 [1 D3 Y" L6 ]* {" V3 X0 h 自适应滤波法的基本过程
  Q2 _5 X& {' R5 Y# V+ Q自适应滤波法与移动平均法、指数平滑法一样,也是以时间序列的历史观测值进行 某种加权平均来预测的,它要寻找一组“佳”的权数,其办法是先用一组给定的权数 来计算一个预测值,然后计算预测误差,再根据预测误差调整权数以减少误差。这样反 复进行,直至找出一组“佳”权数,使误差减少到低限度。由于这种调整权数的过 程与通讯工程中的传输噪声过滤过程极为接近,故称为自适应滤波法。 8 h5 R# i2 L8 \8 h1 F. J/ H& Y
/ G- A& `% y0 |7 F

7 y+ f: l) o0 m6 h$ ?2 K! u6 V
  o' [3 T" N! v" P% q) k" z+ _4 \  l8 b; u
6 P' ?3 y9 e2 s9 G5 k1 \% b. W
下面举一个简单的例子来说明此法的全过程。设有一个时间序列包括 10 个观测值, 如表 9 所示。试用自适应滤波法,以两个权数来求第 11 期的预测值。
8 e) X1 K  r& t9 {0 e
7 x, B! n1 e1 s0 f2 @3 s
% Q5 Y' I- `2 g6 d" G4 ]8 \# G4 g  g- T1 w/ a( g

4 V0 O; @- q, s2 s! Z: R1 G
: Z; C" X* ^; W5 i+ x* M在实际应用中,权数调整计算工作量可能很大,必须借助于计算机才能实现。
/ ]) Q7 ^- |" C* P( f) R' U6 L8 D& ^
计算的 MATLAB 程序如下: 2 X1 ~! k- M9 Y
7 \# `" T) I$ b: m9 h7 H. h. G
clc,clear - A1 Y& o! g3 E, a2 n7 k4 m
yt=0.1:0.1:1; ; ]* I' s- i  V& {2 _
m=length(yt);
  v5 ~! a0 A  Ok=0.9; N=2; Terr=10000; 4 }! ^# S4 T' u+ v0 J6 f7 A
w=ones(1,N)/N; ! w' i) G+ K* W* e9 ], V2 R( ~/ i
while abs(Terr)>0.00001     
4 U5 o! E/ Z2 Q    Terr=[];     
! G& D6 Q9 v/ B$ N2 l6 F    for j=N+1:m-1         / Y/ l+ u: Y, Y6 D6 Y
        yhat(j)=w*yt(j-1:-1:j-N)';         
/ t4 X: v/ ~9 A        err=yt(j)-yhat(j);         
* S7 A1 Q. b- N/ K1 s3 x% O        Terr=[Terr,abs(err)];         0 L8 z) T. X4 O+ |4 i' @6 l1 r2 O
        w=w+2*k*err*yt(j-1:-1:j-N);     
4 q5 g6 C* j8 |    end     
" `$ K- E- S( g$ I+ [) @( W    Terr=max(Terr);
+ s2 I7 E! }0 B# p7 bend
$ ~( |. r4 W3 [3 D7 _! M! F' t8 gw, yhat 8 p. O( X1 H$ |( R3 C8 A7 R/ A
/ j- u  @" W3 H2 q
N, k 值和初始权数的确定 $ z6 o1 _) t' H' ?
在开始调整权数时,首先要确定权数个数 N 和学习常数k 。一般说来,当时间序 列的观测值呈季节变动时, N 应取季节性长度值。如序列以一年为周期进行季节变动 时,若数据是月度的,则取 N =12 。若季节是季度的,则取N=4 。如果时间序列无 明显的周期变动,则可用自相关系数法来确定,即取 N 为高自相关系数的滞后时期。
; |! |5 q; ?; i( h( c. m! w& s' m! c/ @# x# D& v  J" H6 o- i
  k 的取值一般可定为1 / N,也可以用不同的k 值来进行计算,以确定一个能使S 小的k 值。  2 [4 Y  o" c# Q5 y* o9 C( O
& Z/ n1 X& f# g8 h- d% ?* L
  Y1 w8 S6 i" |2 A" k

; U* Y/ a/ i# ^7 C# K7 }: { 自适应滤波法有两个明显的优点:一是技术比较简单,可根据预测意图来选择权数 的个数和学习常数,以控制预测。也可以由计算机自动选定。二是它使用了全部历史数 据来寻求佳权系数,并随数据轨迹的变化而不断更新权数,从而不断改进预测。  由于自适应滤波法的预测模型简单,又可以在计算机上对数据进行处理,所以这种 预测方法应用较为广泛.
6 Z: I4 e( u' E, B# l& ~' r& o# F# Q3 x0 u" [% a
, u. @# ~& I/ Q+ P
————————————————
. J0 H7 i0 v  v% g! H+ s版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
, c) @6 q/ w6 I9 d2 c, `/ r原文链接:https://blog.csdn.net/qq_29831163/article/details/89447556( u; _/ q" s. v+ f( O/ G4 r
6 ?. Z6 X: p' q0 D. p
9 [% y- k$ y7 c, t$ A





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5