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