数据集转换_为什么LSTM看起来那么复杂,以及如何避免时序数据的处理差异和混乱...

531b2315a87caadf1b935358c43af924.png

LSTM(long short term memory,长短期记忆网络)是预测时间序列最常用的神经网络模型之一。但是这种神经网络模型相当复杂,需要特定的结构、数据前期处理等操作。

当在网上搜寻要学习的代码时,很难将另一个程序员的代码合并到当前开展的项目中。对于LSTM尤其如此,导致这些问题的关键在于:

  • 数据准备的顺序
  • 数据存储的结构

简单地说,由于两个关键步骤有多种方法可以获得相同的结果,因此每个程序员选择的路径可能有所不同。

在这篇文章中,将分析为什么我们必须下定决心使用一组特定的范例,特别是在为冗长的LSTM编程时,以便更好地调试和共享。

LSTM 数据准备阶段

本质上,当我们为模型准备时间序列数据时,需要执行以下关键步骤:

  • 按时间分割数据集
  • 将数据集转换为有监督学习问题

这两个步骤的执行顺序没有明确规定。
因此一部分程序员先分割数据集,然后将其转化为监督学习问题。而其他程序员则颠倒两者顺序。

00f54f6ed81f390598b2954efa38bbf7.png


先分割数据集,然后转换为有监督学习问题

393580a19d017c1803139ac612dedb2a.png


先转换为有监督学习问题,然后分割数据集

045e52a79e74739b21bff962b7a201c3.png


处理结果

对比而言,虽然处理的结果相同,但是先分割数据集的方式所需代码更少。而部分程序员在编程过程中,会使用第二种方式,这就导致了社区中交流问题和代码时产生一定的差异和混乱。所以本文推荐优先分割数据集的方式。

数据结构

在我们决定了为LSTM准备数据的正确顺序之后,我们需要选择使用哪种合适的数据结构。数据结构大致可以分为以下三种:

  • Pandas DataFrame
  • Numpy Arrays
  • Lists

Pandas DataFrame

Pandas 是一个可靠的且便于操作的数据处理库。而我们在编写人工智能算法时,总是需要在进程的任何一步检查数据以便于调试。在 Pandas 库中可以很方便地做到这一点:

df.head()

8493b9cc9c5b25046cbbb30ada1084d1.png


<br>Pandas 示例:谷歌股票

通过 Pandas 可以打印出数据情况,以检查在程序运行过程中是否出现错误。

f9b288604284a1e5274f258510772845.png


Pandas 示例:一个模拟有监督学习问题的pandas dataframe

相比较而言, List 则具有多维度、不易于理解的缺点,对于调试工作不太友好。

Numpy Arrays

所有数据集或多或少都会转换为 NumPy Arrays 以进行编辑或缩放操作。例如,如果我们希望在0和1之间缩放数据集,可以使用名为MinMaxScaler的工具:

from sklearn.preprocessing import MinMaxScaler
#df is pandas DataFrame
#conversion to numpy array
df = df.Values
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_values = scaler.fit_transform(df)

将整个数据集作为NumPy Array 的问题在于,无法详细查看其中的内容。不能够以列名称的方式查看数据(将数据集转换为有监督的学习问题时,这一点非常重要)。并且对于算法的调试工作不够友好。

幸运的是,可以轻松地从NumPy Arrays 切换回 DataFrame。

Lists

将数据集的内容存储在多维列表中是十分低效的。以 Kaggle 上发表的一段代码为例:

cd74c99748166ee59e80a8567500afd2.png


List 示例:一个四因素的时间序列数据存储

不难发现,通过 Lists 难以直接定位数据并查看数据,并且不能够通过列名称的方式组织数据。

总结

规范化这个问题并不局限于LSTM,但是在 LSTM 编程过程中十分普遍。缺乏规范化导致在实际编程中,不能够直接一个接一个地调用程序或函数。

571d1adb02eafad3708f48100bf4d7ed.png

现有的情况下,代码看起来可能很简单而且很快,但是搜索错误、调试代码是个很大的问题。在函数声明过程中,输入数据的名称可能会更改,因此当想要检查隐藏在代码中的变量的值或输出时,往往不能简单地调用原始的数据名称,必须使用它所涉及到的所有代码才能提取该数据的真实值。

7e7d7f7820e5ace46726dd5a86ed0b5d.png

这就是本文推荐使用统一的数据框架的原因。通过统一使用 Pandas Dataframe,可以轻松地检查每个函数地输出,更好地进行算法调试工作。

deephub 小组经验

基本上所有的所有的编程语言的数字下标都是从0开始的,这就使得我们在处理序列数据的时候需要改掉以 1为起始的现实中的习惯。并且在python处理分片的时候使用的是左闭右开(绝大部分,并不是全部)的原则,这也是导致了我们对时序数组的操作需要特别的注意。

实际案例:LSTM需要通过前30天的数据,预测当天的数据,处理输入数据的数组下标如何写,有兴趣的小伙伴可以手动试试。

作者:Michelangiolo Mazzeschi

deephub翻译组:oliver lee

关注公众号 "deephub-imba" 获取更多AI干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一直被模仿,从未被超越的经典订阅号!

不管你昨天有多优秀&#xff0c;代表不了今天的辉煌&#xff0c;昨天的太阳永远晒不干今天的衣裳&#xff0c;以阳光心态迎接每一天。今天小编就给大家推荐几个越来越优秀的微信公众号希望把快乐和成长带给您长按二维码&#xff0c;选择【识别图中二维码】关注日读好书ID&#…

面向.NET开发人员的Dapr——总结和前景

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理面向.NET开发人员的Dapr——发布和订阅面…

每日一笑 | 周一,如何才能保持清醒?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;难怪数据汪每次喝咖啡都没啥用原来是没用对杯子...

