2015-07-13 4 views
2

Я хочу использовать KDE с Gaussian Kernel. Если я прав, сумма всех f (x) должна быть 1 (~ округление)?Оценка плотности ядра (с ядром Гаусса) Сумма f (x) = 1?

Моя реализация выглядит следующим образом:

float K(float const& val) 
    { 
     const float p=1.0/std::sqrt(2.0 * M_PI); 
     float result = 0.5 * (val*val); 
     result = p * std::exp(- result); 

     return result; 
    }; 

std::vector< std::pair<float, float> kde(float *val, int len float h) 
{ 
    std::vector< std::pair<float, float>> density(len); 
    const float p = 1.0/(h * len); 

    for(int r=0;r<len;r++) 
    { 
    float sum = 0; 

    for(int i=0;i<len;i++) 
    sum += k((val[r] - val[i])/h); 

    density[r] = std::make_pair(val[r], p*sum); 
    } 
    return density; 
} 

И я выбрал ч> 0. Am i right that p * sum - это вероятность для значения val [r]? Сумма по всей вероятности равна> 1 (но выглядит нормально для меня).

ответ

2

Вы неверно истолковали предположения о плотности вероятности здесь. Плотность интегрирует к одному, в то время как его значения в определенных точках, безусловно, не 1.

Давайте обсудим это, используя следующую формулу из the linked Wikipedia article, которые вы, кажется, используют:

enter image description here

Эта формула обеспечивает плотность f_h(x) оценивается в точке x.

С моей оценки, ваш код правильно оценивает это количество. Тем не менее, вы неверно истолковали количество, которое должно быть единым. Как плотность, интегрального над полным пространством должны дать один, т.е.

Это свойство называется нормализации плотности.

Кроме того, будучи самой плотностью, каждое слагаемое f_h(x) должно давать 1/n, если оно интегрировано по всему пространству, если оно также содержит константу нормализации. Опять же, нет никакой гарантии на значения слагаемых.

В одном измерении, вы можете легко подтвердить нормализацию с помощью трапеций или другую схему квадратурной

+0

надеюсь, тот хорошо (--Если вы предоставляете рабочий пример, я могу попытаться сделать это.): HTTP: //coliru.stacked-crooked.com/a/44008bf221855982 – Roby

+0

@Roby: см. [здесь] (http://coliru.stacked-crooked.com/a/ec7fedfbd102b5e5). Обратите внимание, что я изменил некоторые вещи, но интеграл всегда '1' (независимо от числа слагаемых' n'). – davidhigh