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

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

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

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

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

LSTM 数据准备阶段

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

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

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

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

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

处理结果

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

数据结构

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

  • Pandas DataFrame
  • Numpy Arrays
  • Lists

Pandas DataFrame

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

df.head()

<br>Pandas 示例:谷歌股票

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

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 上发表的一段代码为例:

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

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

总结

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

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

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

deephub 小组经验

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

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

作者:Michelangiolo Mazzeschi

deephub翻译组:oliver lee

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

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

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

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

  2. 数据集转换_“2000坐标”成了标配,你还不懂坐标系定义和转换吗?

    国土空间规划明确要求"统一采用2000国家大地坐标系"和"1985年国家高程基准"作为空间定位基础,可是很多时候我们拿到的数据坐标并不是"2000国家 ...

  3. python实现图片格式转换_干货必看 | Python实现图片格式转化

    今天教大家一个实用的小技巧,用Python实现图片格式转化,即将PDF格式转化成PNG格式. 整体代码: import fitz ''' #将PDF转化为图片 pdfPath pdf文件的路径 img ...

  4. python 特征工程_[译] 基于时序数据的特征工程 --- Python实现

    基于时序数据的回归预测问题,在工作中经常遇到的.它与一般的监督学习的回归模型的区别在于数据本身是基于时序的.而常用的时序预测模型,比如arima等,添加其他特征时又不方便,不得不求助于经典的监督学习预 ...

  5. cnn 一维时序数据_蚂蚁集团智能监控的时序异常检测:基于 CNN 神经网络的异常检测...

    1 背景在蚂蚁集团智能监控领域,时序异常检测是极重要一环,异常检测落地中,业务方参考业界标准输出 Metrics 指标数据,监控不同业务.应用.接口.集群的各项指标,包含 Metrics 指标(总量. ...

  6. 【小白学习PyTorch教程】十、基于大型电影评论数据集训练第一个LSTM模型

    「@Author:Runsen」 本博客对原始IMDB数据集进行预处理,建立一个简单的深层神经网络模型,对给定数据进行情感分析. 数据集下载 here. 原始数据集,没有进行处理here. impor ...

  7. 数据集转换成LMDB格式

    文章来源https://www.cnblogs.com/dengshunge/p/10841108.html略加修改和补充. 介绍两种LMDB格式数据集的生成,一种是自己的数据集,一种是下载wider ...

  8. pythoncsv格式清洗与转换_数据预处理-清洗转换

    当数据质量校验完成后,针对有问题的数据要进行的是数据清洗和转换,另外还包括对正常数据的转换.数据清洗的主要作用包括:纠正错误.删除重复项.统一规格.修正逻辑.转换构造和数据压缩. 1. 纠正错误 错误 ...

  9. kitti数据集转换成可运行的YOLOv5格式

    如果想跳过步骤直接获取YOLOv5格式的kitti数据集评论获取阿里云盘提取码 我们再yolov5/dataset下创建文件夹kitti 再kiiti中放入我们的数据 数据集结构框架 |--kitti ...

最新文章

  1. 丁磊旗下首个IPO的AI业务!网易有道年入7个亿,清华96计算机系为主力,沈向洋任董事...
  2. windows下命令行终端使用rz上传文件参数详解
  3. PHP中常见的几种运行代码的方式
  4. 文件上传 upload-labs 1~20做题记录
  5. java求数组的最小值_JAVA编程求数组最大值和最小值
  6. 在Java中确定文件类型
  7. python读取大数据量xml_多快好省地使用pandas分析大型数据集
  8. OpenCV中的reshape
  9. android UI进阶之布局的优化
  10. LCA(最近公共子序列)
  11. 调研助力4S店,解码困境谜团
  12. 编写技术解决方案思路
  13. 用Excel和Python编程完成线性规划问题的求解
  14. 开源软件管理调研报告
  15. 天正电气2014的安装
  16. sql获取字符串长度函数
  17. Practical GameMaker Projects 免积分下载
  18. Android高德地图基本开发/在线高德离线地图开发/断网使用离线地图(Assets文件夹的使用)
  19. Flowplayer一款免费的WEB视频播放器
  20. Linux系统高树攀登之路

热门文章

  1. .NET Core使用IO合并技巧轻松实现千万级消息推送
  2. 论:开发者信仰之“天下IT是一家“(Java .NET篇)
  3. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
  4. [转]阿里开源低代码引擎LowCodeEngine
  5. 【ArcGIS微课1000例】0018:ArcGIS设置相对路径和数据源
  6. 【ArcGIS微课1000例】0008:ArcGIS中如何设置相对路径?(解决图层前红色的感叹号)
  7. Excel抽奖小程序
  8. C和指针之字符串简单实现strchr、strcmp函数
  9. Android之JNI ERROR (app bug): accessed stale global reference 0xb39533f2 (index 19708 in a table of s
  10. c++ 对象起始地址 指针靠齐_你需要知道的各种指针运算