热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

时间序列预测中的数据滑窗操作实例(python实现)_python

滑动窗口操作非常普遍,非常有用,它们也很容易在Python中实现,下面这篇文章主要给大家介绍了关于时间序列预测中的数据滑窗操作python实现的相关资料,

撰写背景

面向数据分析的小白,水平有限,错误难免,欢迎指正。

什么是数据滑窗

进行机器学习时,一般都要涉及到划分训练集和测试集的步骤。特别地,在做数据预测时,一般把预测的依据(也就是历史数据)称作X,把需要预测的数据称为y。即首先把原始数据划分为train_X, train_y这两个训练数据集和test_X, test_y这两个测试数据集。

对于时间序列数据的预测,往往是建立由好几个历史数据预测下一时刻的未来数据,这时候为了充分利用全部数据,应该对原始数据集进行滑窗操作,如下图所示。

请添加图片描述

这里展示的是多个特征的时间序列,其中每一行数据均属于同一时刻。假设,我们要以H( humidity)、PT(pressure)、PE(power)三个特征为预测依据,取当前和上三个时刻共四个时刻的已知数据对下一时刻的PE(功率)进行预测,那么对于X数据集的滑窗就应该如上图所示,而对y数据集的滑窗应该如下图所示。

请添加图片描述

下面给出滑窗实例。

代码实现

滑窗函数

def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True):
'''
DataSet has to be as a DataFrame
'''
if X_data:
if multi_vector:
a,b = DataSet.shape
else:
a = DataSet.shape[0]
b = 1
c = (a-X_width-y_width-a%gap)/gap
X = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b))
for i in range(len(DataSet) - X_width - y_width):
i += 1
if i > c:
break
j = i * gap
tmp = DataSet.iloc[j:j + X_width,:].values
tmp = np.reshape(tmp,(1,X_width,b))
X = np.concatenate([X,tmp],0)
return X
else:
if multi_vector:
print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1])
return;
else:
a = DataSet.shape[0]
c = (a-X_width-y_width-a%gap)/gap
y = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width))
for i in range(len(DataSet) - X_width - y_width):
i += 1
if i > c:
break
j = i * gap + X_width
tmp = DataSet.iloc[j:j + y_width,:].values
tmp = np.reshape(tmp,(1,y_width))
y = np.concatenate([y,tmp])
return y

单特征时间序列

单特征时间序列是指仅有一个特征的一维时间序列,如股票收盘价、风电场风速数据、日营业额等。对单特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width)
train_y = sliding_window(DataSet, X_width, y_width, X_data = None)

假设训练数据集是一个100*1的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

多特征时间序列

多特征时间序列指时间序列的特征不止一个,如上文所举的H、PT、PE三特征序列。这种数据一般使用在待预测的数据跟多个特征相关性较高的场合中,如气象数据嵌入的风速预测、股市数据嵌入的收盘价格预测等。进行多特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#multi_vector是否为多特征
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True)
test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)

假设训练数据集是一个100*3的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

注意事项

DataSet必须是DataFrame格式。

y数据集只能是一维。

总结

撰写背景

面向数据分析的小白,水平有限,错误难免,欢迎指正。

什么是数据滑窗

进行机器学习时,一般都要涉及到划分训练集和测试集的步骤。特别地,在做数据预测时,一般把预测的依据(也就是历史数据)称作X,把需要预测的数据称为y。即首先把原始数据划分为train_X, train_y这两个训练数据集和test_X, test_y这两个测试数据集。

对于时间序列数据的预测,往往是建立由好几个历史数据预测下一时刻的未来数据,这时候为了充分利用全部数据,应该对原始数据集进行滑窗操作,如下图所示。

请添加图片描述

这里展示的是多个特征的时间序列,其中每一行数据均属于同一时刻。假设,我们要以H( humidity)、PT(pressure)、PE(power)三个特征为预测依据,取当前和上三个时刻共四个时刻的已知数据对下一时刻的PE(功率)进行预测,那么对于X数据集的滑窗就应该如上图所示,而对y数据集的滑窗应该如下图所示。

请添加图片描述

下面给出滑窗实例。

代码实现

滑窗函数

def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True):
'''
DataSet has to be as a DataFrame
'''
if X_data:
if multi_vector:
a,b = DataSet.shape
else:
a = DataSet.shape[0]
b = 1
c = (a-X_width-y_width-a%gap)/gap
X = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b))
for i in range(len(DataSet) - X_width - y_width):
i += 1
if i > c:
break
j = i * gap
tmp = DataSet.iloc[j:j + X_width,:].values
tmp = np.reshape(tmp,(1,X_width,b))
X = np.concatenate([X,tmp],0)
return X
else:
if multi_vector:
print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1])
return;
else:
a = DataSet.shape[0]
c = (a-X_width-y_width-a%gap)/gap
y = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width))
for i in range(len(DataSet) - X_width - y_width):
i += 1
if i > c:
break
j = i * gap + X_width
tmp = DataSet.iloc[j:j + y_width,:].values
tmp = np.reshape(tmp,(1,y_width))
y = np.concatenate([y,tmp])
return y

单特征时间序列

单特征时间序列是指仅有一个特征的一维时间序列,如股票收盘价、风电场风速数据、日营业额等。对单特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width)
train_y = sliding_window(DataSet, X_width, y_width, X_data = None)

假设训练数据集是一个100*1的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

多特征时间序列

多特征时间序列指时间序列的特征不止一个,如上文所举的H、PT、PE三特征序列。这种数据一般使用在待预测的数据跟多个特征相关性较高的场合中,如气象数据嵌入的风速预测、股市数据嵌入的收盘价格预测等。进行多特征时间序列滑窗操作如下:

#DataSet训练数据集
#X_width使用的历史数据长度
#y_width要预测的数据长度
#multi_vector是否为多特征
#X_data是否是X数据集
train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True)
test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)

假设训练数据集是一个100*3的序列,使用24个数据预测未来的1个数据,那么滑窗操作就将原数据做了这样的变换:

注意事项

DataSet必须是DataFrame格式。

y数据集只能是一维。

总结


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
author-avatar
oupingsong108
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有