使用递归曲线拟合和错误消除的异常值检测
Outlier detection using recursive curve fitting and error elimination
有没有什么方法可以使用递归曲线拟合并删除相对于曲线具有最大均方误差的点,直到可接受的阈值,在数据集中进行异常检测?
我正在使用 python 2.7 的 scipy.optimize.curve_fit 函数,我需要优先使用 python。
您很可能在谈论递归回归(这在 Matlab 中很容易)。对于 python,请尝试使用 scipy.optimize.curve_fit
.
对于简单的 3 次多项式拟合,这将基于 numpy.polyfit
和 poly1d
。
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)
# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()
有没有什么方法可以使用递归曲线拟合并删除相对于曲线具有最大均方误差的点,直到可接受的阈值,在数据集中进行异常检测?
我正在使用 python 2.7 的 scipy.optimize.curve_fit 函数,我需要优先使用 python。
您很可能在谈论递归回归(这在 Matlab 中很容易)。对于 python,请尝试使用 scipy.optimize.curve_fit
.
对于简单的 3 次多项式拟合,这将基于 numpy.polyfit
和 poly1d
。
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)
# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()