用于异常检测的稳健主成分分析

机器算法验证 机器学习 数理统计 异常值 降维 异常检测
2022-04-15 07:52:25

我浏览了 Robust PCA 的算法和一些论文,虽然我理解它,但矩阵 M 由低秩矩阵 L 和稀疏矩阵 S 组成。如果我是正确的,它可以是稀疏矩阵 S用于识别异常值。现在我有两个问题,我们将不胜感激 statexchange 社区的任何帮助:

问题1:。如果数据是一维时间序列,我将如何将其转换为二维矩阵。我尝试了两种方法,一种是,假设我有 7 天的数据,每天我收集 24 个数据点(只是说)所以我所做的就是将我的一维向量重塑为一个二维形状数组(#每天的记录,#days) 即 (24,7) 但它的意思是第一列将仅包含第一天的数据,第二列将仅包含第二天的数据,依此类推。第二种方法是我只是简单地将形状为 (168,1) 的一维时间序列向量重塑为 (24,7) 的二维矩阵,但在这种情况下,输入是水平分布的,即前 7 个输入第 1 行第 1 天,第 2 行第 7-14 个条目,第 3 行第 15-21 个条目,依此类推。

但是,当我对其应用 R-PCA 算法时,从第二种方法获得的 2-d 矩阵的重构值与几乎匹配的原始时间序列(PCP 的目的)匹配,而重构的(L+S)从第一种方式重塑矩阵的值几乎是随机的,并且与原始矩阵 M 的值并不真正匹配。知道这是如何发生的以及为什么发生的吗?

问题2:。我将如何使用稀疏矩阵来确定异常。我正在考虑一些距离测量的东西,但任何对此的见解/参考也将受到欢迎。

1个回答

我浏览了这篇论文和其他论文,并根据自己的需要使用了 Robust PCA。除了 Candes 等人,您可以查看 Lin 等人建议的实现。(2013 年):https ://arxiv.org/pdf/1009.5055.pdf 。除了检测异常值外,其中一个问题公式还允许您完成缺失的条目。您可以在此处找到 Robust PCA 问题公式的一个很好的 Python 实现

问题 1:据我了解,您的 1d 时间序列是在一周内重复的一天模式,加上噪音。因此,正如您使用经典 PCA 所做的那样,您的样本是时间序列中的每一天,而您的特征是一天中的每个小时,因此您应该将数据重塑为 7 x 24 矩阵 (n_samples x n_features)。实际上,就像 PCA 一样,您的样本(行)据说彼此之间具有很强的相关性,因此您可以找到时间序列的忠实低秩表示。稳健的 PCA 派上用场,因为它不像 PCA 那样受到异常值的强烈影响,其中强大的异常值可能会影响方差的主要方向。

在将 Robust PCA 应用于您的数据之前,您还应该查看预处理步骤,例如使您的时间序列静止、每天居中等。

问题 2:Lin 等人的实现。(2013)应用自适应阈值过滤条目,并仅保留高于阈值的条目。更多细节在论文中。S

这意味着检测异常值的工作是计算步骤中先验完成的。矩阵中的非零值应该会给您数据中的异常值。但是,对于噪声或非平滑数据,稀疏矩阵可能包含太多异常值。如果您觉得检测到太多异常值,一个想法是在扁平稀疏矩阵上应用基于分位数的异常检测。你的四分位数范围,然后你可以检测到零距离大于的所有值。SSSσ=q75q253×σ