【时间序列预测算法】——指数平滑算法介绍及代码实现

该博客介绍了使用指数衰减权重的平滑方法进行时间序列预测。通过设置平滑参数α,对历史数据赋予不同的权重,以影响预测结果。在示例中,展示了如何实现指数衰减平滑,并给出了预测结果的可视化。尽管α值是固定的,但提出了可优化的窗口大小和动态调整α值的可能性,类似于LSTM的反向传播。
摘要由CSDN通过智能技术生成

背景

考虑到时间越近的y值对当前要预测的y值的影响更大,采用指数衰减的方式来进行权值赋值。

公式

公式
递推关系式:
递推
α取[0,1]平滑参数,控制权重下降的速度。

代码

# 参数设定
epochs = 20
alpha = 0.5#初始化L 初值L会影响最后的结果
# TSD数据集构造
t = np.linspace(0,10,100)
y = 2*t + np.random.rand(len(t))
# 原始时序数据
plt.figure(figsize=(16, 7))
plt.plot(y)
plt.title("Raw TSD")
plt.show()
# exp smooth
def ExpSmooth(y,t,alpha):
    sum = 0
    for i in range(t):
        sum += alpha*(1-alpha)**i*y[t-i-1]
    return sum
# for epoch in range(epochs):#暂未找到自动搜索alpha的方法
# print("Epoch:",epoch+1)
predict = [ExpSmooth(y,i,alpha) for i in range(1,len(y))]
loss = np.mean((predict-y[1:])**2)
print("loss:",loss,"alpha:",alpha)
predict = [ExpSmooth(y,i,alpha) for i in range(1,len(y))]
plt.plot(predict, label='Pred tsd')
plt.plot(y, label='True tsd')
plt.legend(loc=1)
plt.title("tsd Predictions")
plt.show()
loss: 0.2606911228840065 alpha: 0.5

Process finished with exit code 0

执行结果:
在这里插入图片描述

结论

思想类似滑动窗口L内平均算法,只不过做了软化,使用权重指数衰减,没有严格割裂较早的值和当前值的关系;
优化可设置窗口L,在窗口内的权重按指数衰减,窗口外与窗口内完全割裂开;
α的值是人为设定的,不是自动搜索更新的,如果可以更新,则类似LSTM的反向传播思想了,根据loss来更新权重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据李菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值