编程语言
首页 > 编程语言> > python-计算高斯的标准偏差

python-计算高斯的标准偏差

作者:互联网

我有一个数字列表,将其与长度相对应可得出高斯.我想在这个高斯上计算标准偏差,但是我得到的值(使用np.std()函数)显然太小了(我得到的数值为0.00143…当它应该为8.234时……).我认为我一直在计算y轴而不是x轴的标准偏差(这是应该在标准偏差上进行的计算),但是我对如何执行此操作有些困惑?

我已经包含了我的代码和一张正试图计算std开发人员的高斯图片.

#max_k_value_counter counts the number of times the maximum value of k comes up.

max_k_value_counter_sum = sum(max_k_value_counter)
prob_max_k_value = [0] * len(max_k_value_counter)

# Calculate the probability of getting a particular value for k
for i in range(len(max_k_value_counter)):
        prob_max_k_value[i] = float(max_k_value_counter[i]) / max_k_value_counter_sum

print "Std dev on prob_max_k_value", np.std(prob_max_k_value)

# Plot p(k) vs k_max to calculate the errors on k
plt.plot(range(len(prob_max_k_value)), prob_max_k_value)
plt.xlim(0, 200)
plt.xlabel(r"$k$", fontsize=16)
plt.ylabel(r"$p(k)$", fontsize=16)
plt.show()

解决方法:

您正在测量概率的标准偏差而不是实际值;这是一个示例,其中我从真实的标准正态分布中得出:

>>> from scipy.stats import norm
>>> xs   = np.linspace(-3, 3, 100)
>>> pdf  = norm.pdf(xs)
>>> prob = pdf / pdf.sum() # these are probabilities
>>> np.std(prob)           # note the very small value below
0.008473522157507624

正确的方法是使用以下公式:

测量方差,然后取平方根以获得标准差;第一项基本上是第二个矩,第二项是均方:

>>> mu   = xs.dot(prob)               # mean value
>>> mom2 = np.power(xs, 2).dot(prob)  # 2nd moment
>>> var  = mom2 - mu**2               # variance
>>> np.sqrt(var)                      # standard deviation
0.98764819824739092

请注意,我们得到的值非常接近1,这与我从标准法线绘制得出的事实是一致的;

标签:statistics,graph,python,math,gaussian
来源: https://codeday.me/bug/20191029/1962139.html