Python异常检测 - LSTM(长短期记忆网络)

系列文章目录

Python异常检测- Isolation Forest(孤立森林)
python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)
python异常检测-局部异常因子(LOF)算法
Python异常检测- DBSCAN
Python异常检测- 单类支持向量机(One-Class SVM)
Python异常检测-3Sigma
Python异常检测-K最近邻算法(KNN)
Python异常检测-主成分分析(PCA)
python异常检测-ARIMA(自回归积分滑动平均模型)
Python异常监测- 包络线


文章目录

  • 系列文章目录
  • 前言
  • 一、 LSTM(长短期记忆网络)
    • 1.1 记忆单元
    • 1.2 遗忘门
    • 1.3 输入门
    • 1.4 输出门
  • 二、LSMT的优缺点
  • 三、LSTM的应用场景
  • 四、python的实现
    • 4.1. 数据准备
    • 4.2. 构建 LSTM 模型
    • 4.3. 训练模型
    • 4.4. 异常检测
    • 4.5. 结果分析


前言

在时间序列分析中,异常值检测是一个重要的任务,它可以帮助我们发现数据中的异常情况,比如突发的异常波动、异常值等。

一、 LSTM(长短期记忆网络)

RNN:RNN(Recurrent Neural Network)循环神经网络,RNN 的神经网络单元不但与输入和输出存在联系,而且自身也存在一个循环 / 回路 / 环路 / 回环 (loop)。这种回路允许信息从网络中的一步传递到下一步。因此RNN中,上一个时刻的网络状态将会作用于到下一个时刻的网络状态,同时这也表明 RNN 和序列数据密切相关。
参考文献中,对RNN的展开和收起有一个简单的图示:
在这里插入图片描述

**梯度消失或梯度爆炸:**在训练过程中,随着网络深度增加,梯度会逐渐减小至零(梯度消失)或无限增大(梯度爆炸),导致网络难以训练。

LSTM,全称为Long Short-Term Memory(长短期记忆网络),是一种特殊的循环神经网络(Recurrent Neural Network, RNN)。LSTM最初由Hochreiter和Schmidhuber于1997年提出,主要是为了解决传统RNN在处理长序列数据时遇到的梯度消失或梯度爆炸问题。

下图一和图二是关于经典RNN结构与LSTM结构对比图,从结构上,可以看出,LSTM是一种特殊的RNN,两者的区别在于普通的RNN单个循环结构内部只有一个状态。而LSTM的单个循环结构(又称为细胞)内部有四个状态。
RNN结构
图一: RNN结构
LSTM结构
图二: LSTM结构

通过结构图的对比,可以看出LSTM单元要复杂许多。每个LSTM单元中包含了4个交互的网络层,这个四层结构的网络层主要包括如下内容:

  • 记忆单元(Memory Cell):记忆单元是LSTM的核心部分,它能够存储信息,并通过门控机制来控制信息的流入、流出以及保持。
  • 遗忘门(Forget Gate):遗忘门决定上一时刻的单元状态有多少需要保留到当前时刻。
  • 输入门(Input Gate):输入门决定当前时刻网络的输入数据有多少需要保存到单元状态。
  • 输出门(Output Gate):输出门决定了控制当前单元状态有多少需要输出到当前的输出值。

1.1 记忆单元

记忆细胞提供了记忆的功能,在网络结构加深时仍能传递前后层的网络信息。参考文件中给出了下图,示例是最简单的模式,采用的是函数只有两个sigmod 和tanh神经网络层。其中红色部分就是记忆单元的表示,输入数据在结合遗忘门,输入门数据后进行相应的输出。
在这里插入图片描述

1.2 遗忘门

遗忘门的作用是要决定从记忆细胞c中是否丢弃某些信息,即at-1中有多少信息进行保留。参考文件中的图片很清晰的表明其在单元中的位置,基于上图的示例,可以通过一个 Sigmoid函数来进行处理。
在这里插入图片描述

1.3 输入门

