Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在Python中扩展LSTM网络的数据

如何在Python中扩展LSTM网络的数据

作者头像
AiTechYun
发布于 2018-03-02 08:05:06
发布于 2018-03-02 08:05:06
4.2K00
代码可运行
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号
运行总次数:0
代码可运行

您的序列预测问题的数据可能需要在训练神经网络时进行缩放,例如LSTM递归神经网络。 当网络适合具有一定范围值(例如10s到100s的数量)的非标度数据时,大量的输入可能会降低网络的学习和收敛速度,并且在某些情况下可能会阻止网络有效学习问题。 在本教程中,您将发现如何归一化和标准化序列预测数据,以及如何确定哪些用于输入和输出变量。 完成本教程后,您将知道:

  • 如何在Python中归一化和标准化序列数据。
  • 如何为输入和输出变量选择适当的缩放比例。
  • 缩放序列数据的实际问题。

让我们开始吧。

如何在Python 照片中为长时间内存网络量化数据(版权所有Mathias Appel)

教程概述

本教程分为4部分; 他们是:

  1. 缩放系列数据
  2. 缩放输入变量
  3. 缩放输出变量
  4. 缩放时的实际注意事项

在Python中缩放系列数据

您可能需要考虑的系列有两种缩放方式:归一化和标准化。 这些都可以使用scikit-learn库来实现。

归一化序列数据

归一化是从原始范围重新缩放数据,所以所有值都在0和1的范围内。 归一化要求您知道或能够准确地估计最小和最大可观察值。您可能可以从可用数据估计这些值。如果您的时间序列正在上升或下降,估计这些预期值可能很困难,并且归一化可能不是您的问题使用最好的方法。 一个值的归一化如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = (x - min) / (max - min)

其中最小值和最大值与归一化的值x相关。 例如,对于数据集,我们可以将最小和最大可观察值的估计值设置为30和-10。我们可以对任何值进行归一化,如18.8,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = (x - min) / (max - min)
y = (18.8 - (-10)) / (30 - (-10))
y = 28.8 / 40
y = 0.72

您可以看到,如果提供的值超出最小值和最大值的范围,则结果值不会在0和1的范围内。您可以在进行预测之前检查这些观察结果,或者从数据集删除它们,或者将它们限制到预定义的最大值或最小值。 您可以使用scikit学习对象MinMaxScaler对数据集进行归一化。 MinMaxScaler和其他缩放技术的良好练习使用方法如下:

  • 使用可用的训练数据调整刻度。对于归一化,这意味着训练数据将用于估计最小和最大可观察值。这通过调用fit()函数来完成。
  • 将缩放应用于培训数据。这意味着您可以使用规范化的数据来训练您的模型。这通过调用transform()函数来完成。
  • 将缩放应用到未来的数据。这意味着您可以在将来准备要预测的新数据。

如果需要,转换可以反转。这对于将预测转换回原来的报表或绘图规模很有用。这可以通过调用inverse_transform()函数来完成。 下面是一个归一化10个量的设计序列的例子。 缩放器对象需要将数据提供为行和列的矩阵。加载的时间序列数据作为Pandas序列加载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import Series
from sklearn.preprocessing import MinMaxScaler
# define contrived series
data = [10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0]
series = Series(data)
print(series)
# prepare data for normalization
values = series.values
values = values.reshape((len(values), 1))
# train the normalization
scaler = MinMaxScaler(feature_range=(0, 1))
scaler = scaler.fit(values)
print('Min: %f, Max: %f' % (scaler.data_min_, scaler.data_max_))
# normalize the dataset and print
normalized = scaler.transform(values)
print(normalized)
# inverse transform and print
inversed = scaler.inverse_transform(normalized)
print(inversed)

运行这个示例打印序列,输出从序列中估计的最小值和最大值,打印相同的归一化序列,然后使用反向转换返回原来的值。 我们还可以看到数据集的最小值和最大值分别为10.0和100.0。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0     10.0
1     20.0
2     30.0
3     40.0
4     50.0
5     60.0
6     70.0
7     80.0
8     90.0
9    100.0

Min: 10.000000, Max: 100.000000

[[ 0.        ]
 [ 0.11111111]
 [ 0.22222222]
 [ 0.33333333]
 [ 0.44444444]
 [ 0.55555556]
 [ 0.66666667]
 [ 0.77777778]
 [ 0.88888889]
 [ 1.        ]]

[[  10.]
 [  20.]
 [  30.]
 [  40.]
 [  50.]
 [  60.]
 [  70.]
 [  80.]
 [  90.]
 [ 100.]]

标准化序列数据

