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;
}
我选用H> 0。我是对的p *总和是值的概率val [r]?所有概率之和大于1(但对我来说看起来不错)。
希望那OK(--IF你提供工作的例子,我可以尝试这样做。):HTTP: //coliru.stacked-crooked.com/a/44008bf221855982 – Roby
@Roby:参见[here](http://coliru.stacked-crooked.com/a/ec7fedfbd102b5e5)。请注意,我改变了一些东西,但积分总是'1'(不管加数'n')。 – davidhigh