PCA
PCA[线性方法]在做特征值分解之后得到的特征向量反应了原始数据方差变化程度的不同方向,特征值为数据在对应方向上的方差大小。所以,最大特征值对应的特征向量为数据方差最大的方向,最小特征值对应的特征向量为数据方差最小的方向。原始数据在不同方向上的方差变化反应了其内在特点。如果单个数据样本跟整体数据样本表现出的特点不太一致,比如在某些方向上跟其它数据样本偏离较大,可能就表示该数据样本是一个异常点。
PCA一种方法就是找到k个特征向量,并计算每个样本再经过这k个特征向量投射后的重建误差(reconstruction error),而正常点的重建误差应该小于异常点。
同理,也可以计算每个样本到这k个选特征向量所构成的超空间的加权欧氏距离(特征值越小权重越大)。
也可以直接对协方差矩阵进行分析,并把样本的马氏距离(在考虑特征间关系时样本到分布中心的距离)作为样本的异常度,而这种方法也可以被理解为一种软性(Soft PCA)
Autoencoder
由于PCA 方法的线性使得特征维度类型的抽取上有很大限制。近年来很多神经网络的方法被用于时间序列的异常检测,比如Autoencoder,通过引入神经网络天生的非线性性克服这些限制。
Auto-Encoder,中文称作自编码器,是一种无监督式学习模型。它基于反向传播算法与最优化方法(如梯度下降法),利用输入数据 X 本身作为监督,来指导神经网络尝试学习一个映射关系,从而得到一个重构输出 X R 。在时间序列异常检测场景下,异常对于正常来说是少数,所以我们认为,如果使用自编码器重构出来的输出 X R跟原始输入的差异超出一定阈值(threshold)的话,原始时间序列即存在了异常。[如果样本都是数值型,可以用MSE或MAE作为衡量指标,样本的重建误差越大,则表明异常的可能性越大]
算法模型包含两个主要的部分:Encoder(编码器)和Decoder(解码器)。
编码器的作用是把高维输入 X 编码成低维的隐变量 h 从而强迫神经网络学习最有信息量的特征;解码器的作用是把隐藏层的隐变量 h 还原到初始维度,最好的状态就是解码器的输出能够完美地或者近似恢复出原来的输入, 即$X^R ≈ X $ 。