scipy中的norm.fit有什么意义?

What is the point of norm.fit in scipy?

我正在生成随机数据样本并使用 scipy.stats.norm.fit 绘制其 pdf 以生成我的位置和比例参数。

我想看看如果我只是使用 numpy 计算均值和标准差而没有任何实际拟合,我的 pdf 会有什么不同。令我惊讶的是,当我绘制两个 pdf 并打印两组 mu 和 std 时,我得到的结果完全相同。所以我的问题是,如果我可以计算样本的均值和标准差并且仍然得到相同的结果,norm.fit 的意义何在?

这是我的代码:

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt

data = norm.rvs(loc=0,scale=1,size=200)

mu1 = np.mean(data)

std1 = np.std(data)

print(mu1)
print(std1)

mu, std = norm.fit(data)

plt.hist(data, bins=25, density=True, alpha=0.6, color='g')

xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
q = norm.pdf(x, mu1, std1)
plt.plot(x, p, 'k', linewidth=2)
plt.plot(x, q, 'r', linewidth=1)
title = "Fit results: mu = %.5f,  std = %.5f" % (mu, std)
plt.title(title)

plt.show()

这是我得到的结果:

Pdf of a random set of values

mu1 = 0.034824979915482716

std1 = 0.9945453455908072

关键是除了正态分布之外还有其他几种分布。 Scipy 为从数据中学习这些分布的参数提供了一致的 API。 (想要指数分布而不是正态分布?是 scipy.stats.expon.fit。)

当然,你的方法也行得通,因为正态分布的参数恰好是均值和标准差。但这是关于跨发行版提供一致的接口,包括那些并非如此的发行版。