指数平滑算法

指数平滑算法对时间序列的预测,用的最多的是指数平滑算法,算法不复杂。首先理解一个基本公式: 指数平滑法的基本公式是: 式中,St时间t的平滑值;yt时间t的实际值;St −1时间t-1的平滑值;a平滑常数,其取值范围为[0,1];说明:1.此公式用t-1时刻的平滑值和t时刻的hi实际值来计算t时刻的平滑值2.a是系数,越接近1的话,远期数据对于计算结果影响越小,越接近0,则影响越大用ne

对时间序列的预测,用的最多的是指数平滑算法,算法不复杂。

基本公式

定义和实现

首先理解一个基本公式:

 指数平滑法的基本公式是:S_t=a\cdot y_t+(1-a)S_{t-1} 式中,

  • St–时间t的平滑值;
  • yt–时间t的实际值;
  • St − 1–时间t-1的平滑值;
  • a–平滑常数,其取值范围为(0,1);

说明:

1. 此公式用t-1时刻的平滑值和t时刻的实际值来计算t时刻的平滑值

2. a是系数,越接近1的话,远期数据对于计算结果影响越小,越接近0,则影响越大

用newlisp表达公式如下:

(define (cal-basic real-t1 smooth-t0 a)
  (add (mul a real-t1) (mul (sub 1 a) smooth-t0)))

说明:

t0 就是 t-1

t1 就是t

newlisp stat模块

Lutz介绍,该模块的smooth函数可以用来完成基础公式的功能,使用方法如下:

> (stat:smooth '(1 5 2 6 4 7 2) 0.5)
(1 3 2.5 4.25 4.125 5.5625 3.78125)

内部代码实现和基础公式一样,只不过一次批量产生多个平滑值,这里第一个平滑值就是第一个实际值:

; expontial smoothing with 0 < alpha <= 1
(define (smooth lst alpha , previous slist)
  (set 'previous (first lst))
  (set 'slist '())
  (dolist (elmnt lst) 
   (set 'previous (add (mul alpha elmnt) (mul (sub 1 alpha) previous))) 
   (push previous slist))
  (reverse slist)) ; could be written shorter starting v.9.9.5
                   ; because push returns the modified list

预测公式

一次指数平滑预测

有了这个基本公式,我们就可以得到t1时刻的平滑值smooth-t1, 然后可以再次运用基本个公式进行预测,这个方法就叫做一次指数平滑预测

smooth-t2=a * real-t1 + (1-a) * smooth-t1

newlisp代码为:

;; @return smooth value of t2
(define (cal-exponential1 real-t1 smooth-t0 a)
  (let (smooth-t1 (cal-basic real-t1 smooth-t0 a))
    (print (add (mul a real-t1) (mul (sub 1 a) smooth-t1)))
  ))

今天的文章指数平滑算法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/7572.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注