【发布时间】:2020-08-24 05:19:21
【问题描述】:
我正在尝试生成一个随机分布,该分布遵循颠倒的高斯分布,移动 uo 使其仍在范围 (0,1) 内。我需要用尽可能少的特殊函数来做到这一点,并且只能使用平面随机数生成器。
我可以通过将平面随机数放入逆高斯 CDF 来根据高斯生成。这有效,并为我提供了我期望的高斯分布。在 python 中,这看起来像这样:
def InverseCDF(x, mu, sigma):
return mu + sigma * special.erfinv(2*x - 1)
现在,当我尝试生成遵循 1-e^(-x^2) 的分布时,我相信此函数的逆 CDF 与现在具有逆误差函数参数的常规高斯相同2*p + 1。所以它如下所示:
def InverseCDF(x, mu, sigma):
return mu + sigma * special.erfinv(2*x + 1)
这里的问题是 erfinv 仅从 (-1,1) 定义,并且参数现在大于 1。我尝试过缩放它并以各种方式翻转,几乎在我可以的任何地方都放置负数,我似乎永远无法生成遵循颠倒高斯的直方图。在大多数情况下,我实际上得到了一个正则高斯分布。
知道我做错了什么,或者关于如何生成这个颠倒的高斯的任何提示?提前感谢您的帮助。
【问题讨论】:
-
有趣的问题,但我对 pdf 的定义有点困惑。让 g(x) 是具有平均值 0 和方差 1 的普通正态 pdf。我猜你正在查看 max(g) - g(x) 其中 max(g) 是凹凸的最大值(我猜是 1 /sqrt(2 pi))。但是 max(g) - g(x) 在曲线下有无限的面积——你是否以某种方式限制了 x 的范围?
-
是的,我应该声明 x 是有限制的。限制由我的具体问题决定,但对于这个玩具示例,我们可以将其设为 (0,1)。
-
你的截断法线是在范围的中心,还是模式为零?你愿意使用接受/拒绝技巧吗?
标签: random probability gaussian