当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy rv_continuous.fit用法及代码示例


本文简要介绍 python 语言中 scipy.stats.rv_continuous.fit 的用法。

用法:

rv_continuous.fit(data, *args, **kwds)#

从数据中返回对形状(如果适用)、位置和比例参数的估计。默认估计方法是最大似然估计 (MLE),但也可以使用矩量法 (MM)。

拟合的起始估计由输入参数给出;对于未提供初始估计的任何参数,调用self._fitstart(data) 来生成此类参数。

通过传入关键字参数f0f1、...、fn(用于形状参数)和flocfscale(分别用于位置和比例参数),可以将某些参数固定为特定值。

参数

data 数组 或 CensoredData 实例

用于估计分布参数的数据。

arg1, arg2, arg3,… 浮点数,可选

任何 shape-characterizing 参数的起始值(未提供的将通过调用 _fitstart(data) 来确定)。没有默认值。

**kwds 浮点数,可选
  • loc:分布位置参数的初始猜测。

  • 尺度:分布尺度参数的初始猜测。

特殊关键字参数被认为是固定某些参数:

  • f0…fn :保持各自的形状参数固定。或者,可以通过名称指定要修复的形状参数。例如,如果 self.shapes == "a, b"fafix_a 等效于 f0 ,并且 fbfix_b 等效于 f1

  • floc:将位置参数固定为指定值。

  • fscale:将比例参数固定为指定值。

  • 优化器:要使用的优化器。优化器必须将 func 和起始位置作为前两个参数,加上 args(用于传递给要优化的函数的额外参数)和 disp=0 以抑制作为关键字参数的输出。

  • 方法:使用的方法。默认为“MLE”(最大似然估计); “MM”(矩量法)也可用。

返回

parameter_tuple 浮点数元组

估计任何形状参数(如果适用),然后是位置和比例。对于大多数随机变量,将返回形状统计信息,但也有例外(例如 norm )。

抛出

类型错误,ValueError

如果输入无效

FitError

如果拟合失败或产生的拟合无效

注意

使用method="MLE"(默认),通过最小化负对数似然函数来计算拟合。对于超出分布支持的观测值,应用较大的有限惩罚(而不是无限负对数似然)。

method="MM",通过最小化第一个之间的相对误差的 L2 范数来计算拟合k原始(大约为零)数据矩和相应的分布矩,其中k是非固定参数的数量。更准确地说,目标函数是:

(((data_moments - dist_moments)
  / np.maximum(np.abs(data_moments), 1e-8))**2).sum()

其中常数1e-8避免在数据矩消失的情况下被零除。通常,这个误差范数可以减少到零。请注意,标准矩量法可能会产生一些数据超出拟合分布支持的参数;这个实现并没有阻止这种情况。

对于任何一种方法,都不能保证返回的答案是全局最优的;它可能只是局部最优的,或者优化可能完全失败。如果数据包含 np.nannp.inf-np.inf 中的任何一个,则 fit 方法将引发 RuntimeError

例子

生成一些数据来拟合:从 beta 分布中抽取随机变量

>>> from scipy.stats import beta
>>> a, b = 1., 2.
>>> x = beta.rvs(a, b, size=1000)

现在我们可以拟合所有四个参数(ablocscale):

>>> a1, b1, loc1, scale1 = beta.fit(x)

我们还可以使用一些有关数据集的先验知识:让我们保持 locscale 固定:

>>> a1, b1, loc1, scale1 = beta.fit(x, floc=0, fscale=1)
>>> loc1, scale1
(0, 1)

我们还可以使用f -keywords 来固定形状参数。要保持 zero-th 形状参数 a 等于 1,请使用 f0=1 或等效的 fa=1

>>> a1, b1, loc1, scale1 = beta.fit(x, fa=1, floc=0, fscale=1)
>>> a1
1

并非所有分布都返回形状参数的估计值。例如,norm 仅返回位置和规模的估计值:

>>> from scipy.stats import norm
>>> x = norm.rvs(a, b, size=1000, random_state=123)
>>> loc1, scale1 = norm.fit(x)
>>> loc1, scale1
(0.92087172783841631, 2.0015750750324668)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.rv_continuous.fit。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。