我正在尝试使用 Julia 使用 N 个观察到的数据点(存储为 Float64
数字的数组)来估计连续单变量分布,然后从此估计分布中采样。我没有将注意力限制在某些分布系列上的先验知识。
我正在考虑使用 KernelDensity 包来估计分布,但我不确定如何从结果输出中进行采样。
任何帮助/提示将不胜感激。
最佳答案
对估计分布没有任何限制,自然候选者将是经验分布函数(参见 Wikipedia)。对于这个分布,有关于收敛到实际分布的非常好的定理(见 Dvoretzky–Kiefer–Wolfowitz inequality)。
有了这个选择,采样就特别简单了。如 dataset
是当前样本的列表,然后 dataset[rand(1:length(dataset),sample_size)]
是一组来自经验分布的新样本。使用 Distributions 包,它可能更具可读性,如下所示:
using Distributions
new_sample = sample(dataset,sample_size)
最后,核密度估计也不错,但可能需要选择一个参数(核及其宽度)。这显示了对某个分布系列的偏好。从核分布中采样与从经验分布中采样惊人地相似: 1. 从经验分布中选择一个样本; 2. 使用来自核函数的样本扰乱每个样本。
例如,如果核函数是宽度为
w
的正态分布,那么扰动样本可以计算为:new_sample = dataset[rand(1:length(dataset),sample_size)]+w*randn(sample_size)
关于julia - 在 Julia 中估计概率分布并从中采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40134937/