使用RPCA检测时间序列数据中的异常值

我读到了一些关于使用RPCA来查找时间序列数据中的异常值的内容。我对RPCA的基本原理和理论有了一些了解。我找到一个可以进行RPCA的Python库,并且得到了两个矩阵作为输出(L和S),一个是输入数据的低秩近似,另一个是稀疏矩阵。

输入数据:(行表示一天,列表示10个特征)

DAY 1 - 100,300,345,126,289,387,278,433,189,153  DAY 2 - 300,647,245,426,889,987,278,133,295,153  DAY 3 - 200,747,145,226,489,287,378,1033,295,453

得到的输出:

L  [[ 125.20560531  292.91525518   92.76132814  141.33797061  282.93586313   185.71134917  199.48789246   96.04089205  192.11501055  118.68811072]   [ 174.72737183  408.77013914  129.45061871  197.24046765  394.84366245   259.16456278  278.39005349  134.0273274   268.1010231   165.63205458]   [ 194.38951303  454.76920678  144.01774873  219.43601655  439.27557808   288.32845493  309.71739782  149.10947628  298.27053871  184.27069609]]S  [[ -25.20560531    0.          252.23867186   -0.            0.   201.28865083   78.51210754  336.95910795   -0.           34.31188928]   [ 125.27262817  238.22986086  115.54938129  228.75953235  494.15633755   727.83543722   -0.           -0.           26.8989769    -0.        ]   [   0.          292.23079322   -0.            0.           49.72442192    -0.           68.28260218  883.89052372    0.          268.72930391]]

推断:(我的问题)

现在我如何推断出哪些点可以被分类为异常值。例如,通过查看数据,我们可以说1033看起来像是一个异常值。对应的S矩阵中的条目是883.89052372,与S中的其他条目相比,这个值更大。是否可以使用一个固定的阈值来找到S矩阵条目与输入矩阵中相应原始值的偏差,从而确定该点是异常值?还是我完全误解了RPCA的概念?感谢您的帮助。


回答:

您正确理解了鲁棒主成分分析(RPCA)的概念:稀疏矩阵S包含了异常值。然而,S通常会包含许多您可能不会自己归类为异常的观测值(非零值)。正如您所建议的,因此过滤掉这些点是一个好主意。

对一个数据集应用固定的阈值来识别相关异常值可能有效。然而,如果底层分布的均值和方差发生变化,在多个数据集上使用该阈值可能会产生不佳的结果。

理想情况下,您应该计算一个异常分数,然后根据该分数对异常值进行分类。一个简单的方法(并且在异常值检测中经常使用)是查看您的数据点(潜在的异常值)是否位于您假设的分布的尾部。例如,如果您假设您的分布是高斯分布,您可以计算Z分数(z):

z = (x-μ)/σ,

其中μ是均值,σ是标准差。

然后,您可以对计算出的Z分数应用一个阈值来识别异常值。例如:如果对于一个给定的观测值z > 3,则该数据点是异常值。这意味着您的观测值距离均值超过3个标准差,并且位于高斯分布的0.1%尾部。这种方法比对非标准化值使用阈值更能适应数据的变化。此外,调整您分类异常值的z值比为每个数据集找到一个实际的标度值(在您的例子中是883.89052372)更简单。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注