【问题标题】:Scipy - Inverse Sampling Method from custom probability density functionScipy - 自定义概率密度函数的逆采样方法
【发布时间】:2011-11-30 13:42:27
【问题描述】:

我正在尝试从自定义概率密度函数 (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。从形状来看,只有低于 150 的值是相关的,而对于我想要做的低于 80 的值是足够好。不过,扩大范围应该不会太难。

我尝试过反演方法,但只找到了一种数值方法来进行积分,考虑到我需要反转函数来求解,这不一定有帮助:

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

积分有一个 gamma 函数和一个不完整的 gamma 函数,所以试图反转它有点乱。欢迎任何帮助。

提前致谢。

干杯

【问题讨论】:

  • 您的 PDF 的域是什么?除非您以某种方式限制域,否则您拥有的功能是不可规范化的。
  • 抱歉完整的PDF是:(1/Gamma(alpha+1)(x))((x*(alpha+1)/mean(x))^(alpha+1))exp (-(alpha+1)*(x/mean(x)) 域是0到inf
  • 你的mean(x)只是一个参数mean_x吗?给定 x 只是评估 pdf 的点,x 的平均值就是 x。
  • 是要假设的参数,所以mean(x) != x
  • 你能以明确的形式写你的 pdf,例如作为python表达式?我的印象是,标准化后的 pdf 看起来就像一个标准的 gamma pdf,在 numpy.random 和 scipy.stats 中。

标签: python numpy scipy


【解决方案1】:

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

如果您的域是 0 到正无穷大,您的分布似乎与 Numpy 和 Scipy 中内置的 gamma distributiontheta = 1/alphak = alpha+1 匹配。

【讨论】:

  • 如何事先将其反转?我在进行反演时遇到了麻烦,因为积分给了我一个不完整的 Gamma 函数
  • 您实际上不必自己进行反演,因为您只需使用 Numpy 的 gamma 分布即可直接获得根据所需 PDF 分布的值。但是,如果您确实必须进行反转,我会使用查找表和点之间的线性插值。
  • 我的主要问题是我只寻找 0 到大约 150 之间的值,所以从技术上讲,我不需要从 0 积分到 inf。我只是没有通过不完整的伽玛函数。我知道我可以整合数值,但不确定我是否可以从中采样。
  • 我认为您可能需要编辑您的问题,详细说明您正在尝试的内容。
猜你喜欢
  • 2018-07-18
  • 2015-07-31
  • 2023-03-04
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 2020-08-07
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多