gpt4 book ai didi

python - 是否有一个 numpy 内置函数来拒绝列表中的异常值

转载 作者:IT老高 更新时间:2023-10-28 21:12:15 25 4
gpt4 key购买 nike

是否有一个 numpy 内置函数可以执行以下操作?也就是说,获取一个列表 d 并返回一个列表 filtered_d,其中根据 d 中点的一些假设分布删除了任何外围元素。

import numpy as np

def reject_outliers(data):
m = 2
u = np.mean(data)
s = np.std(data)
filtered = [e for e in data if (u - 2 * s < e < u + 2 * s)]
return filtered

>>> d = [2,4,5,1,6,5,40]
>>> filtered_d = reject_outliers(d)
>>> print filtered_d
[2,4,5,1,6,5]

我说“类似”是因为该函数可能允许不同的分布(泊松、高斯等)和这些分布中的不同异常值阈值(例如我在这里使用的 m)。

最佳答案

在处理异常值时有一点很重要,那就是应该尽量使用稳健的估算器。分布的平均值将受到异常值的影响,但例如中位数会少很多。

基于 eumiro 的回答:

def reject_outliers(data, m = 2.):
d = np.abs(data - np.median(data))
mdev = np.median(d)
s = d/mdev if mdev else 0.
return data[s<m]

在这里,我将平均值替换为更稳健的中位数,并将标准差替换为中位数到中位数的绝对距离。然后我用它们的(再次)中值缩放距离,以便 m处于合理的相对规模。

请注意,对于 data[s<m]语法工作,data必须是一个 numpy 数组。

关于python - 是否有一个 numpy 内置函数来拒绝列表中的异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com