使用高斯分布生成综合数据

时间:2019-11-26 22:03:22

标签: python

问题

在我正在阅读的paper中,它定义了一个新指标,并且作者声称比以前的指标有一些优势。他们通过一些综合数据验证了自己的主张,如下所示:

enter image description here

其指标的实现非常简单。但是,我不确定他们如何创建这种综合数据。

我做了什么

这看起来像高斯,x只是在一定的时间间隔内,我尝试使用以下代码,但未获得与本文介绍的图表相似的任何东西。

import numpy as np

def generate_gaussian(size=1000, lb=-0.1, up=0.1):
    data = np.random.randn(5000)
    data = data[(data <= up) & (data >= lb)][:size]
    return data

np.random.seed(1234)
base = generate_gaussian()
background_pos = base + 0.3
background_neg = base + 0.7

enter image description here

现在我想知道作者是否使用我不知道的某些特殊分布(高斯除外)来创建这些数据?

3 个答案:

答案 0 :(得分:2)

Numpy具有numpy.random.normal,可从正态(高斯)分布中抽取随机样本。

import numpy as np
import matplotlib.pyplot as plt


sigma = 0.05
s0 = np.random.normal(0.2, sigma, 5000)
s1 = np.random.normal(0.6, sigma, 5000)

plt.hist(s0, 300, density=True, color="b")
plt.hist(s1, 300, density=True, color="r")
plt.xlim(0, 1)
plt.show()

Histograms

您可以更改mu(平均值)和sigma的值以更改分布

mu = 0.55
sigma = 0.1
dist = np.random.normal(mu, sigma, 5000)

答案 1 :(得分:1)

您已将数据截断为+/- 0.1。如果您在大约+/- 3的范围内看,则归一化的高斯分布只会“看起来是高斯”。

import numpy as np

def generate_gaussian(size=1000, lb=-3, up=3):
    data = np.random.randn(5000)
    data = data[(data <= up) & (data >= lb)][:size]
    return data

np.random.seed(1234)
base = generate_gaussian()
background_pos = base + 5
background_neg = base + 15

答案 2 :(得分:1)

您可以使用scipy.stats.norminfo)。

导入库

>>> from scipy.stats import norm
>>> from matplotlib import pyplot

情节

>>> pyplot.hist(norm.rvs(loc=1, scale=0.5, size=10000), bins=30, alpha=0.5, label='norm_1')
>>> pyplot.hist(norm.rvs(loc=5, scale=0.5, size=10000), bins=30, alpha=0.5, label='norm_2')
>>> pyplot.legend()
>>> pyplot.show()

enter image description here


说明:

正态分布由均值(loc,分布中心)和标准分布(scale,分布散布或宽度的度量)定义。 rvs生成大小为size的所需正态分布的随机样本。例如,下一个代码生成4个正态分布的随机元素(平均= 1,SD = 1)。

>>> norm.rvs(loc=1, scale=1, size=4)
array([ 0.52154255,  1.40873701,  1.55959291, -0.01730568])