输入门的作用就是往状态信息中添加新东西,输入门包含记忆细胞候选值和更新门两个元素,同时使用了两个神经元函数。参考文件中对其位置的说明如下图。

在这里插入图片描述

1.4 输出门

输出门是输出的记忆,也就是前面的积累。首先,通过 tanh 进行记忆单元的输出进行处理,它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分,最后通过运行一个 softmax 层来过滤后,确定细胞状态的哪个部分将输出出去。
在这里插入图片描述

二、LSMT的优缺点

通义千问对LSTM的优缺点的总结信息如下:
优点

  • 解决长期依赖问题:LSTM通过其独特的结构设计,特别是输入门、遗忘门和输出门的设计,能够有效地捕捉长时间间隔的信息依赖关系,这是标准RNN难以做到的。

  • 防止梯度消失/爆炸:由于LSTM内部状态的传递方式,它能够在训练过程中较好地保持梯度的稳定,从而避免了梯度消失或梯度爆炸的问题。

  • 灵活的模型能力:LSTM可以适应多种类型的序列数据,包括但不限于自然语言处理、语音识别、时间序列预测等领域。

  • 并行计算能力:虽然LSTM本质上是一个序列模型,但是它可以通过一些技巧实现一定程度上的并行化计算,提高训练效率。

缺点

  • 计算成本高:相比于简单的RNN模型,LSTM的参数量更多,因此在训练和推理时需要更多的计算资源和时间。

  • 过拟合风险:由于LSTM具有较强的表达能力,如果数据集较小或正则化手段不当,容易发生过拟合现象。

  • 调参复杂:LSTM中存在多个超参数需要调整,如学习率、隐藏层单元数、层数等,这使得模型调优变得更加困难。

  • 解释性较差:尽管LSTM在很多任务上表现优秀,但它属于黑盒模型,内部的工作机制对于非专业人士来说难以理解,这限制了其在某些需要高度可解释性的领域的应用。

三、LSTM的应用场景

LSTM作为一种先进的深度学习模型,其在多个领域的应用都展现了其强大的数据处理能力和灵活性,其主要应用场景包括:

  • 自然语言处理(NLP):LSTM在文本生成、机器翻译、语音识别等领域表现突出。例如,Google翻译使用的就是基于LSTM的模型[1]。
  • 时间序列预测:LSTM能够捕捉时间序列中的时间依赖性,适用于股票价格预测、天气预测等场景。
  • 视频分析:在视频内容分析和动作识别中,LSTM可以有效地处理视频帧之间的时序关系。
  • 生物信息学:在DNA序列分析、蛋白质结构预测等生物信息学领域,LSTM也显示出了强大的能力。
  • 音乐创作:LSTM被用于生成音乐和作曲,能够学习音乐的风格并进行创作。
  • 机器人技术:在机器人路径规划和控制系统中,LSTM可以帮助机器人更好地理解和预测环境变化。
  • 游戏AI:在电子游戏中,LSTM可以用来开发更智能的NPC对手或队友。

随着技术的不断进步,LSTM在未来的应用前景将更加广阔。

四、python的实现

4.1. 数据准备

首先,需要准备你的时序数据。通常,这包括数据的收集、清洗和预处理。对于异常检测任务,你可能需要将原始数据转换为监督学习问题的形式,即创建输入-输出对。
本实例通过从csv中读取两列数据的方案来实现。

import pandas as pd
from sklearn.preprocessing import MinMaxScaler# 加载数据
data = pd.read_csv('your_data.csv')# 选择特征列
features = data[['feature1', 'feature2']]# 数据归一化
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_features = scaler.fit_transform(features)# 创建数据集
def create_dataset(data, time_step=1):X, Y = [], []for i in range(len(data)-time_step-1):a = data[i:(i+time_step), 0]X.append(a)Y.append(data[i + time_step, 0])return np.array(X), np.array(Y)time_step = 60  # 可以根据具体需求调整
X, y = create_dataset(scaled_features, time_step)

