![ec6385cb39cddba7a32a15f33a6b4ecc.png](https://i-blog.csdnimg.cn/blog_migrate/d0eeb6edc5680dbb66ab60fdc2742adb.jpeg)
异常检测(Anomaly Detection)是各行业中都有一定应用场景的研究方向,从客户流量、资金交易到控制系统、电磁信号检测等。在方法层面,主要是无监督算法;在数据层面,可以分为:截面数据、时间序列数据两种。
目录:
一、无监督算法
1.1 基于密度、距离的异常度量
1.1.1 K-means
1.1.2 DBSCAN
1.1.3 LOF
1.2 自编码器(降维→升维)
1.2.1 线性-PCA
1.2.2 非线性-神经网络
1.3 孤立森林(Isolation Forest)
二、时间序列的拓展方法
2.1 频域分析
2.1.1 快速傅里叶变换
2.1.2 小波变换
2.1.3 EMD经验模态分解
2.2 时间序列的相似性度量
2.2.1 余弦相似度、pearson相关系数、欧氏距离
2.2.2 动态规划-DTW(Dynamic Time Warping)
三、Python的相关package
3.1 PyOD(20余种算法集合)
3.2 scipy信号处理部分
3.3 pyemd(可参考的经验模态分解包)
一、无监督算法
1.1 基于密度、距离的异常度量
1.1.1 K-means(基于距离的聚类算法)
算法步骤:
- 从数据集中随机挑选K个样本点作为簇(cluster)的中心;
- 对数据中的所有点求到这K个簇心的距离,假如点Pi离簇心Si最近,那么Pi属于Si对应的簇;
- 根据每个簇(cluster)的数据,更新簇(cluster)的中心;
- 以下2个步骤重复进行,直至簇心稳定(簇心位置变化前后两次距离和不超过特定值):
>>> 计算每个簇的正常半径(可以理解为“阈值”,阈值以内为正常,阈值之外为异常)
>>> 每个簇中找出大于正常半径的点,即为离群点(outlier)
![e07b78ea6c9c66a6d463687d2065506a.png](https://i-blog.csdnimg.cn/blog_migrate/4594167251dc994e88602ff222d1a64d.png)
K-means的特点:
>>> K即为预先指定的簇心个数,也就是先验的簇类个数;
>>> 基于距离做聚类,须建立在“各簇的样本至某簇的簇心可区分的前提下”;
>>> 若是各簇的样本是非凸的,则k-means难以可靠处理。
1.1.2 DBSCAN(基于密度的聚类算法)
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。
![6f4cf03184c95da3390df5cb22b5e674.png](https://i-blog.csdnimg.cn/blog_migrate/cdc2b7d616cb6ab8704a882ae7fcb750.png)
DBSCAN的一些定义:
伪代码
-------------------------
输入:数据对象集合D,半径Eps,密度阈值MinPts
输出:聚类C
1). 检测数据中尚未检查的对象p,如果p未被处理(归为某个簇或标记为噪声),则依据Eps检查其领域,
若包含的对象数不小于MinPts,建立新簇C,讲其中的所有点加入候选集N;
2).对候选集N中所有尚未被处理的对象q,检查其邻域,若至少包含MinPts个对象,则将这些对象加入N;
如果q未归入任何一个簇,则将q加入C;
3). 重复步骤2),继续检查N中未处理的对象,直至当候选集N为空;
4). 重复步骤1)~3),直到所有对象都归入了某个簇或标记为噪声;
---------------------------
DBSCAN的特点:
>>> 无需像K-means一样预先设定簇类的数量;
>>> 基于“密度”做聚类,可以发现任意形状的簇类;
>>> 难以度量高维数据,且样本集密度不均匀时,聚类质量较差;
1.1.3 LOF(基于密度的聚类算法,可量化异常程度)
局部异常因子(Local Outlier Factor,LOF)算法同样是一个基于密度的聚类算法,并可度量每个点的离异程度,并且根据阈值判定离群点。
这个LOF(离异程度)的大致意思是:
LOF越大于1,则该点所在位置的密度越小于其周围样本所在位置的密度,这个点就越有可能是异常点。
![e5ca4aee5c04c6ba2ddefb279968c585.png](https://i-blog.csdnimg.cn/blog_migrate/bb11a49074bc113dca9026dbb103a941.png)
伪代码:
----------------------
1). 计算样本点p的第k距离
2). 计算p的第k距离领域中的LRD局部可达密度
3). 若点p的LRD局部可达密度较之别的点很低,则可被认定为outlier
1.2 自编码器(降维→升维)
1.2.1 PCA(线性特征提取)
PCA(Principal Components Analysis)主成分分析,是一个极为常用的降维手段;作为一个线性的特征提取器,在异常检测领域,PCA也有较多应用。
![2549250a8f40131379e70cd91fef460d.png](https://i-blog.csdnimg.cn/blog_migrate/97cfa3159947ee487a8550056585a209.jpeg)
两种思路:
>>> 一种是将数据映射到低维(多个主成分PC),然后在各 个PC上查看每个数据点跟其它数据的偏差;
>>> 另一种是数据映射到低维,然后由低维特征空间重 新映射回原空间,分析重构误差的大小;
【两种思路看似不太一样,其实本质上是差不多的】
1.2.2 神经网络自编码器(非线性特征提取)
Auto Encoder(自编码器)由encoder和decoder两个部分组成,输入和输出都是X,相较于PCA,神经网络的非线性表征能力对数据的应用范围更加广阔。
![6024ab74b274e023076e03f8234d18fc.png](https://i-blog.csdnimg.cn/blog_migrate/36e315394a10ee41f586fb7767f97a67.jpeg)
思路:
>>> 通过比较X,X_pred两者的整体误差与局部误差来找到异常点;
1.2 孤立森林(Isolation Forest)
在孤立森林(iForest)中,异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可 以将其理解为分布稀疏且离密度高的群体较远的点。
![956d77c0aced102e5a9a05a8b9e72c3b.png](https://i-blog.csdnimg.cn/blog_migrate/99d71ffb0ed771cd42f8f26d0a90cc34.png)
>>> 递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,
异常点通常具有较短的路。
二、时间序列的拓展方法
2.1 频域分析
对于高频的时间序列,我们可以离开时域(time domain),来到频域(frequency domain)进行一些分析。‘
(受限于自身水平及篇幅,FFT、wavelet transform、EMD等方法仅作粗浅介绍)
2.1.1 快速傅里叶变换
FFT(Fast Fourier Transform)是利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。因为我也没搞清楚FFT降低复杂度、提速的细节,所以这里还是聊聊傅里叶变换吧。
傅里叶级数:任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示,其中正弦函数或余弦函数的频率为周期频率的整数倍。
那么,给定信号f(t),如何求解傅里叶级数中的
经上,我们可以获得信号
傅里叶变换对:
上式中的
![52c5f2f8366bdf78f0e173d3e5a3b99e.png](https://i-blog.csdnimg.cn/blog_migrate/6b4401089536ed611bd2e7bacca20bfc.png)
在异常检测中的应用:
>>> 将信号转为频域层面分析,提取信号的频域特征;
>>> 从频域特征角度分析异常程度;
2.1.2 小波变换
傅里叶变换是一个基于正弦函数、余弦函数的全局变换:获得的是信号全局一维的频域信息,也就是说:当信号本身的频率分布是时变的,傅里叶变换则无法得到时变的频率分布。
小波变换(Wavelet Transform)基于小波基函数(basic function),同时在基函数上进行尺度伸缩、平移,最终可以获得信号的时变频谱图(时频谱)。
常见的基函数
![8b8a156e52ce2c9e8c63c3d1acfa48d9.png](https://i-blog.csdnimg.cn/blog_migrate/8b197989c092861bca1a52816368107a.jpeg)
2.1.3 EMD经验模态分解
EMD(Empirical Mode Decomposition)经验模态分解由NASA的华裔科学家Norden e. Huang博士于1998年提出。
EMD将时间序列的内在不同尺度波动成分按照高频至低频,自适应逐步提取出不同频率的本征模函数(IMF)以及序列的趋势项(trend)。
IMF必须具备如下两个条件:
- 首先,每个IMF分量数据中极值点个数与过零点个数相同或最多相差一个;
- 其次,上下包络线关于时间轴局部对称:即在任意时刻,局部极大值和局部极小值确定的上下包络线的均值为零。
作为一种时间序列分解算法,EMD与傅里叶变换、小波变换等方法相比而言:
- 分解过程不基于预设的任何基函数;
- 依据数据本身的时间尺度特征进行信号分解;
- 可有效处理非平稳及非线性数据;
![914bceec628d24904d0f77468e8ad5f1.png](https://i-blog.csdnimg.cn/blog_migrate/d031416bfb5f59a923db8b7e8880b40e.png)
EMD分解步骤:
- 找出时间序列
所有的极值点;
- 利用三次样条函数拟合
所有的极大值和极小值,得到
的
和
;
- 计算上下包络线的均值,记为
,其满足
;
- 从
中减去
,得到待分解时间序列与两包络线均值的差值,记为
,其满足
;l
- 判断
的性质,如果
满足
为第i个IMF,记为
;如果不满足,则把
记为新的待处理的
,将上述步骤进行重复操作;
- 将剩余的
重复以上5个步骤,然后依次获得第1,2,3·····第n个IMF,直到残差项满足某些停止准则(无法再筛选出新的IMF)。
2.2 时间序列相似性分析
2.2.1 余弦相似度、Pearson相关系数、欧式距离
时间序列可以视为一维的向量,两个向量间的相似性则可以通过下述三种方式度量:
- 余弦相似度
- Pearson相关系数
![f70610a05cc0f8c7fed2be07404a7162.png](https://i-blog.csdnimg.cn/blog_migrate/9aab4337879345c630b48e526450ff12.png)
两式对比,可见皮尔逊相关系数的计算是先对向量每一分量减去分量均值,再求余弦相似度。
这一操作称为中心化。
- 欧氏距离
余弦相似度、Pearson相关系数、欧式距离都要求:两个向量的维度一致(即时间序列的长度相同)。
那么,下面两个问题可以思考一下:
- 两个时间序列长度不同时,如何度量相似度?
- 一个序列是另一个序列平移之后的结果,上述2种方式度量后的结果极大可能是两者不相似;
2.2.2 动态时间归整-DTW(Dynamic Time Warping)
针对上述的问题,动态时间归整(Dynamic Time Warping)应运而生,DTW基于动态规划专门针对序列匹配问题而提出,解决欧氏距离在序列平移后度量失效的问题。
规整(warping)则体现在将:两个长短不一致的序列“规整”对齐。
- 核心思想:通过动态规划来计算两个序列的相似距离,再把相似距离转化为相似度;
![a43b1492626686cca46705802700a847.png](https://i-blog.csdnimg.cn/blog_migrate/c68b0911c8be83f04789161823dbdf7a.png)
![9d734039d9cba180c2656d965c41e0e8.png](https://i-blog.csdnimg.cn/blog_migrate/740f45df88dad5f569e57427f40889bb.png)
三、python的相关package
-------------------------------------未完持续,to be continued