python异常值检测_python – 使用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)更简单.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值