算法简介

与平滑指数法,移动平均法一样,自适应过滤法也是一种预测时间序列的方法。但相较于前两者,自适应过滤法有着可以对参数进行调整的优点。他可以根据前若干个数据,来不断地尝试算出与后一个数相同的结果。故相对与平滑指数法以及移动平均法,可以更好地对时间序列进行拟合。此外,自适应过滤法思路简单,所以相对容易实现,可以在数据比较平稳的情况下使用。

本文将以上海财经大学出版社《统计预测和决策》中的【例6-1】为例,对该算法进行讲解。

算法思路

该算法首先需要构造线性的预测模型,之后确定权重个数以及权重初始值,并根据权重及线性预测模型计算预测值,并计算该预测值与真实值间的误差,之后再根据误差,前p个值组成的向量及他们所构成的迭代函数来对权重进行调整,知道第p个值为0.

参数确定

首先,我们假设有一组时间序列为
x0,x1,x2,...,xtx_{0},x_{1},x_{2},...,x_{t} x0​,x1​,x2​,...,xt​
之后,我们确定权重个数p(p<t),在本例中,p取2。然后,我们通过权重个数以及时间序列的前p大的数据来确定学习函数:
k=1[∑i=0p−1x^i2]maxk=\frac{1}{[\sum^{p-1}_{i=0}\hat{x}^2_i]_{max}} k=[∑i=0p−1​x^i2​]max​1​
在这里,我们需要对原始时间序列进行一个排序,然后取最大的p个值。

然后,我们设权重向量为ϕ\boldsymbol{\phi}ϕ,其每一个元素的初始值为1p\frac{1}{p}p1​,在本例中,权重向量为[0.5,0.5][0.5,0.5][0.5,0.5]

构建预测模型

我们将权重与对应前p个未知数相乘,得到预测模型:xp=∑i=0p−1ϕixix_{p}=\sum^{p-1}_{i=0}\phi_{i}x_{i}xp​=i=0∑p−1​ϕi​xi​在本例中,其预测模型为x^2=0.5x0+0.5x1\hat{x}_{2}=0.5x_{0}+0.5x_{1}x^2​=0.5x0​+0.5x1​

损失函数

在这里,我们将损失函数定义为时间序列的第p个值,既ptp_{t}pt​,减去预测值
ep=xp−x^pe_{p}=x_{p}-\hat{x}_{p}ep​=xp​−x^p​
当然,你也可以使用MSE(标准均方误差)为损失函数

迭代条件

当epe_{p}ep​小于设定阈值(本例选择0.001,当然也可以不设置,即阈值为0)当前迭代次数epoch小于最大迭代数max_epoch(这里选择为100)时,进行迭代运算。

