python - 如何获取 scipy.stats 中的分布模式

标签 python scipy statistics distribution

scipy.stats 库具有查找拟合分布的平均值和中位数的函数,但没有查找众数的函数。

如果我在拟合数据后得到了分布的参数,如何找到拟合分布的众数

最佳答案

如果我没有理解错的话,您想要找到拟合分布的众数而不是给定数据的众数。基本上,我们可以通过以下 3 个步骤来完成。

第 1 步:从分布生成数据集

from scipy import stats
from scipy.optimize import minimize
# generate a norm data with 0 mean and 1 variance
data = stats.norm.rvs(loc= 0,scale = 1,size = 100)
data[0:5]

输出:

array([1.76405235, 0.40015721, 0.97873798, 2.2408932 , 1.86755799])

第2步:拟合参数

# fit the parameters of norm distribution
params = stats.norm.fit(data)
params

输出:

(0.059808015534485, 1.0078822447165796)

请注意,stats.norm 有 2 个参数,即 locscale。对于scipy.stats中不同的dist,参数是不同的。我认为将参数存储在元组中然后在下一步中将其解压很方便。

第 3 步:获取拟合分布的众数(密度函数的最大值)

# continuous case
def your_density(x):
    return -stats.norm.pdf(x,*paras)
minimize(your_density,0).x

输出:

0.05980794

请注意,norm 分布的 mode 等于 mean。在这个例子中这是一个巧合。

还有一件事scipy对待连续dist和离散dist不同(它们有不同的父类),你可以用下面的代码在离散dist上做同样的事情.

## discrete dist, example for poisson
x = np.arange(0,100) # the range of x should be specificied
x[stats.poisson.pmf(x,mu = 2).argmax()] # find the x value to maximize pmf

输出:

1

您可以尝试使用自己的数据和发行版!

关于python - 如何获取 scipy.stats 中的分布模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59662920/

相关文章:

python - Scipy:ipython 笔记本中的并行计算?

python - 从数据集*编辑*中标准化普朗克定律的 curve_fit 中的值

r - 如何绘制具有自定义分布的直方图?

hibernate - 是否有一个很好的 GUI 可用于显示 Hibernate 统计信息?

python - 自然语言时间解析器

python - Matplotlib imshow 内存使用过多

python - 将 bash 脚本拆分为单独的命令并一一运行它们

Python fsolve 使用对象进行调和

python - 将数组写入 csv 的列中

java - 如何在JAVA中加载couchbase的预热状态