Оценка плотности потока данных

Какие существуют статистические методы, которые будут оценивать плотность вероятности данных по мере их поступления во времени?

Мне нужно оценить PDF многомерного набора данных; однако со временем поступают новые данные, и по мере поступления данных оценка плотности должна обновляться.

До сих пор я использовал оценки ядра, сохраняя буфер данных и вычисляя новую оценку плотности ядра при каждом обновлении новых данных; однако я больше не могу справляться с объемом данных, которые необходимо хранить. Поэтому мне нужен метод, который будет отслеживать общую оценку PDF/плотности, а не отдельные данные. Любые предложения будут действительно полезны. Я работаю на Python, но, поскольку это многословно, любые предложения по алгоритму также будут полезны.


person user2909415    schedule 12.01.2015    source источник


Ответы (1)


реализация KDE в Scipy включает в себя функции увеличения KDE по каждому датуму, а не по каждой точке. Это вложено в цикл «если больше точек, чем данных», но вы, вероятно, могли бы переназначить его для своих нужд.

if m >= self.n:
    # there are more points than data, so loop over data
    for i in range(self.n):
        diff = self.dataset[:, i, newaxis] - points
        tdiff = dot(self.inv_cov, diff)
        energy = sum(diff*tdiff,axis=0) / 2.0
        result = result + exp(-energy)

В этом случае вы можете сохранить результат вашего kde как result, и каждый раз, когда вы получаете новую точку, вы можете просто вычислить новую гауссову и добавить ее к вашему результату. Данные можно удалять по мере необходимости, вы только сохраняете KDE.

person Tom    schedule 27.01.2015