如何从核密度估计中获取函数?

How to get a function from a kernel density estimation?

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

我将提供一些我当前执行 KDE 的伪代码,以更好地向您展示我的问题。

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

  1. 定义KDE的区间和使用了多少个点([-6, 11]我在-6.0和11.0之间用了1000个"points"])

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

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

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

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

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

如果你知道你的样本服从某种分布并且你知道参数和 PDF 方程那么你可以在方程的帮助下绘制它们但是如果没有给出分布你不能创建公式或在至少应该避免。 示例:如果给定样本遵循高斯分布,则可以找到均值和方差并将它们代入 Gaussian equation,然后绘制 PDF。

KDE 用于查找有限数据样本 的概率密度函数(PDF) 并且您无法获得formula/equation一个 sample 可以直接用来绘制 PDF。 KDE 背后的整个想法是 通用估计器 用于 PDF(平滑曲线)而不是方程式。

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

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