我读到了使用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的概念错了? TIA的帮助.
最佳答案 您正确理解了稳健PCA(RPCA)的概念:稀疏矩阵S包含异常值.
但是,S通常会包含许多观察结果(非零值),您可能不会将其归类为异常.如你所知,过滤掉这些点是个好主意.
应用固定阈值来识别相关异常值可能适用于一个数据集.但是,如果底层分布的均值和方差发生变化,则在许多数据集上使用阈值可能会产生较差的结果.
理想情况下,您计算异常分数,然后根据该分数对异常值进行分类.一种简单的方法(通常用于异常值检测)是查看您的数据点(潜在异常值)是否位于假定分布的尾部.
例如,如果您假设您的分布是高斯分布,则可以计算Z分数(z):
z =(x-μ)/σ,
其中μ是平均值,σ是标准偏差.
然后,您可以将阈值应用于计算的Z分数,以便识别异常值.例如:如果对于给定的观察z> 3,数据点是异常值.这意味着您的观察值与平均值相差超过3个标准偏差,并且位于高斯分布的0.1%尾部.与使用非标准化值的阈值相比,这种方法对数据的变化更为鲁棒.此外,调整对异常值进行分类的z值比为每个数据集查找实际比例值(在您的情况下为883.89052372)更简单.