Я хочу использовать 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 (но выглядит нормально для меня).
надеюсь, тот хорошо (--Если вы предоставляете рабочий пример, я могу попытаться сделать это.): HTTP: //coliru.stacked-crooked.com/a/44008bf221855982 – Roby
@Roby: см. [здесь] (http://coliru.stacked-crooked.com/a/ec7fedfbd102b5e5). Обратите внимание, что я изменил некоторые вещи, но интеграл всегда '1' (независимо от числа слагаемых' n'). – davidhigh