scipy.stats.weibull_min

scipy.stats.weibull_min(* args,** kwds )= <scipy.stats._continuous_distns.weibull_max_gen object>源码 威布尔最小连续随机变量。

作为rv_continuous类的实例,weibull_max继承了这个类的一切通用方法(请参见下面的完整列表),并使用此分布的公式来完善它们。

也可以看看
weibull_min

笔记

weibull_max的概率密度函数为:
python 威布尔分布图 威布尔分布参数含义_numpy

x<0,c>0。
weibull_max采取c作为形状参数。

以上的概率密度以“标准化”形式定义。要移动和/或缩放分布,请使用loc和scale参数。具体而言,weibull_min.pdf(x, c, loc, scale)相当于用 weibull_min.pdf(y, c) / scale,其中y = (x - loc) / scale

译者注:原文中公式如此,但是以上的公式可能与我们常见的weibull分布的pdf形式不同(以下为三参数):
python 威布尔分布图 威布尔分布参数含义_matlab_02
python 威布尔分布图 威布尔分布参数含义_python_03
如果直接用loc和scale换进去,看上去可能成这个样子:
python 威布尔分布图 威布尔分布参数含义_scipy_04
公式前的c没有除以尺度参数scale,看上去不对劲。不过,实际情况并不是这样。
真正将y替换为(x-loc)/scale只是在累积分布函数cdf中发生的,而pdf则是相当于对替换完的cdf求了个导数。因此当实际运行的时候,cdf的公式变成了这样:
python 威布尔分布图 威布尔分布参数含义_numpy_05
pdf它的公式则是cdf的导数,是这样的:
python 威布尔分布图 威布尔分布参数含义_python_06
我们可以做个试验验证一下:
运行以下代码:

from scipy.stats import weibull_min
 import matplotlib.pyplot as plt
 import numpy as np
 c = 1.79
 x = np.linspace(0,
 5, 100)
 scale=3# 设置尺度参数为3
 plt.plot(x, weibull_min.pdf(x, c,scale=scale),
 ‘r-’, lw=5, alpha=0.6, label=‘weibull_min pdf’)# 调用weibull_main绘制,红线
 rv = weibull_min( c )
 plt.plot(x, c/scale*(x/scale)**(c-1)*np.e**(-(x/scale)**c),
 ‘k-’, lw=2, label=‘pdf formula’)# 按照pdf公式绘制,黑线
 plt.legend(loc=‘best’, framenotallow=False)
 plt.show()

由此我们可以得到如下的拟合图像:

python 威布尔分布图 威布尔分布参数含义_python_07


可以看出其中的pdf是正确的,与pdf公式得到的结果完全吻合。

例子

>>> from scipy.stats import weibull_min
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)

首先计算一下:

>>> c = 1.79
>>> mean, var, skew, kurt = weibull_min.stats(c, moments='mvsk')

绘制概率密度函数(pdf):

>>> x = np.linspace(weibull_min.ppf(0.01, c),
...                 weibull_min.ppf(0.99, c), 100)
>>> ax.plot(x, weibull_min.pdf(x, c),
...        'r-', lw=5, alpha=0.6, label='weibull_min pdf')

或者,可以调用分布对象(作为函数)以固定形状,位置和比例参数。这将返回一个“冻结的” RV对象,该对象固定了给定的参数。

冻结分布并显示冻结的pdf:

>>> rv = weibull_min(c)
>>> ax.plot(x, rv.pdf(x), 'k-', lw=2, label='frozen pdf')
检查cdf和的准确性ppf:
>>> vals = weibull_min.ppf([0.001, 0.5, 0.999], c)
>>> np.allclose([0.001, 0.5, 0.999], weibull_min.cdf(vals, c))
True

生成随机数:

>>> r = weibull_min.rvs(c, size=1000)

并比较直方图:

>>> ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
>>> ax.legend(loc='best', frameon=False)
>>> plt.show()

方法

方法

用途

rvs(c,loc = 0,scale = 1,size = 1,random_state = None)

随机变量生成。

pdf(x,c,loc = 0,scale = 1)

概率密度函数。

logpdf(x,c,loc = 0,scale = 1)

概率密度函数的对数。

cdf(x,c,loc = 0,scale = 1)

累积分布函数。

logcdf(x,c,loc = 0,scale = 1)

累积分布函数的日志。

sf(x,c,loc = 0,scale = 1)

生存函数(也定义为1-cdf,但sf有时更准确)

logsf(x,c,loc = 0,scale = 1)

生存函数的对数。

ppf(q,c,loc = 0,scale = 1)

百分比点函数(与cdf—百分位数相反)

isf(q,c,loc = 0,scale = 1)

逆生存函数(的逆sf)

moment(n,c,loc = 0,scale = 1)

n阶非中心矩

stats(c,loc = 0,scale = 1,moments =‘mv’)

均值(‘m’),方差(‘v’),偏斜(‘s’)和/或峰度(‘k’)。

entropy(c,loc = 0,scale = 1)

RV的(微分)熵。

fit(data,C,loc= 0,scale= 1)

通用数据的参数估计。

expect(func,args =(c,),loc = 0,scale = 1,lb = None,ub = None,conditional= False,** kwds)

函数(单参数)相对于分布的期望值。

median(c,loc = 0,scale = 1)

分布的中位数。

mean(c,loc = 0,scale = 1)

分布的平均值。

var(c,loc = 0,scale = 1)

分布的方差。

std(c,loc = 0,scale = 1)

分布的标准偏差。

interval(alpha,c,loc = 0,scale = 1)

包含分布的Alpha百分比的范围的端点