正态分布
scipy
为诸多统计分布函数设计了类,这些类封装了几乎相同的方法,下面先以正态分布为示例,预览一下强大的统计功能。
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
rv = norm()
# 绘制正态分布的概率密度曲线
x = np.linspace(-3, 3, 100)
plt.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
# 生成1000个随机数,并绘制直方图
r = norm.rvs(size=1000)
plt.hist(r, density=True, bins='auto', alpha=0.2)
# 将norm.pdf当作静态方法调用
plt.plot(x, norm.pdf(x),
'r-', lw=1, alpha=0.6, label='norm pdf')
plt.legend()
plt.xlim(-3,3)
plt.show()
结果如图所示
其中,norm
为正态分布类,rv
是正态分布对象,然后调用rv.pdf
函数,绘制出rv
这个标准正态分布的概率密度函数曲线。
接下来通过rvs
函数,创建了1000个随机数,并通过hist
函数将其直方图画出,可以看到,这个直方图的分布情况,与概率密度函数所刻画的范围是相对一致的。
最后,直接调用norm
的静态方法.pdf
,得到了与rv.pdf
相同的输出结果。
这就是scipy.stats
中封装的概率类的基本使用方法,下面对这些类做一个统一的介绍。
属性和方法
作为概率类,其最重要的功能就是生成随机数,通过调用.rvs
方法,可以生成任意维度的随机数,其定义如下
rvs(loc=0, scale=1, size=1, random_state=None) # 连续型
rvs(p, loc=0, size=1, random_state=None) # 离散型
其中,loc
和scale
用于尺度放缩,size
为生成随机数的维度,random_state
为随机数种子,指定后便于结果复现。
对于分布函数、概率密度函数等分布的基本特征,这些类除了提供原始函数外,还提供了对数函数,这些函数的输入参数均为(k, a, n, loc=0)
原始函数 | 对数函数 | 说明 |
---|---|---|
pmf | logpmf | 概率质量函数,适用于离散型 |
logpdf | 概率密度函数,适用于连续型 | |
cdf | logcdf | 累加分布函数 |
ppf | 百分点函数(cdf的反函数) | |
sf | logsf | 残差函数 (1 - cdf) |
isf | 残差函数的反函数 |
概率类提供了一些最常用的统计量函数,离散分布的参数均为(a, n, loc=0)
,连续分布的参数均为(loc=0, scale=1)
。
中位数 | 均值 | 方差 | 标准差 | 熵 |
---|---|---|---|---|
median |
mean |
var |
std |
entropy |
另外,还提供了一个统一的函数stats(a, n, loc=0, moments=’mv’)
,可以一次性输出这些统计量。其moments
的标准字符为:Mean(‘m’), variance(‘v’), skew(‘s’) orkurtosis(‘k’)。
通过interval
函数,可以求取分布的置信区间,其输入参数如下,confidence
为置信水平。
interval(confidence, loc=0, scale=1) # 连续型
interval(confidence, p, loc=0) # 离散型
通过expect
函数可以计算概率分布的期望,其输入参数为
expect(func, args=(), loc=0, scale=1, lb=None, ub=None, conditional=False, **kwds) # 连续型
expect(func, args=(p,), loc=0, lb=None, ub=None, conditional=False) # 离散型
其中,func
为作用在概率分布之上的函数,lb, ub
表示求期望的区间。
测试
下面仍然基于正态分布,对一些函数进行简单的测试
>>> rv.interval(0.5)
(-0.6744897501960817, 0.6744897501960817)
>>> rv.interval(0.5, loc=2)
(1.3255102498039184, 2.6744897501960816)
>>> rv.interval(0.5, scale=2)
(-1.3489795003921634, 1.3489795003921634)
上面代码测试了置信区间函数,第一行表示在(-0.6744897501960817, 0.6744897501960817)
区间内发生的概率为
50
%
50\%
50%。
在指明loc
参数为2
后,整个结果向右平移了2;指明scale
为2后,概率分布函数被拉平了,从而置信区间也跟着乘以2。文章来源:https://www.toymoban.com/news/detail-450775.html
>>> rv.expect()
0.0
>>> rv.expect(lb=-1, ub=2)
0.18797975800595532
>>> rv.expect(lb=-1, ub=3)
0.2375388761072053
>>> rv.expect(lb=-1, ub=4)
0.24183689429337848
上面的代码测试了正态分布的期望函数,当指定计算期望的区间后,其期望值不断发生变化,例如在(-1,2)
区间内,其期望为0.18。文章来源地址https://www.toymoban.com/news/detail-450775.html
到了这里,关于python中最全面的统计分布工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!