python - norm.fit 在 scipy 中有什么意义?
问题描述
我生成一个随机数据样本并使用 scipy.stats.norm.fit 绘制其 pdf 以生成我的 loc 和 scale 参数。
我想看看如果我只是使用 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()
这是我得到的结果:
mu1 = 0.034824979915482716
标准 1 = 0.9945453455908072
解决方案
关键是除了正态分布之外还有其他几种分布。Scipy 提供了一个一致的 API,用于从数据中学习这些分布的参数。(想要指数分布而不是正态分布?它是scipy.stats.expon.fit
。)
所以当然,你的方法也有效,因为正态分布的参数恰好是平均值和标准差。但这是关于提供跨发行版的一致接口,包括那些不正确的发行版。
推荐阅读
- sql - oracle SQL中的特殊算术
- javascript - 用 Jest 测试 ES6 类会抛出“不是构造函数”错误
- mongodb - 无法使用 inMemory 存储引擎在 3 节点副本集中创建用户和分配角色 - MongoDB
- c - 在 C 中打印字符串
- laravel - Laravel Mix 构建成功但没有变化
- java - 套接字编程 - 服务器是否对请求进行排队?
- mysql - 如何计算 varchar 列中的不同值
- javascript - 在momentjs中每5天查找连续日期
- kubernetes - 你如何连接两个 Istio 集群?
- java - 使用 Heroku 临时文件系统作为 Ehcache 磁盘存储