當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。