gpt4 book ai didi

Python:使用逆 cdf 技术进行抽样

转载 作者:行者123 更新时间:2023-11-28 18:33:48 27 4
gpt4 key购买 nike

我有一个复杂的(非标准)分布函数,我想对其进行采样以使用逆 cdf 技术生成模拟数据点。 为了这个例子,我将考虑高斯分布

var=100
def f(x,a):
def g(y):
return (1/np.sqrt(2*np.pi*var))*np.exp(-y**2/(2*var))
b,err=integrate.quad(g,-np.inf,x)
return b-a

我想在 a=[0,1]a=np.linspace(0,1,10000,endpoint=False) 之间生成值并使用 scipy.optimize.fsolve 为每个 a 求解 x。我有两个问题:

  1. 如何将 fsolve 用于值数组 a

  2. fsolve 初始猜测x0,如何选择一个好的猜测值?

谢谢

最佳答案

这是您的操作方法,我将 10000 替换为 10,因为这需要一段时间。我最初的猜测只是 0,我将它设置为下一次猜测的前一次迭代,因为它应该非常接近解决方案。如果需要,您可以进一步绑定(bind)它,使其严格高于它。

作为旁注,这种针对复杂分布的抽样实际上并不可行,因为计算 cdf 可能相当困难。还有其他采样技术可以解决这些问题,例如 Gibbs 采样、Metropolis Hastings 等。

var = 100

def f(x, a):
def g(y):
return (1/np.sqrt(2*np.pi*var))*np.exp(-y**2/(2*var))

b, err = sp.integrate.quad(g, -np.inf, x)
return b - a


a = np.linspace(0, 1, 10, endpoint=False)[1:]
x0 = 0
for a_ in a:
xi = sp.optimize.fsolve(f, x0 + 0.01, args=(a_,))[0]
print(xi)
x0 = xi

[编辑] 它似乎卡在 0 附近,添加一个小数字修复它,我不知道为什么,因为我不知道 fsolve 是如何工作的。

关于Python:使用逆 cdf 技术进行抽样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com