scipy 中的连续分布看起来像两个幂律?
Continuous distribution in scipy that looks like two powerlaws?
我需要从大致如下所示的分布生成随机样本:
为了生成上图,我组合了两个幂律:
y = a * x**(a - 1) + b * x**(b - 1)
使用参数 a, b
控制分布的形状。理想情况下,单个形状参数会更好。
scipy
的 Continuous distributions 部分定义了数十种发行版,但我一直无法找到符合我需要的发行版。
在这种情况下,答案很简单。
a * x**(a - 1) + b * x**(b - 1)
在区间 [0, 1]
上的积分仅为 2,表明此分布是两个 power-law 分布的混合,其中一个以相同的概率绘制和另一个一样。* 具体来说,您的分布具有以下密度函数:
(a * x**(a - 1))/2 + (b * x**(b - 1))/2
.
然后,从这个分布中抽样的一个简单算法是:
- 生成
u
,[0, 1] 中的均匀随机变量。
- 概率为 1/2,return
u**(1/a)
。否则,return u**(1/b)
.
代码如下:
import scipy.stats as st
import random
def mixpowerlaw(a,b,size):
unif=st.uniform.rvs(size=size)
pla=st.powerlaw(a)
plb=st.powerlaw(b)
ret=[0 for i in range(size)]
for i in range(size):
if unif[i]<0.5:
ret[i]=pla.rvs()
else:
ret[i]=plb.rvs()
return ret
# Alternate implementation
def mixpowerlaw2(a,b):
if random.random()<0.5:
return random.random()**(1/a)
else:
return random.random()**(1/b)
* 这是混合分布的 PDF 的性质。由于您在问题的示例中添加了两个 PDF(均集成为 1),因此组合函数将集成为 2,因此该函数除以 2 以获得再次集成为 1 的 PDF。这个组合的 PDF 是 (PDF1)*(1/2) + (PDF2)*(1/2)
形式的混合,因此在这种情况下从这个 PDF 采样意味着从 PDF1
以概率 1/2 或从 PDF2
以概率 1/2 采样。另见 p. Devroye 的“Non-Uniform 随机变量生成”的第 66 个。
我需要从大致如下所示的分布生成随机样本:
为了生成上图,我组合了两个幂律:
y = a * x**(a - 1) + b * x**(b - 1)
使用参数 a, b
控制分布的形状。理想情况下,单个形状参数会更好。
scipy
的 Continuous distributions 部分定义了数十种发行版,但我一直无法找到符合我需要的发行版。
在这种情况下,答案很简单。
a * x**(a - 1) + b * x**(b - 1)
在区间 [0, 1]
上的积分仅为 2,表明此分布是两个 power-law 分布的混合,其中一个以相同的概率绘制和另一个一样。* 具体来说,您的分布具有以下密度函数:
(a * x**(a - 1))/2 + (b * x**(b - 1))/2
.
然后,从这个分布中抽样的一个简单算法是:
- 生成
u
,[0, 1] 中的均匀随机变量。 - 概率为 1/2,return
u**(1/a)
。否则,returnu**(1/b)
.
代码如下:
import scipy.stats as st
import random
def mixpowerlaw(a,b,size):
unif=st.uniform.rvs(size=size)
pla=st.powerlaw(a)
plb=st.powerlaw(b)
ret=[0 for i in range(size)]
for i in range(size):
if unif[i]<0.5:
ret[i]=pla.rvs()
else:
ret[i]=plb.rvs()
return ret
# Alternate implementation
def mixpowerlaw2(a,b):
if random.random()<0.5:
return random.random()**(1/a)
else:
return random.random()**(1/b)
* 这是混合分布的 PDF 的性质。由于您在问题的示例中添加了两个 PDF(均集成为 1),因此组合函数将集成为 2,因此该函数除以 2 以获得再次集成为 1 的 PDF。这个组合的 PDF 是 (PDF1)*(1/2) + (PDF2)*(1/2)
形式的混合,因此在这种情况下从这个 PDF 采样意味着从 PDF1
以概率 1/2 或从 PDF2
以概率 1/2 采样。另见 p. Devroye 的“Non-Uniform 随机变量生成”的第 66 个。