python升维方法_异常检测-方法浅扯

本文介绍了Python中用于异常检测的无监督算法,包括基于密度和距离的K-means、DBSCAN、LOF,以及自编码器(PCA、神经网络自编码器)、孤立森林。同时探讨了时间序列分析的频域方法如FFT和小波变换,并提到了动态时间归整(DTW)解决序列匹配问题。
摘要由CSDN通过智能技术生成

ec6385cb39cddba7a32a15f33a6b4ecc.png

异常检测(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
K-Means聚类示意图
K-means的特点:
>>> K即为预先指定的簇心个数,也就是先验的簇类个数;
>>> 基于距离做聚类,须建立在“各簇的样本至某簇的簇心可区分的前提下”;
>>> 若是各簇的样本是非凸的,则k-means难以可靠处理。

1.1.2 DBSCAN(基于密度的聚类算法)

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。

6f4cf03184c95da3390df5cb22b5e674.png
此图中:各簇类的中心是接近的,K-means难以从距离上区分类别

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
LOF样本点的第3邻域示意图

          伪代码:
----------------------
1). 计算样本点p的第k距离
2). 计算p的第k距离领域中的LRD局部可达密度
3).  若点p的LRD局部可达密度较之别的点很低,则可被认定为outlier

1.2 自编码器(降维→升维)

1.2.1 PCA(线性特征提取)

PCA(Principal Components Analysis)主成分分析,是一个极为常用的降维手段;作为一个线性的特征提取器,在异常检测领域,PCA也有较多应用。

2549250a8f40131379e70cd91fef460d.png
PCA异常检测流程示意图
两种思路:
>>>  一种是将数据映射到低维(多个主成分PC),然后在各 个PC上查看每个数据点跟其它数据的偏差;
>>>  另一种是数据映射到低维,然后由低维特征空间重 新映射回原空间,分析重构误差的大小;

【两种思路看似不太一样,其实本质上是差不多的】

1.2.2 神经网络自编码器(非线性特征提取)

Auto Encoder(自编码器)由encoder和decoder两个部分组成,输入和输出都是X,相较于PCA,神经网络的非线性表征能力对数据的应用范围更加广阔。

6024ab74b274e023076e03f8234d18fc.png
自编码器抽取特征示意图
思路:
>>> 通过比较X,X_pred两者的整体误差与局部误差来找到异常点;

1.2 孤立森林(Isolation Forest)

在孤立森林(iForest)中,异常被定义为“容易被孤立的离群点 (more likely to be separated)”,可 以将其理解为分布稀疏且离密度高的群体较远的点。

956d77c0aced102e5a9a05a8b9e72c3b.png
孤立森林:outliers are easier to isolate
>>> 递归地随机分割数据集,直到所有的样本点都是孤立的。在这种随机分割的策略下,
异常点通常具有较短的路。

二、时间序列的拓展方法

2.1 频域分析

对于高频的时间序列,我们可以离开时域(time domain),来到频域(frequency domain)进行一些分析。‘

(受限于自身水平及篇幅,FFT、wavelet transform、EMD等方法仅作粗浅介绍)

2.1.1 快速傅里叶变换

FFT(Fast Fourier Transform)是利用计算机计算离散傅里叶变换(DFT)的高效、快速计算方法的统称,简称FFT。因为我也没搞清楚FFT降低复杂度、提速的细节,所以这里还是聊聊傅里叶变换吧。

傅里叶级数:任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示,其中正弦函数或余弦函数的频率为周期频率的整数倍

那么,给定信号f(t),如何求解傅里叶级数中的

经上,我们可以获得信号

中每个频率分量 ,每个分量的系数就是
,可后续进行频谱分析。

傅里叶变换对:

上式中的

就是角速度为
的部分在
中的分量。

52c5f2f8366bdf78f0e173d3e5a3b99e.png
傅里叶变换:时域→频域
在异常检测中的应用:
>>> 将信号转为频域层面分析,提取信号的频域特征;
>>> 从频域特征角度分析异常程度;

