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

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

f8aac2afef3d74b8ddcf037491bf82f0.png

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

· 数据准备的顺序

· 数据存储的结构

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

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

LSTM 数据准备阶段

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

· 按时间分割数据集

· 将数据集转换为有监督学习问题

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

317456d78be212b96d9e4f176a8563e4.png

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

7e806e38ebe484a4dcd1219563cad5f0.png

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

b371bd1e02ca13726a4f1ad58726977d.png

处理结果

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

数据结构

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

· Pandas DataFrame

· Numpy Arrays

· Lists

Pandas DataFrame

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

df.head()
858f1bfa261b168ea7bdc425da16d2ed.png

Pandas 示例:谷歌股票

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

b729d1b768de31ca04a49b4106f50f2f.png

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

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

Numpy Arrays

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

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

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

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

Lists

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

2324f964cae974fcf2d71bae07674a6b.png

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

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

总结

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

6d214de24f7a269a5c4e3e9bb1ed052e.png

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

09ef617f42dc607a1419118cc4b05513.png

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

deephub 小组经验

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

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

作者:Michelangiolo Mazzeschi

deephub翻译组:oliver lee

天池智能制造质量预测数据集 背景描述 半导体产业是一个信息化程度高的产业。高度的信息化给数据分析创造了可能性。基于数据的分析可以帮助半导体产业更好的利用生产信息,提高产品质量。 现有的解决方案是,生产机器生产完成后,对产品质量做非全面的抽测,进行产品质量检核。这往往会出现以下状况,一是不能即时的知道质量的好坏,当发现质量不佳的产品时,要修正通常都为时以晚,二是在没有办法全面抽测的状况下,存在很大漏检的风险。 在机器学习,人工智能快速发展的今天,我们希望着由机器生产参数去预测产品的质量,来达到生产结果即时性以及全面性。更进一步的,可基于预先知道的结果,去做对应的决策及应变,对客户负责,也对制造生产更加敏感。 痛点与挑战: 1)TFT-LCD(薄膜晶体管液晶显示器)的生产过程较为复杂,包含几百道以上的工序。每道工序都有可能会对产品的品质产生影响,故算法模型需要考虑的过程变量较多。 2)另外,这些变量的取值可能会存在异常(如测点仪表的波动导致、设备工况漂移等现象),模型需要足够稳定性和鲁棒性。 3)产线每天加工的玻璃基板数以万计,模型需要在满足较高的精准度前提下尽可能实时得到预测结果,这样才能给在实际生产中进行使用。 价值: 1)如果能够建立算法模型准确预测出特性值,便可以实现生产过程的实时监控和预警,提前发现当前工序的问题、避免问题流入到后道工序,减少生产资源浪费的同时也优化了产品良率。 2)基于预测模型得到的关键参数,工艺人员能够快速地针对那些电性表现不佳的产品进行问题溯源分析,重点分析和调整那些关键的影响因子,加快不良问题的处理、提高整体工艺水平。 3)该预测模型在部署后也可以用于减少特性检测相关的工序,能够节约检测资源并且对提升产线整体的产能有正面作用。 数据说明 每条数据包含8029列字段。 第一个字段为ID号码,最后一列为要预测的值Y。其余的数据为用于预测Y的变量X。这些变量一共由多道工序组成,字段的名字可以区分不同的工序,例如 210X1, 210X2。300X1,300X2。字段中的TOOL_ID或者Tool为每道工序使用的机台,如果是string类型,需要选手自行进行数字化转换。注意: 数据中存在缺失值。 测试集分为A/B两份,相比训练集,最后一列的value值是缺失的,研究人员可以根据训练数据做模型训练,并对测试集做预测。为了方便研究人员评测算法效果,我们提供了测试集A的答案。 问题描述 本数据集提供了生产线上的抽样数据,反应机台的温度,气体,液体流量,功率,制成时间等因子。 通过这些因子,需要研究人员设计出模型,准确的预测与之相对应的特性数值。这是一个典型的回归预测问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值