创建概率分布的混合样本

创建概率分布的混合样本,第1张

创建概率分布混合样本

从分布的混合中采样(在其中添加了一些系数为c_1,c_2,…,c_n的PDF)相当于分别独立采样,然后对于每个索引,以概率c_k从第k个样本中选择值。

后者的混合步骤可以有效地完成

numpy.random.choice
。这是混合三个分布的示例。分布在中列出
distributions
,系数在中列出
coefficients
。有一个胖正态分布,一个均匀分布和一个狭窄的正态分布,系数为0.5、0.2、0.3。根据给定的系数,混合发生在
data[np.arange(sample_size),random_idx]
之后
random_idx

import numpy as npimport matplotlib.pyplot as pltdistributions = [    {"type": np.random.normal, "kwargs": {"loc": -3, "scale": 2}},    {"type": np.random.uniform, "kwargs": {"low": 4, "high": 6}},    {"type": np.random.normal, "kwargs": {"loc": 2, "scale": 1}},]coefficients = np.array([0.5, 0.2, 0.3])coefficients /= coefficients.sum()      # in case these did not add up to 1sample_size = 100000num_distr = len(distributions)data = np.zeros((sample_size, num_distr))for idx, distr in enumerate(distributions):    data[:, idx] = distr["type"](size=(sample_size,), **distr["kwargs"])random_idx = np.random.choice(np.arange(num_distr), size=(sample_size,), p=coefficients)sample = data[np.arange(sample_size), random_idx]plt.hist(sample, bins=100, density=True)plt.show()



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5642937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存