要说这简介, 它详细地介绍了长短期记忆网络用于时间序列预测中, 专门是在预测短时的客流量以及车流量这种串行的数据上所涉的应用情况的范畴里 , 又借助阐释结构的基本情况跟工作的原理, 去就怎样构建、训练甚至优化长短期记忆网络模型, 从而提升时间序列预测期间的准确程度方面演示了一番。并且此文还交出了借助实打实事例学习搭建的完整长短期记忆网络模型的进程, 其中含有数据准备阶段去做预处理之事, 规划模型架构是什么样的, 对模型进行编译并从而展开训练, 预测之后去评估, 依据评估情况对模型进行优化等这些要点步骤的组合。
1. 长短期记忆网络(LSTM)简介
一种特殊类型的递归神经网络, 即长短期记忆网络(LSTM), 它是为解决传统循环神经网络(RNN)难以捕捉长期依赖关系的问题而设计的。LSTM 通过其独特的门控机制, 有效解决了梯度消失或爆炸的问题, 所以它特别适合处理和预测时间序列数据中的重要事件。
LSTM 的历史与演变
涉足深度学习以及神经网络的研究历程里, 于1997年, LSTM被 和 率先提出来。一开始时, LSTM在设计层面以及性能方面, 不像当下这般高效, 然而其核心观念为后续的深度学习探究奠定了根基。近些年来, 伴随计算能力的提升以及算法的改良, LSTM已经在语音识别、语言翻译、时间序列分析等范畴广泛运用。
LSTM 的核心优势
LSTM 最关键的优势存在于其记忆单元以及那三个门, 也就是输入门、遗忘门、输出门, 它们一同对数据的流动与存储过程施加作用。这般门控结构致使网络能够去学习在何时把信息增添至细胞状态里, 在何时清除不相关的信息, 以及在何时依据当前状态生成输出。这让 LSTM 在处理有着复杂时间依赖关系的数据之际表现得格外突出。
2. 时间序列预测的重要性
在进行现代数据分析工作时期间, 其中的时间序列预测属于一个非常关键的研究方向范畴。这个时间序列数据涵盖着伴随时间而不断发生变化的观测值序列情况, 它存在着广泛的作用应用, 这种应用体现在像股票市场分析领域、天气预测工作方面、交通流量监控等多个不同的场景之中。要想构建出高效的预测模型, 那么去深入理解时间序列预测所包含的核心概念、所涵盖的应用场景以及其所面临的挑战等这些方面, 就是最为基础起初的第一步。
2.1 时间序列预测的概念 2.1.1 定义与分类
预测时间序列意味着, 借助处于历史时间点的数据, 去预估未来某个时间点, 或者未来一段时间内的数据值, 它属于一种特别的数据分析类型, 其预测结果常常严重受时间顺序影响, 就本质而言则是, 时间序列预依赖时间顺序性, 也就是过去的观测值具备对未来进行预测的能力。
时间序列能够被划分成两类: 平稳时间序列以及非平稳时间序列,平稳时间序列的统计特性(其均值、方差等这些)是不会借着时间进行改变的, 然而非平稳时间序列的统计特性却是会随着时间而变化掉的, 在对非平稳序列来讲进行处理之际, 一般情况下会先开展数据转换工作, 像差分、对数转换这般的, 让它转变成为平稳序列之后再去开展预测。
2.1.2 时间序列预测的应用场景
时间序列预测的应用范围极为宽泛, 覆盖诸多行业以及领域, 举例来说, 于金融市场里, 时间序列预测能够用于股票价格、交易量的预估, 在零售业当中, 可以对商品的销量、顾客流量等予以预测, 在能源领域, 能够预测电力消耗、石油价格等情况, 在公共卫生领域, 时间序列模型被用以预测疾病爆发、疫情传播趋势。
在环境保护这个领域之中, 天气的预测, 还有气候的预测, 它们也是依赖着时间序列分析的, 以此来对农业产量、灾害预防、城市规划之类的这些方面产生巨大的影响。从这里能够看得出来, 时间序列预测对于决策支持有着不可或缺的作用, 对于风险评估同样有着不可或缺的作用。
2.2 时间序列预测的挑战 2.2.1 数据的特性分析
时间序列数据常常涵盖诸多复杂特性, 像季节性、趋势、周期性以及噪声。季节性乃是指数据于固定周期当中出现的重复性展现形式。趋势是说数据伴随日期推进呈现出来的整体朝上或者往下拓展的样式。周期性跟季节性相类似, 不过它指的是一种并非固定周期之内的重复性样式。噪声是指处于数据里的随机起伏变动, 这有可能是由多种随机要素所引发的。
对于时间序列预测而言, 理解这些特性且准确识别它们至为关键, 只有精准地识别了数据的特性, 才能够挑选合适的时间序列预测模型, 进而有效地从数据里提取有用信息, 展开准确的预测。
2.2.2 模型选择与评估指标
选出恰当的时间序列预测模型乃是预测成功的重点所在, 可供挑选的模型涵盖ARIMA、季节性分解的时间序列预测模型(STL)、长短期记忆网络(LSTM)等, 每一种模型都存有其优势以及局限性, 一般而言需要依照数据的特性、预测任务的复杂度以及预测的时间范围予以确定。
评估预测模型的性能, 这在时间序列预测里是一个重要的环节。常用的评估指标囊括了均方误差 , 也就是MSE , 还有均方根误差 , 即RMSE , 以及平均绝对误差 , 也就是MAE , 另外还有平均绝对百分比误差 , 即MAPE。凭借这些评估指标 , 我们能够去量化模型预测的准确度 , 并且可以对比不同模型的性能。
然后, 要进一步去探讨LSTM于时间序列预测里的应用, 并且跟传统时间序列模型以及其他深度学习模型做比较, 与此同时, 着重突出LSTM在处理长依赖问题方面所具备的独特优势。
3. LSTM在时间序列预测中的应用
有一种方法, 它把统计学以及机器学习技术运用到序列数据上, 这就是时间序列预测, 它在股票市场分析方面有着广泛应用, 在天气预报领域也被广泛运用, 于交通流量预测等领域同样有着较广泛的运用。在这些应用里, 那种能够处理和预测具有长期依赖性序列数据的长短期记忆网络, 也就是LSTM, 显得格外重要。关于LSTM在时间序列预测中的应用, 本章节会进行深入探究, 并且会和其它模型做比较。
3.以LSTM同其他模型展开的比较, 其中包含, 3.1.1所涉及的, LSTM与传统时间序列模型之间的比较。
像ARIMA(自回归积分滑动平均模型)以及季节性分解的时间序列预测()这类, 属于传统时间序列预测方法里的, 这些方法, 主要借助统计学方式来分析和预测数据。尽管它们擅长捕捉数据的线性关系, 然而对于非线性的、复杂的序列数据而言, 其效果常常不尽如人意哦。
深度学习中, 有一种名为LSTM网络的模型, 它能借由隐藏层里的非线性构造, 去学习数据内的复杂样式, LSTM凭借其特别的门控机制, 来处理长序列当中的信息, 进而能够维持信息的长期依赖关联, 这可是传统模型没办法相比的, 所以, 在处理像股票市场趋势预测, 或者复杂的工业设备监控数据这类非线性且有着复杂时间依赖性的任务之时, LSTM展现出更强大的预测本领。
3.1.2 LSTM与其他深度学习模型对比
除LSTM外, 其他深度学习模型, 像卷积神经网络(CNN)以及前馈神经网络(FFNN;也被用于时间序列预测), 在于图像处理方面表现出色的CNN, 它借助卷积提取局部特征, 且通过池化降低特征的维度, 在时间序列预测里, 能捕捉局部时间依赖关系的CNN, 其效果常常受限在卷积核的大小。
尽管前馈神经网络较为简单, 不过在处理不存在时间关联性的单点预测问题之际, 能够迅速给出结果。然而, 针对复杂的序列数据而言, 因FFNN结构有所局限, 一般没办法有效处理长期依赖的问题。
比较起来, LSTM有着更为繁杂的内部架构, 尤其是它的遗忘门、输入门以及输出门的设计呵, 这使得网络能够在时间序列的任一时间步长上, 做到保存、更新同时输出相关信息焉, 这么一来就能更好地去处置长期依赖问题喽。
3.2 LSTM于时间序列预测里边的优势, 3.2.1 具备解决长依赖问题的能力。
在时间序列预测里头, 时长依赖问题所指的是, 模型得记住序列里较早时间步的信息, 并且在预测当口运用这些信息。LSTM依靠其独具一格的门控机制, 能够有效地管控信息流, 把传统RNN , 也就是递归神经网络, 在学习长序列数据之际碰到的梯度消失以及梯度爆炸问题给解决掉了。
3.2.2 时间序列预测案例分析
为了将LSTM于实际运用里的成效呈现出来, 我们能够借由一个简易的实例作进一步领会, 假定我们要对某座城市每日的用电量予以预测, 鉴于用电量会遭受季节、天气、特殊节假日这类因素的作用, 这样便产生了一个繁杂的非线性时间序列预测难题。
凭借运用LSTM模型, 我们先是把数据集划分成训练集跟测试集。接着, 我们构建一个LSTM网络, 采用多个LSTM层, 并且运用适宜的激活函数(像是ReLU或者tanh)。借助反向传播以及梯度下降算法, 模型得以学习到用电量随时间变动的模式。
训练结束之后, 我们可用测试集对模型性能予以评估。观察模型预测结果跟实际用电量的差别, 据此能运用像均方误差(MSE)这类评估指标, 对模型预测精度加以量化。
借由LSTM模型, 可以得出比传统模型来得 更为确切预测成果, 于实际运用里具备明显价值 在诸如助力电力公司更妥善规划电力资源以及开展成本控制等方面之中。
3.2.3 LSTM模型的实现
运用Keras库, 于其中能够极其轻易地达成一个LSTM模型。以下是一段简简单单的LSTM模型构建示例代码:
import keras from keras.models import Sequential from keras.layers import LSTM, Dense # 假设已经准备好了训练数据和测试数据 train_X, train_Y, test_X, test_Y # 数据需要预处理成适合LSTM输入的形状 model = Sequential() model.add(LSTM(50, activation='relu', input_shape=(n_timesteps, n_features))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') # 训练模型 model.fit(train_X, train_Y, epochs=200, verbose=0) # 预测 train_predict = model.predict(train_X) test_predict = model.predict(test_X) # 评估模型 train_score = model.evaluate(train_X, train_Y, verbose=0) test_score = model.evaluate(test_X, test_Y, verbose=0)代码块以上呈现出架构得以建成LSTM模型当中的根本流程。伊始, 致使所需得以导入至恰当空间当中, 紧接着将模型予以定义, 并且添加上一个LSTM层级以及一个全连接层级, 把均方误差当作损失函数来运用, 同时挑选采取adam优化器措施。在这以后, 借助于训练数据来把模型予以训练, 并且针对训练集以及测试集开展预测工作, 终极之际用来算得模型于训练集以及测试集之上的评分数量。
实际上进行操作时, 或许存在这样一个情况, 那就是需要针对数据开展归一化处理, 与此同时, 还要去调整网络层数、神经元数量以及迭代次数这般一些超参数, 并且, 还得尝试不同的优化器与损失函数, 通过这些方式方才能够求得或实现最佳的预测性能。 。
4. 用做核心结构的LSTM模型, 存在着输入门, 存在着遗忘门, 存在着输出门, 还存在着细胞状态, 4.1所涉及的是LSTM的基本单元结构, 4.1.1所涉及的则是输入门的作用以及实现。
长短期记忆网络, 也就是LSTM, 属于一种特殊的, 循环神经网络, 即RNN, 它被设计出来, 目的是解决传统RNN处理长序列时, 所碰到的梯度消失, 或者梯度爆炸问题。LSTM的核心之处在于, 其设计了几个特别的门结构, 这些门结构能够帮助网络有效地学习长期依赖信息。在LSTM里, 输入门的作用特别关键, 它控制着新的输入信息对于网络状态的影响程度。
在代码层面,LSTM的输入门可以通过以下公式进行实现:
input_gate = sigmoid(Wxi * x_t + Whi * h_{t-1} + b_i)在此处, Wxi是输入x_t的权重矩阵哎, Whi是隐藏状态h_{t - 1}的权重矩阵啦 ;b_i是偏置项。经由激活函数, 输入门的值被限定在0与1之间, 其中1代表完全准许信息通过咧, 而0代表完全不准许信息通过。
于深度学习框架里, 倘若, LSTM的输入门常常是经由库函数径直完成的, 并非要我们亲手撰写上述数学公式。然而知晓这些详情对透彻领会 LSTM的运作原理极有助益。
4.1.2 遗忘门的设计原理
用于决定哪些信息要从细胞状态里被遗忘的遗忘门, 是LSTM里另一个关键的组件, 其输出为准介于0到1之间的值, 其中1意味着完全保留, 0则代表完全丢弃, 这让LSTM于序列的每一时刻都能动态地决定保存或者遗忘信息。
遗忘门的计算公式如下:
forget_gate = sigmoid(Wxf * x_t + Whf * h_{t-1} + b_f)其中, 针对遗忘门, Wxf是当前输入x_t对应它的权重, Whf是先前隐藏状态h_{t - 1}对应它的权重, b_f是遗忘门的偏置项。并且很典型地, 这类权重的实现通常是由深度学习框架去提供的, 可是深入了解这当中的过程, 对于到底该如何去有效优化以及调整LSTM网络来讲属于至关重要的事情。
于实际运用里, 遗忘门使模型得以认得并舍弃已不再相关之信息, 此对处理长序列数据来讲至关重要。比如说,在自然语言处理任务当中, 因句子推进, 之前的语境信息或会变得不复重要, 遗忘门便可助力模型“忘掉”这些信息, 将注意力汇聚于新的、关键的信息。
4.LSTM的状态更新机制中的细胞状态的作用, 在4.2.1被提及 , 有2个相关内容。
传递长期信息是一个关键通道在 LSTM 里, 这个关键通道被叫做细胞状态, 细胞状态存在有着能够存储和传输长期状态信息作用, 它类似于有助于传递更新后的信息的信息高速公路而且能够在整个网络中进行传递。
为了更新细胞状态,LSTM执行以下步骤:
计算输入门的值, 以此来决定要保留多少新输入 的信息。计算遗忘 门的值, 进而决定从细胞状态之中删除多少旧的信息。细胞状态做更新, 新的细胞状态是由前一时刻的细胞状态以及当前输入的信息而组成, 且是经过了遗忘门和输入门的处理。
数学表示为:
C_t = forget_gate * C_{t-1} + input_gate * C_t'当中, C_t为当前时刻的细胞状态, C_{t - 1}是前一时刻的细胞状态, C_t'是依据当前输入以及输入门所产生的候选细胞状态, 它的计算方式一般涵盖当前输入与前一时刻隐藏状态的加权和。
凭借这样的形式, 细胞现况能够携带着从序列起始一直到当下时刻的所有信息, 然而, 遗忘门与输入门一同决定着信息的更新样式。
4.2.2 输出门的调节功能
LSTM的单元状态更新进程里, 负责调控最终输出隐藏状态的是输出门, 其作用是, 依据当下输入信息与更新后的细胞状态, 判定哪些信息要传递至下一个时间步, 还要决定最终输出到网络其他部位的信息。
输出门的计算公式为:
output_gate = sigmoid(Wxo * x_t + Who * h_{t-1} + b_o)其中, Wxo是当前输入x_t对输出门的权重, Who是先前隐藏状态h_{t-1}对输出门的权重, b_o是输出门的偏置项。
使得LSTM能够借助输出门, 有选择性地输出那般重要的信息, 并且隐藏状态h_t会当作网络的输出, 传递至下一个时间步或者送往最终输出, 输出门对隐藏状态予以了确保, 使其不但包含短期信息, 而且还涵盖经过恰当过滤的长期信息。
在实际开展操作期间, 输出门借助调节信息流量的阀门, 达成这样的效果, 网络一方面维持信息的完整性以及可预测性, 另一方面还能够抑制噪音以及不相关的信息, 自此提高了模型对于长期依赖关系的敏感度, 还有预测精度。
5. LSTM时间序列数据预处理步骤
深度学习以及机器学习里, 数据预处理属于极为关键的步骤, 它会直接对模型的性能以及准确性产生影响。就LSTM模型来讲, 时间序列数据的预处理特别重要, 这是由于LSTM对于输入数据的格式还有质量有着严格要求。在本章之中, 我们会详细介绍时间序列数据预处理的步骤, 其中涵盖数据清洗、特征选择、数据标准化以及分割等关键环节。
5.1 数据清洗和特征选择
噪声、异常值与缺失值, 常常会包含之于其中, 于时间序列的数据那里, 这类状况皆有可能对上后续模型所具有学习效果以及所能拥有的预测能力施展作用呢 , 正是因此这般情景, 用于整理加工数据的伊始步骤被看成数据清洗呀。
5.1.1 缺失值处理
一种在时间序列数据里常常出现的问题是缺失值, 其出现可能是因数据记录不完整, 或者是传感器故障等缘由所导致的。处理缺失值的办法有理清含有缺失值的数据点, 运用均值或者中位数去填充, 以及借助插值的方式。究竟挑选哪种办法, 这取决于数据所具备的特性以及缺失的程度。
比如, 针对时间序列数据而言, 我们能够采用前向填充(fill)这种方式, 或者后向填充(fill)这种办法, 来填补缺失的值, 也能够运用线性插值(), 或者三次样条插值(cubic), 来估算缺失的值。
5.1.2 特征工程与提取
机器学习里, 特征工程是能提升模型性能的重要手段当中的一个, 其内容涵盖从原始数据造出有用的新特征, 还有挑选那些对预测任务最具价值的特征, 从原始数据造出那些, 有用之处的新特征, 其中包括时间序列分析里, 特征工程也许需要就提取有关时间窗口。季节性成分。趋势成分之类的东西, 等等。
举例来说, 我们能够借助计算移动平均或者移动标准差的方式, 去构造出新的特征, 又或者运用傅里叶变换来提取周期性特征。针对于季节性成分而言, 可以采用季节性差分的方法来消除季节性影响。
5.2 数据标准化和分割
确保输入数据处于相同尺度, 这是数据标准化的目的所在, 而这对模型更快收敛有帮助。在时间序列预测里, 数据标准化存在其特殊性, 因为时间序列数据点之间常常具备时间相关性。
5.2.1 数据归一化技术
把数据缩放到一个标准范围之内, 这一行为被称作数据归一化, 此标准范围往往就是一个区间。针对于LSTM模型而言, 我们平常所运用的办法是最大最小归一化, 也就是min-max , 又或者是z-score标准化。
最大最小归一化公式为:
$x_{\text{norm}}$等于, 用$(x - x_{\text{min}})$, 除以$(x_{\text{max}} - x_{\text{min}})$。
当中, ( x ) 属于原始数据点, ( x_{\text{min}} ) 乃数据集中最小值, ( x_{\text{max}} ) 为数据集中最大值。
5.2.2 训练集与测试集的划分
将机器学习项目里的数据集划分成训练集与测试集, 这是我们通常会做的, 在时间序列分析期间, 数据的顺序是不能被破坏的, 所以, 我们不能像处理其他类型数据那样去随机划分那个数据集, 通常这时, 我们会吧早期当中的数据拿来当作训练集的那些数, 而再把最新的数据当成测试集的那样数。
假定, 要是我们正着手于创建一个借助过去10天数据去预估未来一日的LSTM模型, 那么我们大概会采用前100天的数据当作训练集, 并且将紧随其后的20天数据用作测试集。
import numpy as np # 示例代码:进行最大最小归一化 def min_max_normalization(data): min_val = np.min(data) max_val = np.max(data) return (data - min_val) / (max_val - min_val) # 示例数据 data = np.array([100, 200, 300, 400, 500]) normalized_data = min_max_normalization(data) print("归一化后的数据:", normalized_data)在前面说的那段代码里, 最起始的时候, 我们给弄出了一个归一化函数n , 这个函数它会接收一个数据方面的数组, 之后返回经过归一化操作后的数组。接下来, 我们凭借这个函数针对示例当中的数据开展了归一化的相关处理, 随后还把结果给打印出来了。
于实际运用方面, 我们会针对整个时间序列数据集去施行这一方法, 为的是让数据处于同样的尺度之中, 没问题吧?
上述步骤呈现出了LSTM时间序列数据预处理的关键要点, 给我们搭建以及训练LSTM模型奠定了稳固的基础。紧接着, 我们会持续探究怎样去构建LSTM模型以及其架构的界定。
6. 构建LSTM模型, 定义其架构, 6.1部分是对LSTM网络进行搭建。
拥有学习长期依赖信息能力的长短期记忆网络, 也就是LSTM, 属于一种特别的循环神经网络即RNN。若要构建一个有效的LSTM模型, 首先得定义网络架构,这可是预测任务成功的关键部分。
6.1.1 LSTM层的初始化
在搭建LSTM模型期间, 咱首要得去导入库, 还有Keras模块里的模型跟LSTM层。下面是个简易的初始化LSTM层情形:
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM # 定义一个序列模型 model = Sequential() # 添加一个LSTM层,假设输入数据的维度为64 model.add(LSTM(units=50, return_sequences=False, input_shape=(None, 64))) # 模型输出层可使用全连接层 model.add(Dense(units=1))在这个例子里头, units等于50, 此数量代表着LSTM单元的个数数目, 等于False, 这意味着只有最后那一个LSTM单元的输出会被运用到后续的层次之中从而进行使用表示, 等于(None且64), 这去定义了输入数据的那种形状模样, 当中None代表了批次大小这个是可变的不确定的,64是特征数目数量的多少。
6.1.2 模型的堆叠与连接
时间序列预测里, 常常得堆叠好些个LSTM层, 目的是去提取更深一层的特征, 接下来是添加两个LSTM层并入行堆叠这件事的代码示例。
from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(None, 64))) model.add(LSTM(units=50, return_sequences=False)) # 添加输出层,这里使用一个单元来预测一个连续值 model.add(Dense(units=1))于此处, =True这一情况表示的是, 第一层LSTM会把整个序列返还给下一层, 并非仅仅是序列的最后那个输出, 诸多层LSTM进行堆叠能够助力模型去捕捉序列数据里的复杂模式。
6.2 LSTM模型参数配置
准确布置LSTM模型的参数, 乃是训练一款高性能模型的要点所在。模型参数涵盖优化器, 蕴含损失函数, 还包含超参数等。
6.2.1 选择优化器和损失函数
模型构建完后, 紧接着得要进行模型编译工作, 此环节会去设定优化器以及损失函数。在时间序列预测范畴里, 经常被使用的损失函数是均方误差也就是MSE。
model.compile(optimizer='adam', loss='mean_squared_error')使用Adam优化器, 也就是一种自适应学习率优化算法, 我们用='adam'来表示, loss=''是优化的目标函数, 它用于衡量预测值与真实值之间的差异。
6.2.2 超参数的调整与优化
像学习率、批次大小、LSTM单元数量、层数这类超参数, 对模型性能有着显著影响, 调整这些参数要依据经验法则、或启发式搜索、或者自动化搜索算法(比如网格搜索或随机搜索)。
下面是一段简易的代码块, 用以展现怎样借由设定回调函数达成超参数的自行调整。
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping checkpoint = ModelCheckpoint('model.h5', save_best_only=True, monitor='val_loss', mode='min') early_stopping = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True) callbacks_list = [checkpoint, early_stopping] # 训练模型时传入回调列表 history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_val, y_val), callbacks=callbacks_list)处于这个例子当中, 存在着用于留存于验证集里展现出最佳表现的模型的情况, 并且, 还有被用于在训练进程之前就终止, 进而防止出现过拟合现象的情况。如此这般的实践能够对我们寻觅到最优的超参数配置起到帮助作用。
简介:本文详细介绍了长短期记忆网络(LSTM)在时间序列预测中的应用,特别是在预测客流量和车流量等短时序列数据上。通过解释LSTM的基本结构和工作原理,展示了如何构建、训练和优化LSTM模型,以提高时间序列预测的准确性。本文还提供了通过实践案例学习LSTM模型构建的完整流程,包括数据预处理、模型架构定义、模型编译训练、预测评估及模型优化等关键步骤。