【问题标题】:Kernel Density Estimator ( with Gauss Kernel ) Sum f(x) = 1?核密度估计器(使用高斯核)和 f(x) = 1?
【发布时间】:2015-10-01 06:56:29
【问题描述】:

我想将KDEGaussian Kernel 一起使用。如果我是正确的,所有 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*sum 是值 val[r] 的概率是否正确?所有概率的总和 > 1(但对我来说看起来不错)。

【问题讨论】:

    标签: c++ c gaussian kernel-density probability-density


    【解决方案1】:

    您在这里误解了关于概率密度的假设。密度积分为一,而它在某些点的值绝对不是 1。

    让我们使用您似乎使用的the linked Wikipedia article 中的以下公式来讨论它:

    此公式提供在点 x 处评估的密度 f_h(x)

    根据我的审查,您的代码正确地评估了这个数量。但是,您误解了应该为一的数量。作为密度,整个空间上的积分应该产生一个,即

    这个属性被称为密度的规范化

    此外,作为一个密度本身,f_h(x) 的每个求和应该在整个空间上积分时产生1/n,当其中还包括归一化常数时。同样,不能保证加法的值。

    在一维中,您可以使用梯形规则或其他正交方案轻松确认归一化(--如果您提供一个工作示例,我可以尝试这样做。)

    【讨论】:

    • @Roby:见here。请注意,我更改了一些内容,但积分始终为 1(无论被加数的数量如何 n)。
    猜你喜欢
    • 2021-11-13
    • 2021-01-21
    • 1970-01-01
    • 2015-02-21
    • 2021-07-11
    • 2012-04-06
    • 2013-09-14
    • 2015-08-28
    相关资源
    最近更新 更多