查询两个日期间隔天数怎么算_大厂都是怎么用Java8代替SimpleDateFormat?

1 SimpleDateFormat 之坑1.1 格式化1.1.1 案例初始化一个Calendar&#xff0c;设置日期2020年12月29日​日志​这是由于混淆SimpleDateFormat的各种格式化模式&#xff1a;小写y是年大写Y是week year&#xff0c;即所在的周属于哪一年一年第一周的判断方式从getFirstDayOfWeek(…

Vertex Texture Fetch(VTF) Fragment Texture Fetch ( FTF )

在vertex shader里也可以检索纹理。我本来觉得这没什么好奇怪的&#xff0c;因为我一直也觉得这很当然可以啊~当初橙书(OpenGL Shading Language Edtion2)也说过texture2D这类函数不是fragment shader专用的&#xff0c;倒还有texture2DLod这种在vertex shader里专用的&#xf…

面向.NET开发人员的Dapr——机密

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理面向.NET开发人员的Dapr——发布和订阅面…

没找到rpm命令_Mysql的命令总结和PyMysql

Author&#xff1a;RunsenDate&#xff1a;2019/2/27作者介绍&#xff1a;Runsen目前大三下学期&#xff0c;专业化学工程与工艺&#xff0c;大学沉迷日语&#xff0c;Python&#xff0c; Java和一系列数据分析软件。导致翘课严重&#xff0c;专业排名中下。.在大学60%的时间&a…

银联再发道歉声明;印度发布吃鸡禁令;甘肃全省校园禁售辣条;波音面临50亿罚款;女子撕扯民警头发罚两百;这就是今天的大新闻。...

今天是3月18日农历二月十二今天星期一最近天气多变大家出门注意穿衣带伞下面是今天的大新闻银联再发道歉声明&#xff08;央视财经&#xff09;315晚会就“闪付”功能存在“隔空盗刷”的风险对广大消费者进行消费预警。3月16日下午&#xff0c;银联回应此事&#xff0c;表示隔空…

面向.NET开发人员的Dapr——可观察性

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理面向.NET开发人员的Dapr——发布和订阅面…

antd request 通过jsessionid传参数_Umi-request源码阅读

最近参照antd-pro脚手架进行开发&#xff0c;因此接触到了umi-request。umijs/umi-request​github.comumi-request对fetch进行了封装&#xff0c;简化了api的使用&#xff0c;结合了fetch和axios的特点&#xff0c;具体可参照umi-request的readme介绍。文件结构核心文件夹为sr…

随手能做194个实验,不呆板,轻松撬动大智慧

▲数据汪特别推荐点击上图进入玩酷屋玩具和学习看似是两个对立的东西&#xff0c;孩子天性爱玩&#xff0c;家长却希望孩子能多学习。不一定非要啃课本才能汲取知识&#xff0c;有时候&#xff0c;在轻松有趣的游戏中也能学到课堂上学不到的知识。让学习变得有趣、高效——给孩…

面向.NET开发人员的Dapr——绑定

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理面向.NET开发人员的Dapr——发布和订阅Th…

每日一笑 | 为什么Python比Java更受欢迎?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

传递集合对象_面试必备——Java集合框架

Java集合框架面试题常见集合集合可以看作是一种容器&#xff0c;用来存储对象信息。数组和集合的区别&#xff1a;(1)数组长度不可变化而且无法保存具有映射关系的数据&#xff1b;集合类用于保存数量不确定的数据&#xff0c;以及保存具有映射关系的数据。(2)数组元素既可以是…

面向.NET开发人员的Dapr——服务调用

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理The Dapr service invocation building b…

快速入门深度学习,其实并不难!

深度学习的概念源于人工神经网络的研究&#xff0c;而深度学习的过程就是使用多个处理层对数据进行高层抽象&#xff0c;得到多重非线性变换函数的过程。虽然深度学习的概念看似高大上&#xff0c;让人有种莫名的距离感&#xff0c;实际上它在日常生活中随处可见&#xff0c;比…

插入始终是1_插入式电磁流量计特点与应用

一、本文引言首先&#xff0c;插入式电磁流量计是电磁流量计中的一种安装类型&#xff0c;电磁流量计的安装方式有多种&#xff0c;包括法兰式安装&#xff0c;螺纹安装&#xff0c;卡箍式安装&#xff0c;插入式安装等四种类型&#xff0c;法兰式安装是常见普遍都在使用的安装…

面向.NET开发人员的Dapr——发布和订阅

目录&#xff1a;面向.NET开发人员的Dapr——前言面向.NET开发人员的Dapr——分布式世界面向.NET开发人员的Dapr——俯瞰Dapr面向.NET开发人员的Dapr——入门面向.NET开发人员的Dapr——参考应用程序面向.NET开发人员的Dapr——状态管理面向.NET开发人员的Dapr——服务调用The …

bootstrap的表单验证 vue_第45天:Web表单

在了解了 Flask Bootstrap 基本框架之后&#xff0c;我们来了解一下 Flask 框架的 表单( form )&#xff0c;以帮助我们创建交互式的 Web 应用&#xff0c;最后会有个提交个人信息的例子。Flask-WTF 是 Flask 框架的一个扩展&#xff0c;用来做表单的交互&#xff0c;是对 WTFo…

超火GitHub项目!一夜获得5000星,竟是微软开源的计算器

全世界只有3.14 % 的人关注了数据与算法之美昨天&#xff0c;微软在 MIT License 下开源了一个 GitHub 项目——Windows 计算器&#xff0c;短短 24 小时内就获得了接近 5000 颗星&#xff0c;并引发大量讨论。这个项目爆红的速度可能连微软自己都始料未及。科技媒体 The Verge…