首页 > 解决方案 > 如何从核密度估计中获得函数?

问题描述

我尝试过实现 KDE,但我对数学有点卡住了。

我将对我当前执行 KDE 的方式进行一些伪解码,以便更好地向您展示我的问题。

(我复制了维基百科的例子:https ://en.wikipedia.org/wiki/Kernel_density_estimation )

  1. 定义 KDE 的间隔以及使用了多少点([-6, 11],我在 -6.0 和 11.0 之间使用了 1000 个“点”])

  2. 遍历所有点,并通过添加来自给定数据点的内核来给每个点一个概率。现在 -6 到 11 之间的每个点都有被选中的概率。

  3. 确保所有点的概率加起来为 100%,并根据点的概率抽取样本。

这很有效,如果我绘制它会给出正确的结果,但我不禁觉得这是一种非常倒退的做事方式。

不必计算区间中每个点的概率,而只需从 KDE 中获取一个公式,我给出随机数并根据概率获取样本,这将是一件好事。有谁知道这是怎么做到的吗?

顺便说一句,我使用 c++ 并希望继续这样做。

标签: c++kernel-density

解决方案


如果您知道您的样本遵循某种分布并且您知道参数和 PDF 方程,那么您可以借助方程绘制它们,但如果没有给出分布,您将无法创建公式,或者至少应该避免. 示例:如果给定样本遵循高斯分布,则可以找到均值和方差并将它们代入高斯方程,然后绘制 PDF。

KDE 用于查找有限数据样本的概率密度函数 (PDF) ,您无法获得可直接用于绘制 PDF 的样本的公式/方程。KDE 背后的整个想法是为 PDF(平滑曲线)而不是方程提供通用估计器。

您在上面提到了 KDE 的工作原理,并在 wiki 中给出了示例:- 1. 计算每个点的概率(频率)。2. 为每个点绘制高斯核,以相同的点作为均值和一些带宽(参数)。3. 对所有这些内核求和以获得最终结果。

你不能有方程的主要原因是因为未知参数 - KDE 中的带宽。当您改变带宽时,曲线将随着样本的变化而不断变化,并且方程不能以某些多项式方程形式编写。


推荐阅读