Как метод stats.gaussian_kde вычисляет pdf?

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

Он отлично работает! Теперь я обнаружил, что метод также имеет встроенные функции для вычисления функции плотности вероятности заданного набора точек (мои данные).

I would like to know how it calculates the pdf provided a set of points.

Вот небольшой пример:

import numpy as np
import scipy.stats
from scipy import stats

def getDistribution1(data):
    kernel = stats.gaussian_kde(data,bw_method=0.06)
    class rv(stats.rv_continuous):
        def _rvs(self, *x, **y):
            return kernel.resample(int(self._size)) #random variates
        def _cdf(self, x):
            return kernel.integrate_box_1d(0,max(x)) #Integrate pdf between two bounds (-inf to x here!)
        def _pdf(self, x):
            return kernel.evaluate(x)  #Evaluate the estimated pdf on a provided set of points
    return rv(name='kdedist')

test_data = np.random.random(100) # random test data 
distribution_data = getDistribution1(test_data)
pdf_data = distribution_data.pdf(test_data) # the pdf of the data

В приведенном выше фрагменте кода существует три метода:

  1. rvs для создания случайных выборок на основе данных
  2. cdf, который является интегралом PDF от 0 до max (данные)
  3. pdf который является pdf данных

Причина, по которой мне нужен этот PDF-файл, заключается в том, что сейчас я пытаюсь рассчитать веса для своих данных на основе вероятности. Чтобы я мог присвоить каждой точке данных вероятность, которую затем мог бы использовать в качестве веса.

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

P.S. Простите, что задаю тот же вопрос в перекрестной проверке, похоже, ответа нет!


person Srivatsan    schedule 12.05.2015    source источник


Ответы (1)


В онлайн-документах есть ссылка на исходный код, который для gaussian_kde находится здесь: https://github.com/scipy/scipy/blob/v0.15.1/scipy/stats/kde.py#L193

person ev-br    schedule 12.05.2015
comment
Спасибо за исходный код, но я из него не понимаю, что у меня есть 1D-массив, а там функция evaluate делает это только для 2D-массива! Но я получаю PDF для моих данных! Как это так? Я сбит с толку! - person Srivatsan; 12.05.2015
comment
в самом начале есть вызов atleast_2d. В общем, лучше задать актуальный, отдельный вопрос. - person ev-br; 12.05.2015