首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用高斯分布生成合成数据

用高斯分布生成合成数据
EN

Stack Overflow用户
提问于 2019-11-26 22:03:22
回答 3查看 958关注 0票数 0

问题

在我现在正在阅读的一个中,它定义了一个新的度量,作者声称与以前的度量相比有一些优势。他们用一些合成数据来验证他们的说法,这些数据如下所示

它们的度量的实现非常简单。然而,我不知道他们是如何创建这种合成数据的。

我所做的

这看起来像高斯,其中x只是在一定的间隔内,我尝试了下面的代码,但没有得到任何类似于在文件中显示的图形。

代码语言:javascript
复制
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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-26 22:14:43

您在+/- 0.1处切断了数据。如果你看了大约+/- 3的范围,一个标准化的Gausian分布只‘看上去是高斯的’。

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2019-11-26 22:25:01

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

代码语言:javascript
复制
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()

您可以更改mu (平均值)和sigma的值以更改发行版

代码语言:javascript
复制
mu = 0.55
sigma = 0.1
dist = np.random.normal(mu, sigma, 5000)
票数 2
EN

Stack Overflow用户

发布于 2019-11-26 22:31:16

您可以使用scipy.stats.norm (信息)。

导入库

代码语言:javascript
复制
>>> from scipy.stats import norm
>>> from matplotlib import pyplot

绘图

代码语言:javascript
复制
>>> 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()

澄清:

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

代码语言:javascript
复制
>>> norm.rvs(loc=1, scale=1, size=4)
array([ 0.52154255,  1.40873701,  1.55959291, -0.01730568])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59060030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档