我试图使用Julia使用N个观察到的数据点(存储为Float64
数字数组)来估计连续的单变量分布,然后从这个估计的分布中采样。我没有先验知识来限制对某些分布族的关注。
我正在考虑使用KernelDensity包来估计分布,但我不确定如何从结果输出中采样。
如果对估计分布没有任何限制,一个自然的候选者将是经验分布函数(参见Wikipedia)。对于这个分布,有一些很好的关于收敛到实际分布的定理(见Dvoretzky-Kiefer-Wolfowitz不等式)。
有了这个选择,采样特别简单。如果dataset
是当前样本的列表,则dataset[rand(1:length(dataset),sample_size)]
是来自经验分布的新样本的集合。使用distribution包,它可以更容易读,像这样:
using Distributions
new_sample = sample(dataset,sample_size)
最后,核密度估计也很好,但可能需要选择一个参数(核及其宽度)。这显示了对某个系列发行版的偏好。从核分布中抽样与从经验分布中抽样惊人地相似:从经验分布中选择一个样本;2. 使用来自内核函数的样本对每个样本进行扰动。
例如,核函数为宽度为w
的正态分布,则扰动样本可计算为:
new_sample = dataset[rand(1:length(dataset),sample_size)]+w*randn(sample_size)