Scipy - 自定义概率密度函数的逆采样方法

时间:2011-11-30 00:05:43

标签: python numpy scipy

我正在尝试从自定义概率密度函数(PDF)执行反向采样。我只是想知道这是否可能,即整合PDF,反转结果,然后解决给定的统一数字。 PDF的形状为f(x,alpha,mean(x))=(1 / Gamma(alpha + 1)(x))((x *(alpha + 1)/ mean(x))^(alpha + 1 ))exp( - (alpha + 1)*(x / mean(x))其中x> 0.从形状中,唯一的值sub-150是相关的,并且我想要做的是sub-80值虽然很好,但扩展范围不应该太大。

我试过做反演方法,但只找到了一种数值方法来进行积分,考虑到我需要反转函数来解决这个问题,这不一定有用:

u =积分(f(x,alpha,mean(x))dx)从0到y,其中y是未知的,u是0到1之间的均匀随机变量。

积分具有伽马函数和不完整的伽玛函数,因此试图将其反转是一种混乱。欢迎任何帮助。

提前致谢了。

干杯

1 个答案:

答案 0 :(得分:4)

假设您的意思是您试图随机选择将根据您的PDF分发的值,那么是的,这是可能的。这在维基百科上被描述为inverse transform sampling。基本上,这正是你所说的:整合PDF以产生累积分布(CDF),反转它(可以提前完成),然后选择一个随机数并通过反转的CDF运行。

如果您的域名为0到正无穷大,则您的分布似乎与Numpy和Scipy内置的gamma distribution匹配,theta = 1/alphak = alpha+1