Кривая среднего тренда для точек данных в Python - PullRequest
2 голосов
/ 04 августа 2011

Мне бы хотелось воспроизвести сюжет, похожий на этот:

Я имею в виду, что у меня есть набор точек данных, и я бы хотел иметь кривую, которая показываетсредний тренд.

Я попытался добавить случайный шум к функции y = 2x

  from scipy import interpolate

  x=arange(0,1,1e-3)
  noise=np.random.random(len(x))
  y=2*x+noise

И затем я использовал некоторые функции Scipt для интерполяции данных

  xnew=arange(0,1,1e-1)
  f=interpolate.UnivariateSpline(x,y)
  g=interpolate.interp1d(x,y)
  plot(x,y,'ro',xnew,f(xnew),'-',xnew,g(xnew),'--')
  show()

Но кривая, которую я получаю, почти не похожа на y = 2 * x.Я хотел бы иметь плавную кривую, которая усредняет данные.Какой метод / функцию я могу использовать?

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

Одна из причин, по которой кривая не выглядит как y=2*x (я думаю, что это так, но это зависит от мнения), заключается в том, что ваш шум велик по сравнению со средним изменением y. Если вы попробуете что-то вроде:

noise=0.1*np.random.random(len(x))

(т.е. уменьшить шум) или

y=5*x**2+noise

(т. Е. Увеличьте y), вы увидите, что интерполяция лучше отслеживает данные.

Вы также можете проверить:

http://www.scipy.org/Cookbook/SignalSmooth

2 голосов
/ 04 августа 2011

Вы можете попробовать fit.py , пакет подгонки кривой для Python.

0 голосов
/ 04 августа 2011

enter image description here

Univariate выглядит точно так же, как 2x + 0,5 (что является средним значением вашего шума).

Можно ожидать, что interp1d сильно зависит от этого количества шума.

В зависимости от ваших целей вы можете захотеть написать свои собственные скользящие средние вместо использования методов интерполяции акций;который по существу использует среднее значение из последних n точек данных вместо точки данных.

При этом используемый метод интерполяции запасов также зависит от вашей цели.Попробуйте несколько и выберите то, что соответствует вашим целям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...