4.2. 构建 LSTM 模型

接下来,构建一个简单的 LSTM 模型来学习时序数据中的模式。

from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropoutmodel = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, scaled_features.shape[1])))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(1))model.compile(optimizer='adam', loss='mean_squared_error')

4.3. 训练模型

使用训练集数据训练模型。为了防止过拟合,可以设置验证集来监控模型在未见过的数据上的表现。

history = model.fit(X, y, epochs=100, batch_size=64, validation_split=0.1, verbose=1)

4.4. 异常检测

训练完成后,可以通过计算预测值与实际值之间的误差来进行异常检测。较大的误差可能指示异常点。

# 使用模型预测
train_predict = model.predict(X)# 反向转换预测值
train_predict = scaler.inverse_transform(train_predict)
y_true = scaler.inverse_transform(y.reshape(-1, 1))# 计算误差
errors = np.abs(y_true - train_predict)# 定义阈值来判断是否为异常
threshold = np.percentile(errors, 99.75)  # 例如,选择99.75%(3个标准差)分位数作为阈值
anomalies = errors > threshold

4.5. 结果分析

最后,你可以通过可视化或其他方法来检查哪些数据点被认为是异常的。

import matplotlib.pyplot as pltplt.figure(figsize=(14, 5))
plt.plot(y_true, label='True value')
plt.plot(train_predict, label='Predicted value')
plt.scatter(np.where(anomalies)[0], y_true[anomalies], c='r', label='Anomaly')
plt.legend()
plt.show()

参考
Python LSTM时间序列异常值检测
深入理解LSTM
最简单的LSTM讲解,多图展示,源码实践,建议收藏
神经网络 | CNN 与 RNN——深度学习主力军

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python毕业设计选题:基于django+vue的论坛BBS系统

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 公告信息管理 帖子信息管理 签到积分管理 系统…

moffee模型部署教程

一、介绍 moffee 是一个开源幻灯片制作工具,可以将 markdown 文档转换为干净、专业的幻灯片。 moffee 处理布局、分页和样式 ,因此您可以专注于您的内容。需要学习的内容很少 。moffee 使用简单的语法来根据您的喜好安排和设计内容。实时网络界面会在您…

MyBatis学习笔记(一)

一、介绍 (一)什么是框架及优势 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。…

【MySQL系列】字符集设置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

白杨SEO:百度在降低个人备案类网站搜索关键词排名和流量?怎样应对?【参考】

很久没有写百度或者网站这块内容了,一是因为做百度网站朋友越来越少,不管是个人还是企业;二是百度上用户搜索与百度给到网站的流量都越来越少。 为什么想到今天又来写这个呢?因为上个月有个朋友来咨询我说网站百度排名全没了&…

Edge浏览器打开PDF无法显示电子签章

Edge浏览器打开PDF无法显示电子签章 直接说处理方式 直接说处理方式 浏览器地址栏,输入 edge://flags/搜索:pdf禁用:New PDF Viewer效果如下

