我曾尝试实现KDE,但是我对数学有些困惑。
我将提供一些当前执行KDE方式的伪代码,以更好地向您展示我的问题。
(我复制了维基百科示例:https://en.wikipedia.org/wiki/Kernel_density_estimation)
定义KDE的间隔以及使用了多少个点([-6、11],我在-6.0和11.0之间使用了1000个“点”])
遍历所有点,并通过将给定数据点的核相加来给每个点一个概率。
现在,-6到11之间的每个点都有被选择的可能性。
确保所有点的概率加起来为100%,并根据这些点的概率绘制样本。
如果我将其绘制出来,它将起作用并给出正确的结果,但是我不禁感到这是一种非常落后的工作方式。
不必计算间隔中每个点的概率,而只是从KDE中获得一个公式即可,这是很好的,我可以给出随机数并根据该概率获取样本。
有谁知道这是怎么做到的吗?
顺便说一句,我使用c ++,并希望继续这样做。
最佳答案
如果假设样品遵循某种分布,并且知道参数和PDF方程,则可以借助方程来绘制它们,但是如果没有给出分布,则无法创建公式,或者至少应避免使用。
示例:如果给出的样本遵循高斯,则可以找到均值和方差并将其插入Gaussian equation,然后绘制PDF。
KDE用于查找有限数据样本的概率密度函数(PDF),而您无法获得可直接用于绘制PDF的样本的公式/等式。
KDE背后的整个想法是拥有PDF(平滑曲线)的通用估计量,而不是方程式。
上面您提到了KDE的工作方式,并在Wiki中给出了示例:
1.计算每个点的概率(频率)。
2.为每个点绘制高斯核,均值和带宽相同(参数)。
3.对所有这些内核求和以得到最终结果。
您不能拥有方程式的主要原因是由于参数未知-KDE中的带宽。当您更改带宽时,曲线将随着样本的变化而不断变化,并且该方程无法以多项式方程形式编写。
关于c++ - 如何从核密度估计中获得函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57762205/