2.1.2 小波变换

傅里叶变换是一个基于正弦函数、余弦函数的全局变换:获得的是信号全局一维的频域信息,也就是说:当信号本身的频率分布时变的,傅里叶变换则无法得到时变的频率分布。

小波变换Wavelet Transform)基于小波基函数(basic function),同时在基函数上进行尺度伸缩平移,最终可以获得信号的时变频谱图(时频谱)

常见的基函数

Haar, Daubechies(dbN), Mexican Hat(mexh), Morlet等。

8b8a156e52ce2c9e8c63c3d1acfa48d9.png

2.1.3 EMD经验模态分解

EMDEmpirical Mode Decomposition)经验模态分解由NASA的华裔科学家Norden e. Huang博士于1998年提出。

EMD将时间序列的内在不同尺度波动成分按照高频至低频,自适应逐步提取出不同频率的本征模函数(IMF)以及序列的趋势项(trend)

IMF必须具备如下两个条件:

  1. 首先,每个IMF分量数据中极值点个数与过零点个数相同或最多相差一个;
  2. 其次,上下包络线关于时间轴局部对称:即在任意时刻,局部极大值和局部极小值确定的上下包络线的均值为零。

作为一种时间序列分解算法,EMD傅里叶变换小波变换等方法相比而言:

  • 分解过程不基于预设的任何基函数
  • 依据数据本身的时间尺度特征进行信号分解;
  • 可有效处理非平稳非线性数据

914bceec628d24904d0f77468e8ad5f1.png
EMD的IMF本征模函数分解示意图

EMD分解步骤:

  1. 找出时间序列
    所有的极值点;
  2. 利用三次样条函数拟合
    所有的极大值和极小值,得到
    上下包络线
    ;
  3. 计算上下包络线的均值,记为
    ,其满足
    ;
  4. 中减去
    ,得到待分解时间序列与两包络线均值的差值,记为
    ,其满足
    ;l
  5. 判断
    的性质,如果
    满足
    IMF的定义,那么
    为第i个IMF,记为
    ;如果不满足,则把
    记为新的待处理的
    ,将上述步骤进行重复操作;
  6. 将剩余的
    重复以上5个步骤,然后依次获得第1,2,3·····第n个IMF,直到残差项满足某些停止准则(无法再筛选出新的IMF)。

2.2 时间序列相似性分析

2.2.1 余弦相似度、Pearson相关系数、欧式距离

时间序列可以视为一维的向量,两个向量间的相似性则可以通过下述三种方式度量:

  • 余弦相似度

  • Pearson相关系数

f70610a05cc0f8c7fed2be07404a7162.png
两式对比,可见皮尔逊相关系数的计算是先对向量每一分量减去分量均值,再求余弦相似度。
这一操作称为中心化。
  • 欧氏距离

余弦相似度、Pearson相关系数、欧式距离都要求:两个向量的维度一致(即时间序列的长度相同)。

那么,下面两个问题可以思考一下:

  • 两个时间序列长度不同时,如何度量相似度
  • 一个序列是另一个序列平移之后的结果,上述2种方式度量后的结果极大可能是两者不相似

2.2.2 动态时间归整-DTW(Dynamic Time Warping)

针对上述的问题,动态时间归整(Dynamic Time Warping)应运而生,DTW基于动态规划专门针对序列匹配问题而提出,解决欧氏距离在序列平移后度量失效的问题。

规整(warping)则体现在将:两个长短不一致的序列“规整”对齐。

  1. 核心思想:通过动态规划来计算两个序列的相似距离,再把相似距离转化为相似度;

a43b1492626686cca46705802700a847.png
红线:无动态规划,蓝线:附有动态规划

9d734039d9cba180c2656d965c41e0e8.png
DTW距离度量示意图(增加了时间移动窗口)

三、python的相关package

-------------------------------------未完持续,to be continued

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值