标准化数据集涉及重新计算值的分布,使观测值的平均值为0,标准偏差为1。 这可以被认为是减去平均值或居中的数据。 与归一化一样,标准化可能是有用的,甚至在某些机器学习算法中,当您的数据具有不同比例的输入值时也是如此。 标准化假设您的观察结果符合具有良好的平均值和标准偏差的高斯分布(钟形曲线)。如果不满足此期望,您仍然可以标准化您的时间序列数据,但是您可能无法获得可靠的结果。 标准化要求您知道或能够准确估计可观测值的平均值和标准偏差。您可能可以从您的培训数据估计这些值。 一个值的标准化如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = (x - mean) / standard_deviation

平均值计算如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mean = sum(x) / count(x)

standard_deviation的计算公式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
standard_deviation = sqrt( sum( (x - mean)^2 ) / count(x))

我们可以估计平均值为10,标准偏差约为5.使用这些值,我们可以将第20.7的第一个值标准化如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
y = (x - mean) / standard_deviation
y = (20.7 - 10) / 5
y = (10.7) / 5
y = 2.14

对于新数据,数据集的平均值和标准偏差的估计比最小值和最大值更稳健。 您可以使用Scikit学习对象StandardScaler对数据集进行标准化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pandas import Series
from sklearn.preprocessing import StandardScaler
from math import sqrt
# define contrived series
data = [1.0, 5.5, 9.0, 2.6, 8.8, 3.0, 4.1, 7.9, 6.3]
series = Series(data)
print(series)
# prepare data for normalization
values = series.values
values = values.reshape((len(values), 1))
# train the normalization
scaler = StandardScaler()
scaler = scaler.fit(values)
print('Mean: %f, StandardDeviation: %f' % (scaler.mean_, sqrt(scaler.var_)))
# normalize the dataset and print
standardized = scaler.transform(values)
print(standardized)
# inverse transform and print
inversed = scaler.inverse_transform(standardized)
print(inversed)

运行示例打印序列,打印从序列估计的平均值和标准偏差,打印标准值,然后将值以原始比例打印出来。 我们可以看出,估计的平均值和标准差分别为5.3和2.7。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0    1.0
1    5.5
2    9.0
3    2.6
4    8.8
5    3.0
6    4.1
7    7.9
8    6.3

Mean: 5.355556, StandardDeviation: 2.712568

[[-1.60569456]
 [ 0.05325007]
 [ 1.34354035]
 [-1.01584758]
 [ 1.26980948]
 [-0.86838584]
 [-0.46286604]
 [ 0.93802055]
 [ 0.34817357]]

[[ 1. ]
 [ 5.5]
 [ 9. ]
 [ 2.6]
 [ 8.8]
 [ 3. ]
 [ 4.1]
 [ 7.9]
 [ 6.3]]

缩放输入变量

输入变量是网络对输入或可见层进行预测的变量。 一个很好的经验法则是,输入变量应该是小的值,可能在0-1的范围内,或者是标准化的零均值和一个标准差。 输入变量是否需要缩放取决于您的问题和每个变量的具体情况。我们来看一些例子。

分类输入

您可能有一系列分类输入,如字母或状态。 通常,分类输入是第一个整数编码,然后是独热编码的。也就是说,将唯一的整数值分配给每个不同的可能输入,然后使用1和0的二进制向量来表示每个整数值。 根据定义,独热编码将确保每个输入都是一个小的实数,在这种情况下为0.0或1.0。

实值输入

您可以将一个序列的数量作为输入,如价格或温度。 如果数量分布正常,则应标准化,否则系列应归一化。这适用于数值范围很大(10s 100s等)或很小(0.01,0.0001)。 如果数值很小(接近0-1)且分布有限(例如,接近1的标准偏差),那么也许你可以不缩放这个序列。

其他输入

问题可能很复杂,如何最大限度地扩展输入数据可能不清楚。 如果有疑问,请对输入序列进行归一化。如果您拥有资源,可以使用原始数据,标准化数据进行建模,并进行归一化,并查看是否有有益的差异。

如果输入变量是线性组合的,如在MLP[多层感知器]中,那么就很少有必要对输入进行标准化,至少理论上是如此。...然而,原因有多种实用的标准化的输入可以使训练速度和减少的几率被困在当地的最适条件。

- 我应该归一化、标准化还是重新调整数据?神经网络常见问题

缩放输出变量

输出变量是由网络预测的变量。 您必须确保输出变量的比例与网络输出层上的激活函数(传递函数)的比例相匹配。

如果您的输出激活功能的范围为[0,1],则显然必须确保目标值在该范围内。但是通常最好选择适合于目标分配的输出激活功能,强制您的数据符合输出激活功能。