2024年【汽车修理工(高级)】考试总结及汽车修理工(高级)试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 汽车修理工(高级)考试总结是安全生产模拟考试一点通总题库中生成的一套汽车修理工(高级)试题及解析,安全生产模拟考试一点通上汽车修理工(高级&a…

Redis内存管理——针对实习面试

目录 Redis内存管理Redis的内存淘汰机制有哪些?说说过期的数据的删除策略?Redis是如何判断数据是否过期的?Redis如何处理大Key问题? Redis内存管理 Redis的内存淘汰机制有哪些? Redis的内存淘汰机制主要包括以下几种策略: noev…

2024年中国工业大模型行业发展研究报告|附43页PDF文件下载

工业大模型伴随着大模型技术的发展,逐渐渗透至工业,处于萌芽阶段。 就大模型的本质而言,是由一系列参数化的数学函数组成的计算系统,且是一个概率模型,其工作机制是基于概率和统计推动进行的,而非真正的理解…

hhdb数据库介绍(2-1)

数据库基础服务 HHDB Server支持MySQL原生通讯协议,支持数据定义、数据操作、分区表、数据库管理语句、事务、锁、字符集与校对集等常用数据库基础服务。其中在数据操作中解决了跨库查询和跨库数据排序等难点问题。并支持强一致事务与跨库死锁检测。 数据定义 支…

道品科技的水肥一体化智能灌溉:开启现代农业的创新征程

水肥一体化智能灌溉作为一种现代农业技术,其通过对水分与养分供应的有效整合,致力于营造作物的最佳生长环境。此项技术的核心要义在于凭借智能化系统精准把控灌溉与施肥的流程,进而提升水资源的利用效率,降低肥料的浪费程度&#…

微信小程序开发,诗词鉴赏app,诗词搜索实现(三)

微信小程序开发,诗词鉴赏app(一): https://blog.csdn.net/jky_yihuangxing/article/details/143501681微信小程序开发,诗词鉴赏app,诗词推荐实现(二):https://blog.csdn.net/jky_yih…

【前端】JavaScript 方法速查大全-函数、正则、格式化、转换、进制、 XSS 转义(四)

🔥 前言 在现代前端开发中,JavaScript 是不可或缺的语言。无论是处理数据、操作 DOM,还是进行复杂的逻辑运算,掌握 JavaScript 的各种方法都是每位开发者的必修课。本文将为您提供一个全面、系统的 JavaScript 方法参考&#xff…

C语言void *特殊的指针类型:使用

一: 1通用指针类型 void * 表示无类型指针,它可以指向任何类型的数据对象。与其他具体类型的指针(如 int *、char * 等)不同,void * 指针不指向特定类型的数据,因此在使用时需要进行适当的类型转换。 2…

浅谈风力发电并网系统的控制和优化策略

0引言 风能作为一种可再生资源,以其低污染和巨大储量的优势备受青睐。近年来,随着绿色发展战略的持续推进,我国在风力发电技术领域取得了显著成就。风力发电的总装机容量和并网规模持续增长,为农业生产和居民生活提供了丰富的电力…

对想从事大模型领域的技术开发者的建议或看法

“ 学习技术之前,我们首先要搞明白的是我们想要什么,想做什么,而不是稀里糊涂的去学习技术**”** 大模型技术作为目前比较火的技术之一,有很多技术人员想从事大模型方面的开发,但又不知道该怎么入手,应该学…

433、315通信、ev1527、2262编码

目录 ASK介绍EV1527编码芯片介绍模块介绍无线发射芯片无线接收芯片解码程序发射电路原理图 ASK介绍 ASK是幅移键控,通过调幅将数据发送出去,所以发送与接收都是多位二进制数。 ASK如何区分0和1? 0:发送 433.92Mhz 无线波形&…

面向生成式 AI 的向量数据库:架构,性能与未来趋势

导读 向量数据库是高效处理和准确检索高维数据的基石,对于生成式 AI 技术而言至关重要。本文将分享向量数据库的架构设计和实现中的关键点。 主要分为五个方面: 向量数据库背景介绍 Milvus 整体架构设计 性能的关键-索引 面向 AI 持续进化 01 向量…

vulhub之zabbix

zabbix是一款服务器监控软件,其由server、agent、web等模块组成,其中web模块由PHP编写,用来显示数据库中的结果。能够监控各种网络参数以及服务器健康性和完整性。 zabbix的详细介绍: https://blog.csdn.net/wt334502157/article/details/117994107 zabbix latest.php S…

介绍一下如何生成随机数(c基础)

适合对象 c语言初学者 总结语言用色&#xff0c;个人强调用红色&#xff0c;注意为易错点&#xff0c;若有问题请告诉我谢谢。(建议通过目录观看)。一定要自己动手打代码。 rand函数 是生成随机数的函数&#xff0c;但实则是伪随机数。(即是同一个值) 格式 #include<st…