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.rhkb.cn/news/467763.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DolphinDB 与南方科技大学联合授课啦!

11月1日,南方科技大学商学院和 DolphinDB 联合举办了高校课程讲座。讲座由南方科技大学商学院高级研究学者冯鹏举主持,DolphinDB 创始人兼 CEO 周小华博士、某百亿私募数据平台架构师潜蛟老师进行精彩演讲。 Part 1 : 大数据时代下数据库架构革新与生态…

3.PyCharm工具

第三方IDE,集成开发工具,官网下载。 社区版本,免费使用。 创建项目

微信小程序——用户隐私保护指引填写(详细版)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【在Linux世界中追寻伟大的One Piece】poll代码改写

目录 1 -> poll代码改写 1 -> poll代码改写 结合select代码&#xff0c;将select server更改成为pollserver&#xff0c;不是一件困难的事情。 #pragma once#include <iostream> #include <string> #include <poll.h> #include <memory> #inc…

安利一款开源企业级的报表系统SpringReport

SpringReport是一款企业级的报表系统&#xff0c;支持在线设计报表&#xff0c;并绑定动态数据源&#xff0c;无需写代码即可快速生成想要的报表&#xff0c;可以支持excel报表和word报表两种格式&#xff0c;同时还可以支持excel多人协同编辑&#xff0c;后续考虑实现大屏设计…

【11月10日最新】V2.6.1版本植物大战僵尸杂交版分享与下载

&#x1f447;下载链接&#xff1a; 点击下载 更新内容 植物大战僵尸杂交版2.6.1版本的更新内容主要包括以下几个方面&#xff1a; 梦幻联动&#xff1a; 与UP主轻柔北风合作&#xff0c;推出了“植物大战僵尸贴吧版”。联动植物包括石果子与雷蘑菇杂交的雷果子&#xff0c;…

Jenkins找不到maven构建项目

有的可能没有出现maven这个选项 解决办法&#xff1a;需要安装Maven项目插件 输入​Maven Integration plugin​

路过宝安乌石岩庙记

​每周带娃从上屋地铁去罗租大道的七彩城堡儿童乐园玩&#xff0c;路上都会经过乌石岩庙附近。听说香火很繁盛&#xff0c;娃说也想去看看&#xff0c;于是来到了乌石岩庙。 石岩乌石岩庙 广东省深圳市宝安区老街一区94号 ​从百度知悉&#xff1a;乌石岩庙&#xff0c;又称“…

练习LabVIEW第四十四题

学习目标&#xff1a; 计算学生三门课(语文&#xff0c;数学&#xff0c;英语)的平均分&#xff0c;并根据平均分划分成绩等级。要求输出等级A,B,C,D,E。90分以上为A&#xff0c;80&#xff5e;89为B&#xff0c;70&#xff5e;79为C&#xff0c;60&#xff5e;69为D&#xff…

软考高级架构 - 8.1 - 系统质量属性与架构评估 - 超详细讲解+精简总结

第8章 系统质量属性与架构评估 软件系统属性包括功能属性和质量属性&#xff0c;而软件架构重点关注质量属性。 8.1 软件系统质量属性 8.1.1 概述 软件系统的质量反映了其与需求的一致性&#xff0c;即&#xff1a;软件系统的质量高低取决于它是否能满足用户提出的需求&#…

最详细【Elasticsearch】Elasticsearch Java API + Spring Boot集成 实战入门(基础篇)

Elasticsearch Java API Spring Boot集成 实战入门&#xff08;基础篇&#xff09; 一、初始Elasticseach1、什么是Elasticseach2、Elasticsearch生态2、Elasticsearch结构3、Elasticsearch核心概念4、Elasticsearch 实现全文检索的原理 二、Elasticsearch入门1、入门-环境安装…

类文件结构详解

回顾一下字节码 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class 的文件&#xff09;&#xff0c;它不面向任何特定的处理器&#xff0c;只面向虚拟机。Java 语言通过字节码的方式&#xff0c;在一定程度上解决了传统解释型语言执行效率低…

RabbitMQ的应用

七种工作模式介绍 1.Simple(简单模式) P&#xff1a;生产者&#xff0c;也就是要发送信息的程序 C&#xff1a;消费者&#xff0c;消息的接收者 Queue&#xff1a;消息队列。图中黄色背景部分&#xff0c;类似一个邮箱&#xff0c;可以缓存发送信息&#xff1b;生产者向其中…

科研绘图系列:R语言组合堆积图(stacked plot)

文章目录 介绍加载R包数据数据预处理画图1画图2组合图形系统信息介绍 堆积图(Stacked Chart),也称为堆叠图,是一种常用的数据可视化图表,主要用于展示不同类别的数据量在总体中的分布情况。堆积图可以是柱状图、条形图或面积图的形式,其中各个类别的数据量被叠加在一起,…

测试概念以及测试bug

关于测试的概念 什么是需求&#xff1f; 需求分为用户需求和软件需求。 软件需求可以作为开发和测试工作的依据&#xff0c;而用户需求不一定是合理的&#xff0c;这里的不合理有很多的角度&#xff1a;技术角度上&#xff0c;市场需求上&#xff0c;投入成本和收益比噔噔。…

单体架构的 IM 系统设计

先直接抛出业务背景&#xff01; 有一款游戏&#xff0c;日活跃量&#xff08;DAU&#xff09;在两千左右&#xff0c;虽然 DAU 不高&#xff0c;但这两千用户的忠诚度非常高&#xff0c;而且会持续为游戏充值&#xff1b;为了进一步提高用户体验&#xff0c;继续增强用户的忠…

Node.js——fs模块-文件删除

1、在Node.js中&#xff0c;我们可以使用unlink或unlinkSync来删除文件。 2、语法&#xff1a; fs.unlink(path,callback) fs.unlinkSync(path) 参数说明&#xff1a; path 文件路径 callback 操作后的回调函数 本文的分享到此结束&#xff0c;欢迎大家评论区一同讨论学…

Halcon 从XML中读取配置参数

1、XML示例 以下是一个XML配置文件的示例,该文件包含了AOI(自动光学检测)算法的环境参数和相机逻辑参数: <AOI><!--AOI算法参数 20241106--><Env><!--环境参数--><Param name="GPUName" value="NVIDIA GeForce RTX 405…

数据冒险-add x1, x1, x2 add x1, x1, x3 add x1, x1, x4

第一张图没有传递机制 竞争情况分析 读后写&#xff08;RAW&#xff09;竞争&#xff1a;当某条指令需要读取一个寄存器的值&#xff0c;而该寄存器的值尚未被前面的指令写入时&#xff0c;就会发生这种竞争。 指令2&#xff08;dadd r1, r1, r3&#xff09;依赖于指令1&#…

leetcode138:随机链表的复制

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…