- 我应该归一化、标准化还是重新调整数据?神经网络常见问题 以下启发式应涵盖大多数序列预测问题:

二进制分类问题

如果您的问题是二进制分类问题,则输出将为0和1类。这最好用输出层上的sigmoid激活函数建模。输出值将是0到1之间的实数值,可以被捕捉到清晰的值。

多类分类问题

如果您的问题是多类分类问题,则输出将为0到1之间的二进制类值的向量,每个类值一个输出。这最好用输出层上的softmax激活功能建模。同样,输出值将是0到1之间的实数值,可以捕捉到清晰的值。

回归问题

如果你的问题是一个回归问题,那么输出将是一个实值。这是最好用线性激活功能建模的。如果值的分布是正常的,那么可以标准化输出变量。否则,输出变量可以被归一化。

其他问题

还有许多其他激活功能可以在输出层上使用,您的问题的具体细节可能会增加混乱。 经验法则确保网络输出与数据的比例匹配。

缩放时的实际注意事项

缩放序列数据时有一些实际的考虑。

  • 估计系数。您可以从训练数据中估计系数(归一化的最小值和最大值或标准化的平均值和标准偏差)。检查这些大致的估计值,并使用领域知识或求助领域专家帮助改进这些估计,以便他们将来对所有的数据有用。
  • 保存系数。您将需要以完全相同的方式将未来的新数据归一化,就像用于培训模型的数据一样。保存用于文件的系数,稍后在需要在进行预测或扩展新数据时加载它们。
  • 数据分析。使用数据分析来帮助您更好地了解您的数据。例如,简单的直方图可以帮助您快速获得数量分布的看法,看看标准化是否有意义。
  • 缩放每个系列。如果您的问题具有多个级数,请将其视为单独的变量,然后分别进行扩展。
  • 在适当的时间缩放。在正确的时间应用任何缩放变换很重要。例如,如果您有一系列不稳定的数量,则可能会在首次使数据静止后进行缩放。在将此系列转换成一个受监督的学习问题后,按不同的方式处理,这是不恰当的。
  • 如果对缩放有疑问。您可能需要重新调整输入和输出变量的大小。如果有疑问,至少规范您的数据。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python的9个特征工程技术
https://github.com/NMZivkovic/top_9_feature_engineering_techniques
代码医生工作室
2020/11/20
1K0
Python的9个特征工程技术
6个步骤教你金融数据挖掘预处理
数据预处理没有标准的流程,通常针对不同的任务和数据集属性的不同而不同。下面就一起看下常用六大步完成数据预处理。
陈晨135
2021/12/31
5530
6个步骤教你金融数据挖掘预处理
如何在Python中规范化和标准化时间序列数据
如果您的时间序列数据具有连续的尺度或分布,则在某些机器学习算法将获得更好的性能。
LPD6375
2018/02/05
6.5K0
如何在Python中规范化和标准化时间序列数据
机器学习特性缩放的介绍,什么时候为什么使用
在这篇文章中,我们将讨论什么是特征缩放以及为什么我们在机器学习中需要特征缩放。我们还将讨论数据的标准化,以及使用scikit-learn实现同样的标准化。
deephub
2020/09/04
7050
机器学习特性缩放的介绍,什么时候为什么使用
如何在评估机器学习模型时防止数据泄漏
在模型评估过程中,当训练集的数据进入验证/测试集时,就会发生数据泄漏。这将导致模型对验证/测试集的性能评估存在偏差。让我们用一个使用Scikit-Learn的“波士顿房价”数据集的例子来理解它。数据集没有缺失值,因此随机引入100个缺失值,以便更好地演示数据泄漏。
deephub
2021/03/10
1K0
如何在评估机器学习模型时防止数据泄漏
6个步骤搞定金融数据挖掘预处理
数据预处理没有标准的流程,通常针对不同的任务和数据集属性的不同而不同。下面就一起看下常用六大步完成数据预处理。其中数据获取可以参考金融数据准备。
数据STUDIO
2021/06/24
1.5K0
股票预测 lstm(时间序列的预测步骤)
如果对LSTM原理不懂得小伙伴可以看博主下一篇博客,因为博主水平有限,结合其他文章尽量把原理写的清楚些。
全栈程序员站长
2022/08/01
2.3K1
股票预测 lstm(时间序列的预测步骤)
【机器学习】 特征工程:特征预处理,归一化、标准化、处理缺失值
归一化是在特征(维度)非常多的时候,可以防止某一维或某几维对数据影响过大,也是为了把不同来源的数据统一到一个参考区间下,这样比较起来才有意义。其次可以让程序更快地运行。
Twcat_tree
2023/11/17
1.4K0
【机器学习】 特征工程:特征预处理,归一化、标准化、处理缺失值
归一化vs标准化,哪个更好
众所周知,特征工程是将原始数据转换为数据集的过程。有各种可用的功能工程技术。两种最广泛使用且最容易混淆的特征工程技术是:
deephub
2020/05/09
1.8K0
归一化vs标准化,哪个更好
通过支持向量回归和LSTM进行股票价格预测
人工智能(AI)无处不在。机器学习和人工智能正在彻底改变现代问题的解决方式。应用机器学习的一种很酷的方法是使用财务数据。财务数据是机器学习的一个游乐场。
代码医生工作室
2019/09/23
3.6K0
通过支持向量回归和LSTM进行股票价格预测
在Python中使用LSTM和PyTorch进行时间序列预测
顾名思义,时间序列数据是一种随时间变化的数据类型。例如,24小时内的温度,一个月内各种产品的价格,一年中特定公司的股票价格。诸如长期短期记忆网络(LSTM)之类的高级深度学习模型能够捕获时间序列数据中的模式,因此可用于对数据的未来趋势进行预测。在本文中,您将看到如何使用LSTM算法使用时间序列数据进行将来的预测。
用户7886150
2021/01/19
2.3K0
【深度学习实验】网络优化与正则化(五):数据预处理详解——标准化、归一化、白化、去除异常值、处理缺失值
  目前,研究人员通过大量实践总结了一些经验方法,以在神经网络的表示能力、复杂度、学习效率和泛化能力之间取得良好的平衡,从而得到良好的网络模型。本系列文章将从网络优化和网络正则化两个方面来介绍如下方法:
