# 基于LSTM的异常检测
## Introduction(简介)
这是AIOps的一个[异常检测竞赛项目](http://iops.ai)。
### Datasets(数据集)
数据集是从5个互联网公司收集的26个KPIs,分为有标记的训练集(data/train.csv)和无标记的测试集(data/test.csv)。
![image](./img/data.png)
几个KPI的示意图
![image](./img/kpi_1.png)
![image](./img/kpi_2.png)
![image](./img/kpi_3.png)
### Evaluation Metric(评估算法)
如果在规定时间内检测出异常点,则这整个区间都算作被你检测出来。否则,这个区间都算作没被检测出来。最后是在测试集上的f_score进行评测。
![image](./img/metric.png)
|Name|Description|
|:-:|:-:|
|preprocessing.py|使用线性插值填充missing points|
|lstm_train.py|基于LSTM的预测算法(训练)|
|predict.py|基于模型进行预测|
## Dependencies(环境依赖)
|Name|Version|
|:-:|:-:|
|python|3.6.6|
|tensorflow|>=1.10.0|
|keras|>=2.2.2|
## Model(模型)
采用的模型很简单,使用的是双层LSTM(没有尝试三层,因为训练时间直接double...)。
输入是当前时间点的前120(2小时)个点所构成的sliding window, 输出是next sliding window(即向后滑动一步),也可以输出当前时间点。
即120 -> 120 或 120 -> 1。
|Parameter|Name|
|:-:|:-:|
|batch size|128|
|dropout|0.2|
|optimizer|Adam|
|classifier|Softmax|
评估是针对验证集上的f_score进行评估。将有异常的数据平均分为2份,保证验证集上也有一定数量的异常点。
而对于一些异常点非常少的KPI,在实验过程中发现,其验证集上的f_score始终为0。
于是我们重写loss函数,针对其FN(漏报)的部分进行惩罚(penalty)。如果在验证集上,FN很多,则相应的loss也会很大。
这样可以迫使模型尽可能的检测出异常点。
## Result(结果)
最后取得的f_score是0.746,相比于第一名少了0.02。
![image](./img/score.png)
有几个部分是可以改进的(第一名的小组采用的方法)
1. post-processing: 输出的结果可以针对Evaluation Metric进行优化,比如一连串anomalies,只选择几个点,从而可以降低FP(误报率)。
2. over sampling: 简单的重复anomaly的部分,使得异常点和正常点达到1:1的比例。(本来是打算采用这个方法的,好像在看到哪里看到说这种方法不太好...后来就采用FN penalty的方法了)
没有合适的资源?快使用搜索试试~ 我知道了~
基于LSTM的异常检测.zip
共14个文件
png:6个
csv:4个
py:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 106 浏览量
2024-05-22
18:39:31
上传
评论
收藏 56.41MB ZIP 举报
温馨提示
基于LSTM的异常检测LSTM (Long Short-Term Memory) 是一种特殊的循环神经网络(RNN)架构,用于处理具有长期依赖关系的序列数据。传统的RNN在处理长序列时往往会遇到梯度消失或梯度爆炸的问题,导致无法有效地捕捉长期依赖。LSTM通过引入门控机制(Gating Mechanism)和记忆单元(Memory Cell)来克服这些问题。 以下是LSTM的基本结构和主要组件: 记忆单元(Memory Cell):记忆单元是LSTM的核心,用于存储长期信息。它像一个传送带一样,在整个链上运行,只有一些小的线性交互。信息很容易地在其上保持不变。 输入门(Input Gate):输入门决定了哪些新的信息会被加入到记忆单元中。它由当前时刻的输入和上一时刻的隐藏状态共同决定。 遗忘门(Forget Gate):遗忘门决定了哪些信息会从记忆单元中被丢弃或遗忘。它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 输出门(Output Gate):输出门决定了哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。同样地,它也由当前时刻的输入和上一时刻的隐藏状态共同决定。 LSTM的计算过程可以大致描述为: 通过遗忘门决定从记忆单元中丢弃哪些信息。 通过输入门决定哪些新的信息会被加入到记忆单元中。 更新记忆单元的状态。 通过输出门决定哪些信息会从记忆单元中输出到当前时刻的隐藏状态中。 由于LSTM能够有效地处理长期依赖关系,它在许多序列建模任务中都取得了很好的效果,如语音识别、文本生成、机器翻译、时序预测等。
资源推荐
资源详情
资源评论
收起资源包目录
基于LSTM的异常检测.zip (14个子文件)
content
data
train_interpolate.csv 99.5MB
test_interpolate.csv 95.1MB
train.csv 94.74MB
test.csv 85.33MB
predict.py 4KB
preprocessing.py 5KB
img
kpi_1.png 180KB
kpi_3.png 533KB
data.png 97KB
metric.png 142KB
score.png 92KB
kpi_2.png 438KB
lstm_train.py 8KB
README.md 2KB
共 14 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3828
- 资源: 5775
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功