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

标签 python algorithm numpy

我试图在python中找到一种算法,该算法基于数据集的a)趋势(增长/收缩)b)和与近邻的数字距离来查找异常值:x不超过x-1的abs(1%)
编辑:如果有可用的python算法,它也可以是三次样条插值。
我已经看到了使用std偏差的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 - Python:拒绝列表中的异常值(序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728704/

相关文章:

python - genfromtxt : how to disable caching

python - 使用 SWIG Controller 将 python 中的 numpy 函数传递给 C++

javascript - 如何在不重新加载网页的情况下使用离线Plotly和Pyramid更新地 block ?

多边形中的 C# 点

python - 如何拍摄图像并从中心裁剪出3x2比例的图像?

algorithm - 这种线性搜索实现实际上有用吗?

python - Pandas :一系列数组到一系列转置数组

python - 如何在pyopencl中使用float2?

python - 在 Python 字典列表上使用 counter

python - "with"列表理解中的关键字?