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.mzph.cn/web/58271.shtml

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

相关文章

常见Transformer位置编码

文章目录 概述绝对位置编码相对位置编码T5 BiasALiBiRoPE 参考资料 概述 相对于RNN这样的序列模型来说,Transformer可并行是一个很大的优势,但可并行性带来一个问题,由于不是从前到后,所以模型对于位置信息是不敏感的。于是在Tra…

【IEEE出版 | EI稳定检索】2024智能机器人与自动控制国际学术会议 (IRAC 2024,11月29-12月1日)

2024智能机器人与自动控制国际学术会议 (IRAC 2024) 2024 International Conference on Intelligent Robotics and Automatic Control 官方信息 会议官网:www.icirac.org 2024 International Conference on Intelligent Robotics and Autom…

Golang | Leetcode Golang题解之第535题TinyURL的加密与解密

题目: 题解: import "math/rand"type Codec map[int]stringfunc Constructor() Codec {return Codec{} }func (c Codec) encode(longUrl string) string {for {key : rand.Int()if c[key] "" {c[key] longUrlreturn "http:/…

影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台

影响神经网络速度的四个主要因素分别是 FLOPs(浮点操作数)、MAC(内存访问成本)、并行度以及计算平台。这些因素共同作用,直接影响到神经网络的计算速度和资源需求。 1. FLOPs(Floating Point Operations&a…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十六章 C++入门

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统

前言 现在已经学习了很多与Java相关的知识,但是迟迟没有进行一个完整的实践(之前这个项目开发到一半,很多东西没学搁置了,同时原先的项目中也有很多的问题),所以现在准备从零开始做一个基于SpringBootVue的…

基于Matlab的语音识别

一、引言 语音识别技术是让计算机识别一些语音信号,并把语音信号转换成相应的文本或者命令的一种高科技技术。语音识别技术所涉及的领域非常广泛,包括信号处理、模式识别、人工智能等技术。近年来已经从实验室开始走向市场,渗透到家电、通信…

如何在 IntelliJ IDEA 中调整 `Ctrl+/` 快捷键生成注释的位置

前言 在使用 IntelliJ IDEA 编写代码时,注释是代码可读性和维护性的重要组成部分。IDEA 提供了快捷键 Ctrl/ 用于快速生成单行注释。然而,默认情况下,使用此快捷键生成的注释会出现在行首,导致注释与代码之间存在较大的空格&…

源鲁杯 2024 web(部分)

[Round 1] Disal F12查看: f1ag_is_here.php 又F12可以发现图片提到了robots 访问robots.txt 得到flag.php<?php show_source(__FILE__); include("flag_is_so_beautiful.php"); $a$_POST[a]; $keypreg_match(/[a-zA-Z]{6}/,$a); $b$_REQUEST[b];if($a>99999…

使用 ADB 在某个特定时间点点击 Android 设备上的某个按钮

前提条件 安装 ADB&#xff1a;确保你已经在计算机上安装了 Android SDK&#xff08;或单独的 ADB&#xff09;。并将其添加到系统环境变量中&#xff0c;以便你可以在命令行中运行 adb。 USB调试&#xff1a;确保 Android 设备已启用 USB 调试模式。这可以在设备的“设置” -…

数据库的使用02:SQLServer的连接字符串、备份、还原、SQL监视相关设置

目录 一、连接字符串 【本地连接字符串】 【远程连接字符串】 二、备份 三、还原 &#xff08;1&#xff09;还原数据库-bak、btn文件 &#xff08;2&#xff09;附加数据库mdf文件 四、SQL监视器的使用 一、连接字符串 【本地连接字符串】 server DESKTOP-FTH2P3S; Da…

Oracle视频基础1.3.6练习

1.3.6 以下是您的需求清单&#xff08;不含解决方案&#xff09;&#xff1a; 检查数据库启动情况等待会话结束&#xff0c;进行正常关机等待事务全部提交后再关机查看 alert 日志文件查看后台跟踪文件查看用户跟踪文件 检查数据库启动情况 ps -ef | grep oracle ipcs clear…

【大数据学习 | HBASE】hbase的原理与组成结构

1. hbase的简述 hbase作为google的大数据三篇比较重要的论文之一&#xff0c;它的起源叫做bigtable&#xff0c;意思非常简单就是大表的意思&#xff0c;是一个分布式存储很多数据的大型表格系统&#xff0c;它是对于hdfs中的数据不能直观查询和随机读写的病痛的一个补充和完善…

苍穹外卖Bug集合

初始化后端项目运行出现以下问题 以上报错是因为maven和jdk版本不符合&#xff0c;需要将jdk改成17&#xff0c;mavne改成3.9.9

【C++篇】在秩序与混沌的交响乐中: STL之map容器的哲学探寻

文章目录 C map 容器详解&#xff1a;高效存储与快速查找前言第一章&#xff1a;C map 的概念1.1 map 的定义1.2 map 的特点 第二章&#xff1a;map 的构造方法2.1 常见构造函数2.1.1 示例&#xff1a;不同构造方法 2.2 相关文档 第三章&#xff1a;map 的常用操作3.1 插入操作…

太空旅游:科技能否让星辰大海变为现实?

内容概要 在这个快速变化的时代&#xff0c;太空旅游成为了一个让人热血沸腾的话题。想象一下&#xff0c;坐在一颗漂浮的太空舱里&#xff0c;手中端着饮料&#xff0c;眺望着无尽的星辰大海&#xff0c;简直就像科幻电影中的情节一样。不过&#xff0c;这不仅仅是一个空洞的…

程序中怎样用最简单方法实现写excel文档

很多开发语言都能找到excel文档读写的库&#xff0c;但是在资源极其受限的环境下开发&#xff0c;引入这些库会带来兼容性问题。因为一个小功能引入一堆库&#xff0c;我始终觉得划不来。看到有项目引用的jar包有一百多个&#xff0c;看着头麻&#xff0c;根本搞不清谁依赖谁。…

【春秋云镜】CVE-2023-23752

目录 CVE-2023-23752漏洞细节漏洞利用示例修复建议 春秋云镜&#xff1a;解法一&#xff1a;解法二&#xff1a; CVE-2023-23752 是一个影响 Joomla CMS 的未授权路径遍历漏洞。该漏洞出现在 Joomla 4.0.0 至 4.2.7 版本中&#xff0c;允许未经认证的远程攻击者通过特定 API 端…

解决虚拟机启动报:此主机支持AMD-V,但AMD-V处于禁用状态

首先要知道你自己使用的主板型号&#xff0c;如果是京东购买的&#xff0c;可以直接上京东去问客服。如果没有订单号&#xff0c;如果能提供正确的主板型号&#xff0c;他们应该也是会帮忙解答的。 您好&#xff0c;AMD 平台与 Intel 平台以及部分新老主板开启虚拟化的步骤和细…

【EI会议推荐】抢先掌握学术前沿!快来参加EI学术会议投稿,展示你的研究成果,开启科研新高度!

【EI会议推荐】抢先掌握学术前沿&#xff01;快来参加EI学术会议投稿&#xff0c;展示你的研究成果&#xff0c;开启科研新高度&#xff01; 【EI会议推荐】抢先掌握学术前沿&#xff01;快来参加EI学术会议投稿&#xff0c;展示你的研究成果&#xff0c;开启科研新高度&#…