背景
一阶二阶三阶指数平滑方法拟合效果均较好,通过结合数据自然属性,数据自身、趋势变化、季节性,提出了这三个角度的衡量量,可以说,理解起来更自然、更亲切。其中三阶的指数平滑方法也被称为“Holt-Winters”算法。
公式
一阶:

s t s_t st是t时刻对 x t x_t xt的估计值,这里只有一个参数α,是数据本身的平滑属性的体现。
二阶:

引入了时间趋势变量 b t b_t bt,优化了一下一阶的公式。同时还可以预测t+m时刻的值:

三阶:

又引入了季节性周期描述变量 c t c_t ct,优化了一下二阶的公式。同时还可以预测t+m时刻的值:

NOTE: c t − L c_{t-L} ct−L我在代码实现时使用的t mod L,因为既然是描述季节性的变量,则其应该体现的是周期L区间内的相对时刻点 t ∈ [ 0 , L ] t\in[0,L] t∈[0,L],所以应该是取余更合理些,而且代码的执行结果正确,也说明这样实现是可以的。
代码
# 参数设置
s0 = 0
b0 = 0
c0 = 1
# 初始化
# α是数据平滑因子
# β是趋势平滑因子
# γ是季节改变平滑因子
alpha = 0.5
beta = 0.5
gama = 0.5
# 预测长度 预测第t+m时刻
m = 5
# 季节周期长度
L = 5
# TSD数据集构造
t = np.linspace(0, 10, 100)
y = 2 * t + np.random.rand(len(t))
# 原始时序数据
plt.figure(figsize=(16, 7))
plt.plot(y
1279



被折叠的 条评论
为什么被折叠?