调整后的第i个权重为:ϕi′=ϕi+2kepxp−i\phi^{'}_{i}=\phi_{i}+2ke_{p}x_{p-i}ϕi′​=ϕi​+2kep​xp−i​

程序代码

"""
Created on Thu Oct  27 13:55:00 2021@author: Joseph.chunfai.Lai
上海財經大學出版社 《統計預測與決策(第五版)》 例6-1"""'''引入相關的庫'''
import numpy as npclass AFM:def __init__(self, Data, P=2):self.Data = Dataself.Data_sort = np.sort(Data)[::-1]self.P = P  # 權重數self.K = K = 1 / np.sum((self.Data_sort[0] ** 2, self.Data_sort[1] ** 2))  # 學習係數/學習率self.threshold = 0.001  # 損失函數閾值self.Max_epoch = 100  # 最大迭代次數phi = []# 初始參數for i in range(2):phi.append(1 / self.P)self.phi = np.array(phi)def Error(self, x_predict, x_target):return x_target - x_predictdef Cal_weight(self):iter_epoch = 0X_predict = np.dot(self.phi, self.Data[0:2])# print(X_predict)error = self.Error(X_predict, self.Data[self.P])# print(error)# print(Data[0:2][::-1])# 開始迭代while (np.abs(error) > self.threshold) and (iter_epoch < self.Max_epoch):  # 終止條件為誤差小於設定閾值或大於等於最大迭代次數,根據De# Morgen定律 ,執行條件為誤差大於閾值且當前迭代次數小於最大迭代次數x_predict = np.dot(self.phi, self.Data[0:2])  # 計算預測值error = self.Error(x_predict, self.Data[self.P])  # 計算誤差self.phi = self.phi + 2 * self.K * error * self.Data[0:self.P][::-1]iter_epoch = iter_epoch + 1print('第{}輪迭代,誤差為{:.2f}'.format(iter_epoch, error))print('算得調整後的權重為: \n', self.phi)return self.phiif __name__ == "__main__":Data = np.array([43, 45, 48, 50, 53])Phi = AFM(Data, P=2).Cal_weight()print('Success!')

参考资料

[1]:徐国祥.统计预测和决策(第五版).上海财经大学出版社

【随学随想】 自适应过滤法预测时间序列相关推荐

  1. 如何优雅地用TensorFlow预测时间序列:TFTS库详细教程

    向AI转型的程序员都关注了这个号☝☝☝ 作者 | 何之源 前言 如何用TensorFlow结合LSTM来做时间序列预测其实是一个很老的话题,然而却一直没有得到比较好的解决.如果在Github上搜索&q ...

  2. R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列

    R语言时间序列(time series)分析实战:使用ARIMA模型预测时间序列 目录

  3. matlab 神经网络预测时间序列示例(水痘模型)

    神经网络预测时间序列示例(水痘模型) clc,clear; close all; %% Importing Data and plotting data=chickenpox_dataset; dat ...

  4. sklearn 神经网络_机器学习100天-Day2404 循环神经网络RNN(预测时间序列)

    说明:本文依据<Sklearn 与 TensorFlow 机器学习实用指南>完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解. 进入第二部分深度学习 第十四章循环神经网络 ...

  5. 怎么用MATLAB做周期性预测,时间序列预测时,数据具有周期性怎么办(用MATLAB做) , 什么是时间序列预测法?...

    3.3时间序列分析 3.3.1时间序列概述 1. 基本概念 1一般概念:系统中某一变量的观测值按时间顺序时间间隔相同排列成一个数值序列,展示研究对象在一定时期内的变动过程,从中寻找和分析事物的变化特征 ...

  6. 先知ppt_用先知预测时间序列数据–第3部分

    先知ppt This is the third in a series of posts about using Prophet to forecast time series data. The o ...

  7. prophet模型预测时间序列

    prophet模型预测时间序列 prophet:facebook开源的的一个时间序列预测算法. 原理:基于时间序列分解和机器学习的拟合来做的. 把时间序列 分成不同时间间隔 和 整体趋势的组合. 间隔 ...

  8. 经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测

    经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测 目录 经济数据预测 | Python实现CNN-LSTM股票价格预测时间序列预测 基本介绍 程序设计 学习总结 基本介绍 通 ...

  9. LSTM模型预测时间序列(快速上手)

    写在前面 LSTM模型的一个常见用途是对长时间序列数据进行学习预测,例如得到了某商品前一年的日销量数据,我们可以用LSTM模型来预测未来一段时间内该商品的销量.但对于不熟悉神经网络或者对没有了解过RN ...

最新文章

  1. 自省:我为什么没有成功--对照35前务必完成的12跳
  2. Python 操作redis 常用方法
  3. 20210325:力扣递归,回溯类型题目合集
  4. 你是不是 可替代的Linux运维工程师?
  5. 三分钟轻松了解Spring框架基础知识
  6. redis实现CAS
  7. 印度孵化器的红利期才刚到,但花样还真不少
  8. 微信授权就是这个原理,Spring Cloud OAuth2 授权码模式
  9. 不是人人都懂的学习要点
  10. markdown特殊用法(三) 脚注的输入
  11. AP(接入点)模式、Router(无线路由)模式、Repeater(中继)模式、Bridge(桥接)模式、 Client(客户端)模式
  12. 【光线追踪】 流程分析与实现的路径跟踪渲染器
  13. ipad照片文件删除了怎么恢复
  14. 二维数组与字符数组——英文字母、数字字符及其他字符的个数
  15. 【Python数据分析与可视化】Pandas统计分析-实训
  16. 常用设计模式系列(十)—装饰者模式
  17. 深圳高新技术企业补贴政策及有何好处,补贴30万
  18. 记一次js文件AES加密的key与iv逆向分析
  19. 万维网,互联网,因特网之间的区别
  20. 14年至22年,我与世界杯的那些二三事

热门文章

  1. 阿里巴巴又出成绩单!5亿人种下1亿棵树,你是5亿分之一吗?
  2. FT2004(D2000)开发实战之AMD R5 230显卡驱动适配
  3. 请问德国人住什么房子?
  4. cisco设备信息泄漏漏洞案例【二】
  5. 在webstorm2019.3.4中设置自动换行
  6. 小米Android10兼容性公告,小米又一款手机适配Android 10!MIUI开发版暂停,米粉别着急...
  7. 传感器433报文协议
  8. 逆向工程适配瀚高数据库
  9. ubuntu 16.04 安装Ralink MT7601U (148f:7601) 驱动
  10. 论文笔记--决策树(Decision Tree)