正态分布#
- class scipy.stats.Normal(mu=None, sigma=None, **kwargs)[源代码]#
具有指定均值和标准差的正态分布。
正态分布的概率密度函数为
\[f(x) = \frac{1}{\sigma \sqrt{2 \pi}} \exp { \left( -\frac{1}{2}\left( \frac{x - \mu}{\sigma} \right)^2 \right)}\]对于 \(x \in (-\infty, \infty)\)。此类接受一个参数化:
mu
对于 \(\mu \in (-\infty, \infty)\),sigma
对于 \(\sigma \in (0, \infty)\)。- 参数:
- tol正浮点数,可选
计算所需的相对容差。如果未指定,计算可能会更快;如果提供,计算可能更可能满足所需的精度。
- validation_policy{None, “skip_all”}
指定要执行的输入验证级别。 如果未指定,则执行输入验证以确保边缘情况下的适当行为(例如,参数超出域,参数超出分布支持等),并提高输出 dtype、shape 等的一致性。 传递
'skip_all'
以避免在可接受粗糙边缘时这些检查的计算开销。- cache_policy{None, “no_cache”}
指定中间结果的缓存程度。如果未指定,则缓存某些计算的中间结果(例如,分布支持、矩等),以提高未来计算的性能。传递
'no_cache'
以减少类实例保留的内存。
- 属性:
- 所有参数都可用作属性。
方法
support
()随机变量的支持度
plot
([x, y, t, ax])绘制分布的函数。
sample
([shape, method, rng])从分布中随机抽样。
moment
([order, kind, method])正整数阶的原始矩、中心矩或标准矩。
mean
(*[, method])均值(关于原点的原始一阶矩)
median
(*[, method])中位数(第 50 个百分位数)
mode
(*[, method])众数(最可能的值)
variance
(*[, method])方差(中心二阶矩)
standard_deviation
(*[, method])标准差(中心二阶矩的平方根)
skewness
(*[, method])偏度(标准化三阶矩)
kurtosis
(*[, method, convention])峰度(标准化四阶矩)
pdf
(x, /, *[, method])概率密度函数
logpdf
(x, /, *[, method])概率密度函数的对数
cdf
(x[, y, method])累积分布函数
icdf
(p, /, *[, method])累积分布函数的逆函数。
ccdf
(x[, y, method])互补累积分布函数
iccdf
(p, /, *[, method])逆互补累积分布函数。
logcdf
(x[, y, method])累积分布函数的对数
ilogcdf
(logp, /, *[, method])累积分布函数对数的逆函数。
logccdf
(x[, y, method])互补累积分布函数的对数
ilogccdf
(logp, /, *[, method])互补累积分布函数对数的逆函数。
entropy
(*[, method])微分熵
logentropy
(*[, method])微分熵的对数
另请参阅
- 随机变量转换指南
教程
注释
以下缩写在整个文档中使用。
PDF:概率密度函数
CDF:累积分布函数
CCDF:互补 CDF
entropy:微分熵
log-F:F 的对数(例如,log-CDF)
inverse F:F 的逆函数(例如,逆 CDF)
API 文档旨在描述 API,而不是作为统计参考。 努力在使用功能所需的级别上做到正确,而不是在数学上严格。 例如,可以隐含地假设连续性和可微性。 对于精确的数学定义,请查阅您喜欢的数学文本。
示例
要使用分布类,必须使用与接受的参数化之一相对应的关键字参数来实例化它。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy import stats >>> from scipy.stats import Normal >>> X = Normal(mu=-0.81, sigma=0.69)
为方便起见,可以使用
plot
方法来可视化分布的密度和其他函数。>>> X.plot() >>> plt.show()
可以使用
support
方法获得底层分布的支持度。>>> X.support() (np.float64(-inf), np.float64(inf))
与所有参数化相关的参数的数值可作为属性使用。
>>> X.mu, X.sigma (np.float64(-0.81), np.float64(0.69))
要评估底层分布在参数
x=-1.13
处的概率密度/质量函数>>> x = -1.13 >>> X.pdf(x), X.pmf(x) (np.float64(0.5192263911374636), np.float64(0.0))
累积分布函数、其补函数以及这些函数的对数的评估方式类似。
>>> np.allclose(np.exp(X.logccdf(x)), 1 - X.cdf(x)) True
这些函数相对于参数
x
的逆函数也可用。>>> logp = np.log(1 - X.ccdf(x)) >>> np.allclose(X.ilogcdf(logp), x) True
请注意,分布函数及其对数也具有双参数版本,用于处理两个参数之间的概率质量。 结果往往比朴素实现更准确,因为它避免了减法消除。
>>> y = -0.56 >>> np.allclose(X.ccdf(x, y), 1 - (X.cdf(y) - X.cdf(x))) True
有用于计算集中趋势、离散度、高阶矩和熵的度量的方法。
>>> X.mean(), X.median(), X.mode() (np.float64(-0.81), np.float64(-0.81), np.float64(-0.81))
>>> X.variance(), X.standard_deviation() (np.float64(0.4760999999999999), np.float64(0.69))
>>> X.skewness(), X.kurtosis() (np.float64(0.0), np.float64(3.0))
>>> np.allclose(X.moment(order=6, kind='standardized'), ... X.moment(order=6, kind='central') / X.variance()**3) True
>>> np.allclose(np.exp(X.logentropy()), X.entropy()) True
可以使用
sample
从底层分布中抽取伪随机样本。>>> X.sample(shape=(4,)) array([-0.79332831, -0.61826103, -0.74610898, -0.78086839]) # may vary