gpt4 book ai didi

Python:拒绝列表中的异常值(序列)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:06 26 4
gpt4 key购买 nike

我正在尝试在 python 中找到一种算法,该算法基于 a) 数据集的趋势(增长/收缩)b) 和基于与其直接邻居的数值距离:x 不超过 > abs(1 % 的 x-1

编辑:如果 python 中有可用的算法,它也可以是三次样条插值。

我见过使用标准偏差的 numpy 算法,但由于我必须考虑列表的序列,因此该算法不适用于这种情况。

0.0937,
0.0934,
0.0933,
0.0931,
0.0933,
0.0936,
0.1091 < == outlier,
0.0938,
0.0945,
0.0949,
0.0956,
0.1082,
0.1065 < == outlier since -,
0.1123,
0.1198

最佳答案

您可以做的是计算数据的后向和前向梯度,假设步长为 1。您的离群值是那些条件适用的元素:

  • 后向和前向梯度符号不同:趋势变化
  • 后向梯度绝对值大于左邻域绝对值的1%

我对您的陈述的解释是两者都必须为真。

f 为数据的一维 numpy 数组。

f=np.array([
0.0937,
0.0934,
0.0933,
0.0931,
0.0933,
0.0936,
0.1091, #< == outlier,
0.0938,
0.0945,
0.0949,
0.0956,
0.1082,
0.1065, #< == outlier since -,
0.1123,
0.1198
])
bg = 0.0*f # backward gradient, we want them to have the same size as f
fg = 0.0*f # forward gradient, we want them to have the same size as f
bg[1:] = f[1:]-f[:-1]
fg[:-1] = f[1:]-f[:-1]

outliers = (bg*fg<0) * np.hstack((False, np.where(np.abs(bg[1:])>0.01*np.abs(f[:-1]),True,False) ))
# You don't want to remove an element and the next
outliers[1:] = outliers[1:]*np.where( outliers[:-1], False, True )

print 'Outliers = ', f[outliers]
print 'Good = ', f[np.where( outliers, False, True)]

我用你的数据做了这个例子,只需将 f 替换为任何内容即可。

关于Python:拒绝列表中的异常值(序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728704/

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