Обнаружение выбросов с использованием рекурсивной аппроксимации кривой и устранения ошибок

Есть ли способ обнаружить аномалии в наборе данных, используя рекурсивную подборку кривой и удаление точек, имеющих наибольшую среднеквадратичную ошибку по отношению к кривой, до приемлемого порога?

Я использую функцию scipy.optimize.curve_fit для python 2.7, и мне нужно предпочтительно работать с python.


person Victor Juliet    schedule 18.05.2015    source источник


Ответы (1)


Скорее всего, вы говорите о рекурсивной регрессии (что довольно просто в 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()
person Community    schedule 19.05.2015
comment
Хотя мои наборы данных довольно велики, но позвольте мне попробовать это. - person Victor Juliet; 19.05.2015