Qomolangma
2024/07/30
6830
【深度学习实验】网络优化与正则化(五):数据预处理详解——标准化、归一化、白化、去除异常值、处理缺失值
数据处理(三)| 深入数据预处理:提升机器学习模型性能的关键步骤
今天要和大家继续讲解机器学习中一个看似枯燥但至关重要的环节——数据预处理。前面已经讲解过数据清洗和数据评质量评估(点击跳转),如果你已看过,那你已经打下了坚实的基础!今天这篇内容会更聚焦于预处理的核心技巧,手把手教你如何将原始数据“打磨”成模型的最爱。
CoovallyAIHub
2025/03/03
1810
数据处理(三)| 深入数据预处理:提升机器学习模型性能的关键步骤
Python人工智能:基于sklearn的数据预处理方法总结
通过数据预处理使得数据适应模型的需求。sklearn中进行数据预处理的模块包括如下两种:
用户1143655
2023/03/21
1.9K0
Python人工智能:基于sklearn的数据预处理方法总结
预处理数据
数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。
润森
2019/08/29
1.6K0
预处理数据
sklearn中的数据预处理和特征工程
  小伙伴们大家好~o( ̄▽ ̄)ブ,沉寂了这么久我又出来啦,这次先不翻译优质的文章了,这次我们回到Python中的机器学习,看一下Sklearn中的数据预处理和特征工程,老规矩还是先强调一下我的开发环境是Jupyter lab,所用的库和版本大家参考:
py3study
2020/01/15
1.3K0
sklearn中的数据预处理和特征工程
基于长短期记忆神经网络LSTM的多步长时间序列预测
长短时记忆网络(LSTM)是一种能够学习和预测长序列的递归神经网络。LSTMs除了学习长序列外,还可以学习一次多步预测,这对于时间序列的预测非常有用。LSTMs的一个困难在于,它们可能难以配置,而且需要大量的准备工作才能获得适合学习的格式的数据。
代码医生工作室
2020/06/16
6.8K0
基于长短期记忆神经网络LSTM的多步长时间序列预测
数据处理中的标准化、归一化,究竟是什么?
今天说一个比较重要的内容,无论是在算法建模还是在数据分析都比较常见:数据归一化和标准化。
小一不二三
2021/02/18
6.3K0
数据处理中的标准化、归一化,究竟是什么?
独家 | 数据转换:标准化vs 归一化(附代码&链接)
本文将解释数据转换中常见的特征缩放方法:“标准化”和“归一化”的不同之处,并举例说明何时使用,以及如何使用它们。
数据派THU
2020/05/26
1.3K0
数值数据的特征工程
数据馈送机器学习模型,越多越好,对吗?好吧,有时数字数据不太适合提取,因此,本文将介绍多种方法,可以将原始数字转换为更可口的东西。
计算机与AI
2020/12/14
8120
数值数据的特征工程
推荐阅读
相关推荐
Python的9个特征工程技术
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验