基于时间序列的回归问题(4)——时间序列预测的基本思路

2023-11-08

前言:

大家好,这个系列之前以及写了几篇博客,都是对于时间序列回归预测的一些前期准备知识,相信很多人(包括笔者在内)第一次接触这种项目,可能大体的思路方案都不是很清楚,那么,这么博客将为大家梳理一下做基于时间序列数据回归预测问题的大体思路。


1、数据预处理

对于大多数基于数据挖掘的预测项目来说,得到的数据一般情况都会有噪声的,这时,就需要对数据进行预处理。
数据预处理包括对数据的清洗、数据规约等步骤。
数据清洗主要是对数据中的缺失值和异常值进行处理,对于时间序列的数据,可以看做是信号,相信大家都了解之前学习的信号与系统和数字信号处理,那时候我们经常用的就是傅里叶变换呀什么的,通过一定的滤波器从而实现信号的去噪,得到有用的信号,其实我们这里做的工作和那些类似,只不过对于实际生活中的一些数据,并不是完全满足周期性,如果我们再用傅里叶什么这时候就不能符合实际生活中的客观性,这时候便引入了前面讲的奇异普分析(SSA)经验模态分解,这两种方法的具体内容可参照前面的博客,这里就不多说了,经过这两种方法去噪后,可使我们得到更有利于未来预测的数据。
对于数据规约,这里一般需要对数据进行归一化处理,这里最常用的包括(0,1)标准化和Z-score标准化(这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化)。

2、特征提取思路

对于之前了解分类问题的人们,大家都知道要对数据提取所需的特征,有时候也会对数据集直接进行预测,这时候不再构造新的特征,而是直接使用原有数据集中的特征,其实我们这里基于时间序列的预测与之前的思路还是一直的,比如可以采用要预测时间点的前一个月所有数据作为特征,或通过特种工程,统计出要预测时间点前所有数据的部分特征,比如前1,2,3,4,5,6…天的平均值,最大最小值等统计量等,可以看出基于时间序列的预测与之前的分类问题只是具体操作的手段不一致,下面针对不同情况将具体介绍几种基本思路:

2.1、单维单步

对于采用前n个点的数据预测下一个数据点的数据,这里为了方便大家理解,我们以前2的点预测下一个点的例子举例。
如我们基于时间序列为:1234567
那么我们的特征集为train_x和label(train_y)为:

train_x=[ [1,2][2,3][3,4][4,5][5,6]]
train_y=[3,4,5,6,7]

可以看出,用前两个数据预测下一个数据,比如用第一、第二个数据1和2作为特征,label为第三数据3。

2.2单维多部

由于我们在很多预测项目中,需要对未来一段时间进行预测,而不单单仅是预测未来一天的数值,所以这里就引入了单维多部的方法,这里以通过过去2个点的数据预测未来2个点的数据举例:
如我们基于时间序列为:1234567
那么我们的特征集为train_x和label(train_y)为:

train_x=[ [1,2][2,3][3,4][4,5]]
train_y=[[3,4],[4,5], [5,6],[6,7]]

2.3多维单步法

这种方法适用于同时对多组数据进行预测,且这两组数据彼此之间有一定联系,这里我们用两维数据,通过前三个点预测后一个点:
如我们基于时间序列为:
123456
11,12,13,14,15,16
那么我们的特征集为train_x和label(train_y)为:

train_x=[ [[1,11],[2,12],[3,13]],
          [[2,12],[3,13],[4,14]],
          [[3,13],[4,14],[5,15]]]
          
train_y=[[4,14],[5,15], [6,16]]

这里我们可看出,此时的特征集为3维(3, 3, 2)的数组,即3个sample,每个sample有3组feature,每组feature为2维数据。

2.4统计特征

之前的3种方法只是单纯建立在了对时间序列的预测,只是通过之前时间的数据来预测未来的数据,这种方法具有一定的局限性,这里可以引入其他的统计特征,比如引入会影响未来该数据值的其他特征,比如前n天的平均值、最大最小值等,这里也可以加入一些会影响未来数据但未在之前数据中体现出来的特征,比如应用在对股票价格的预测,不仅仅要对之前价格作为影响因素,同样要考虑当下的政策与具体情况,当然,这里只是举个例子,就不具体说了。

3程序实例

这里通过一个正弦和余弦函数的实例来简单说明一下:
首先拟定一个二维的数据对其进行实验 这个数据长度是1000条,一维是sin函数 另一维是cos函数使用前200步去预测后50步

data = np.zeros(2000)
data.dtype = 'float64'
data = data.reshape(1000,2)
sinx=np.arange(0,40*np.pi,2*np.pi/50,dtype='float64')
siny=np.sin(sinx)
cosx=np.arange(0,40*np.pi,2*np.pi/50,dtype='float64')
cosy=np.cos(sinx)

data[:,0] = siny
data[:,1] = cosy

