scipy.stats.rv_continuous.fit

rv_continuous.fit(data, *args, **kwds)[源代码]

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

拟合的起始估计由输入自变量给出;对于没有随起始估计一起提供的任何自变量, self._fitstart(data) 被调用来生成这样的。

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

参数
dataarray_like

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

Arg1,arg2,arg3,..。浮点数,可选

任何形状特征参数的起始值(那些未提供的参数将通过调用 _fitstart(data) )。没有默认值。

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

  • scale :分布比例参数的初始猜测。

特殊关键字参数被识别为包含固定的某些参数:

  • F0.Fn:保持各自的形状参数固定。或者,可以按名称指定要修复的形状参数。例如,如果 self.shapes == "a, b"fafix_a 相当于 f0 ,以及 fbfix_b 相当于 f1

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

  • fscale:保持Scale参数固定为指定值。

  • 优化器:要使用的优化器。优化器必须使用 func ,和起始位置作为前两个参数,加上 args (对于要传递给要优化的函数的额外参数)和 disp=0 若要取消作为关键字参数的输出,请执行以下操作。

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

退货
parameter_tuple浮点数的元组

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

注意事项

使用 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 -关键字。要保留第0个形状参数,请执行以下操作 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)