首页 > 解决方案 > 没有标准偏差值的范围内的 Numpy 正态分布

问题描述

我必须从机器学习任务的间隔中生成随机值。我想在 numpy 的范围内有一个正态分布,我在网上搜索它。我发现了这个问题How to get a normal distribution within a range in numpy? 但我没有任何标准偏差列。

值是这样的:

−21.8 ± 6.7
−4.3 ± 0.1
−7.4 ± 0.5

所以我知道最小值和最大值。但是没有标准偏差。

谢谢。

编辑:

我想从这些值中生成 10 个值。第一个值是平均值。第二个值显示最大值(和最小值)与平均值之间的距离。要清楚:

在此处输入图像描述

x = -21.8

图表的最小值将为 -21.8 - 6.7 = -29.5

图表的最大值将为 -21.8 + 6.7 = -15.1

标签: pythonnumpyrandomstatisticsnormal-distribution

解决方案


您可以使用scipy.stats.truncnorm从随机正态变量中抽取多个样本。但是,对于任何正态随机变量,都需要指定变量均值和标准差。我知道您不知道标准,但它极大地影响了数据的生成方式。让我们看几个从一个极端到另一个极端的例子:

from scipy.stats import truncnorm
import seaborn as sns

m = -21.8
w = 6.7

for s in [0.5, 2, 7]:
   lower, upper = -w/s, w/s
   r = truncnorm(a=lower, b=upper, loc=m, scale=s)

   size = 1_000
   sample = r.rvs(size)
   sns.distplot(sample)

结果是:

在此处输入图像描述

您可以看到,s=7分布几乎是平坦且均匀的,另一方面,因为s=0.5它极不可能超出范围 - 您需要与平均值相差 13-14 个标准差。


推荐阅读