print(data)
plt.plot(data[:,0])
plt.show()
plt.plot(data[:,1])
plt.show()

然后我们利用转换函数,将数据按照第二部分讲的方法转换为相应的特征和label集:

def create_dataset(data,n_predictions,n_next):
    '''
    对数据进行处理
    '''
    dim = data.shape[1]
    train_X, train_Y = [], []
    for i in range(data.shape[0]-n_predictions-n_next-1):
        a = data[i:(i+n_predictions),:]
        train_X.append(a)
        tempb = data[(i+n_predictions):(i+n_predictions+n_next),:]
        b = []
        for j in range(len(tempb)):
            for k in range(dim):
                b.append(tempb[j,k])
        train_Y.append(b)
    train_X = np.array(train_X,dtype='float64')
    train_Y = np.array(train_Y,dtype='float64')

    return train_X, train_Y
    
train_X,train_Y = create_dataset(data,200,50)

之后就是训练模型,由于本博客偏向于应用,就不再具体介绍回归模型了,这里就直接用神经网路Keras库中LSTM,如果想具体了解这个训练模型,可以关注本人博客,后续将持续更新,或自行百度。

def trainModel(train_X, train_Y):
    '''
    trainX,trainY: 训练LSTM模型所需要的数据
    '''
    model = Sequential()
    model.add(LSTM(
        140,
        input_shape=(train_X.shape[1], train_X.shape[2]),
        return_sequences=True))
    model.add(Dropout(0.3))

    model.add(LSTM(
        140,
        return_sequences=False))
    model.add(Dropout(0.3))

    model.add(Dense(
        train_Y.shape[1]))
    model.add(Activation("relu"))

    model.compile(loss='mse', optimizer='adam')
    model.fit(train_X, train_Y, epochs=100, batch_size=64, verbose=1)

    return model
model = trainModel(train_X,train_Y)

这个时候,模型已经训练好了,下面将对数据进行预测,我们预测时,同样构造一组正弦函数和一组余弦函数:

def reshape_y_hat(y_hat,dim):
    re_y = []
    i = 0
    while i < len(y_hat):
        tmp = []
        for j in range(dim):
            tmp.append(y_hat[i+j])
        i = i + dim
        re_y.append(tmp)
    re_y = np.array(re_y,dtype='float64')
    return  re_y


data = np.zeros(400)
data.dtype = 'float64'
data = data.reshape(200,2)
sinx=np.arange(0,8*np.pi,2*np.pi/50,dtype='float64')
siny=np.sin(sinx)
cosx=np.arange(0,8*np.pi,2*np.pi/50,dtype='float64')
cosy=np.cos(sinx)
data[:,0] = siny
data[:,1] = cosy

model = load_model("./MultiSteup2.h5")
test_X = data.reshape(1,data.shape[0],data.shape[1])
y_hat  =  model.predict(test_X)
#重组
y_hat = y_hat.reshape(y_hat.shape[1])
y_hat = reshape_y_hat(y_hat,2)

print(y_hat.shape)
plt.plot(y_hat[:,0])
plt.show()
plt.plot(y_hat[:,1])
plt.show()

这是就会画出预测后的效果了,当然,本篇博客只是想简单介绍一下大体思路,程序只是一个简单举例而已,如果想做具体项目,还要后续考虑更多的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于时间序列的回归问题(4)——时间序列预测的基本思路 的相关文章

  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Python Fabric - 未找到主机。请指定用于连接的(单个)主机字符串:

    如何获取 找不到主机 请指定用于连接的 单个 主机字符串 面料如何解决 def bootstrap host ec2 54 xxx xxx xxx compute 1 amazonaws com env hosts host env use
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 如何获取所有mysql元组结果并转换为json

    我能够从表中获取单个数据 但是当我试图获取表上的所有数据时 我只得到一行 cnn execute sql rows cnn fetchall column t 0 for t in cnn description for row in ro
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • qsort用法

    轉自 http www cnblogs com ForeverJoker archive 2013 05 25 qsort sort html qsort函数 sort函数 精心整理篇 qsort函数 sort函数 精心整理篇 先说明一下q
  • JaCoCo助您毁灭线上僵尸代码

    一 现状 问题 随着需求不断迭代 业务系统的业务代码突飞猛进 在你自豪于自己的代码量产出很高时 有没有回头看看线上真正的客户使用量又有多少呢 费事费力耗费大量人力 成本上线的功能 可能一年没人使用 如果不进行适当的下线 就会增加系统维护成本
  • 自定制命令(让scrapy在pycharm下跑起来)

    pytcharm运行单个爬虫 coding utf 8 Time 2019 7 19 下午 5 19 Author lh Email xx lh com File manage py Software PyCharm import sys
  • 合同比对

    for i 15 i lt 174 i do if d i then cd i echo 当前产品sn i ls ltr pdf grep v tmp wc l cd fi done mysql uroot p xxxxxx e selec
  • 硬件加速导致的flv播放不出视频(拉流)

    问题 前段时间我们做项目的时候 涉及到PC端拉流 但是出现了一些奇怪的情况 我们多台设备 安装的都是谷歌Chrome浏览器 但是在从流媒体服务器拉流的时候 出现笔记本win10最新版本Chrome 台式机win7低版本Chome 版本 58
  • vm虚拟机搭建服务器docker,服务器(虚拟机vm搭建的)重启后docker的所有镜像都无法启动...

    root localhost docker start csphere controller Error response from daemon Cannot start container csphere controller Erro
  • SpringBoot 性能优化

    1 服务监控 在开始对SpringBoot服务进行性能优化之前 我们需要做一些准备 把SpringBoot服务的一些数据暴露出来 比如 你的服务用到了缓存 就需要把缓存命中率这些数据进行收集 用到了数据库连接池 就需要把连接池的参数给暴露出
  • HashMap底层原理全解析

    作为面试中的高频题目 我相信每一个java程序员都有必要搞懂HashMap的底层原理和实现细节 废话不多说直接开撸 首先简单说一下HashMap的实现原理 首先有一个Node
  • win10双屏让任务栏显示不相同的方法

    经常使用win10的双屏幕模式 在使用的过程中 发现有些不太合适的地方 就是底部的任务栏的图标 两个屏幕 两个任务栏 这个无可厚非 但是 第二个屏幕上的程序 在第一个屏幕上还保留有任务栏位置 这个就比较有些匪夷所思了 点击第一个屏幕上的任务
  • 学妹毕业一年拿40万offer,经验其实就两点

    我经常和一位小学妹聊天 交流经验 昨天她告诉我 她终于实现了当年发过的誓 毕业2年内 进BAT 拿30万年薪 最终超额完成目标 毕业1年进了阿里 年薪40万 学妹聊起毕业后这一年来的经历时 颇有感慨 刚毕业的时候 学妹一心想进大厂 可是偏偏
  • Beautiful Soup 基本使用方法

    我们就来介绍一个强大的解析工具Beautiful Soup 它借助网页的结构和属性等特性来解析网页 有了它 我们不用再去写一些复杂的正则表达式 只需要简单的几条语句 就可以完成网页中某个元素的提取 1 简介 简单来说 Beautiful S
  • 入门级题解142. 环形链表 II

    给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos来表示链表尾连接到链表中的位置
  • OnnxRunTime的推理流程

    文章目录 一 torch转onnx模型 二 python下推断onnx模型 三 C 下用OnnxRunTime来推断模型 一 torch转onnx模型 用pytorch训练得到模型后 这时候需要转成onnx模型 torch提供函数 torc
  • excel将数据按某一列值分组并绘制分组折线图

    目录 一 实现按id分组 二 绘制分组折线图 今天在处理数据的时候发现了一个很巧妙的EXCEL绘制分组折现图的方法 简单记录分享一下 我的数据大概长这样 我希望实现的目标是根据产品id分组绘制不同产品的销量图 一 实现按id分组 复制产品i
  • python3.5 实现批量修改json文件中的中文字段

    改了好久才改好 关键问题编码格式 要改成gbk coding gbk import os import json 获取目标文件夹的路径 filedir os getcwd updatejson 获取文件夹中的文件名称列表 filenames
  • Axure RP暗黑色高保真中后台原型组件模板库及组件库素材

    Axure RP暗黑色高保真中后台原型组件模板库及组件库素材 黑色一直以来就可以给人以高级 神秘的语义象征 相比于浅色模式 暗色模式藏着更多可能性 色彩具有层级关系 深色会在视觉感官上自动后退 浅色部分则会向前延展 这样对比强烈的层次关系可
  • 2023网络安全毕业设计选题推荐 - 信息安全毕业设计题目大全

    文章目录 0 简介 2 如何选题 1 最新网安毕设选题 3 最后 0 简介 毕业季马上就要开始了 不少同学询问学长管理选题开题类的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家
  • redis 由浅入深之 简介和开发环境搭建

    简介 redis是一个key value 存储系统 和Memcached类似 它支持存储的value类型相对更多 包括string 字符串 list 链表 set 集合 zset sorted set 有序集合 和hash 哈希类型 这些
  • Centos7 安装Tesseract-OCR

    第一步 依赖安装 yum install y autoconf automake libtool libjpeg libpng libtiff zlib libjpeg devel libpng devel libtiff devel zl
  • 基于时间序列的回归问题(4)——时间序列预测的基本思路

    前言 大家好 这个系列之前以及写了几篇博客 都是对于时间序列回归预测的一些前期准备知识 相信很多人 包括笔者在内 第一次接触这种项目 可能大体的思路方案都不是很清楚 那么 这么博客将为大家梳理一下做基于时间序列数据回归预测问题的大体思路 1