scipy.stats.

rv_continuous#

class scipy.stats.rv_continuous(momtype=1, a=None, b=None, xtol=1e-14, badvalue=None, name=None, longname=None, shapes=None, seed=None)[原始碼]#

一個通用的連續隨機變數類別,旨在用於子類別化。

rv_continuous 是一個基礎類別,用於建構特定連續隨機變數的分佈類別和實例。它不能直接作為分佈使用。

參數:
momtypeint,選用

要使用的通用動差計算類型:0 代表 pdf,1(預設值)代表 ppf。

afloat,選用

分佈支援的下限,預設值為負無限大。

bfloat,選用

分佈支援的上限,預設值為正無限大。

xtolfloat,選用

用於通用 ppf 的定點計算容差。

badvaluefloat,選用

結果陣列中指示違反某些引數限制的值,預設值為 np.nan。

namestr,選用

實例的名稱。此字串用於建構分佈的預設範例。

longnamestr,選用

當子類別沒有自己的 docstring 時,此字串會用作 docstring 第一行的一部分。注意:longname 的存在是為了向後相容性,請勿用於新的子類別。

shapesstr,選用

分佈的形狀。例如,"m, n" 代表一個分佈,該分佈將兩個整數作為其所有方法的兩個形狀引數。如果未提供,形狀參數將從實例的私有方法 _pdf_cdf 的簽名中推斷出來。

seed{None, int, numpy.random.Generator, numpy.random.RandomState},選用

如果 seed 為 None(或 np.random),則使用 numpy.random.RandomState 單例。如果 seed 為 int,則使用新的 RandomState 實例,並以 seed 作為種子。如果 seed 已經是 GeneratorRandomState 實例,則使用該實例。

註解

分佈類別實例的公用方法(例如,pdfcdf)會檢查其引數,並將有效引數傳遞給私有計算方法(_pdf_cdf)。對於 pdf(x),如果 x 在分佈的支援範圍內,則 x 有效。形狀參數是否有效由 _argcheck 方法決定(預設為檢查其引數是否嚴格為正數)。

子類別化

新的隨機變數可以透過子類別化 rv_continuous 類別並重新定義至少 _pdf_cdf 方法(正規化為位置 0 和尺度 1)來定義。

如果正引數檢查對您的 RV 不正確,那麼您還需要重新定義 _argcheck 方法。

對於大多數 scipy.stats 分佈,支援區間不依賴於形狀參數。x 在支援區間內等同於 self.a <= x <= self.b。如果支援的任一端點確實依賴於形狀參數,則 i) 分佈必須實作 _get_support 方法;且 ii) 這些依賴端點必須從分佈對 rv_continuous 初始化器的呼叫中省略。

其餘方法存在正確但可能較慢的預設值,但為了速度和/或準確性,您可以覆寫

_logpdf, _cdf, _logcdf, _ppf, _rvs, _isf, _sf, _logsf

預設方法 _rvs 依賴於 cdf 的反函數 _ppf,應用於均勻隨機變量。為了有效率地產生隨機變量,需要覆寫預設的 _ppf(例如,如果反函數 cdf 可以用明確的形式表示),或者需要在自訂的 _rvs 方法中實作取樣方法。

如果可能,您應該覆寫 _isf_sf_logsf。主要原因是為了提高數值準確性:例如,生存函數 _sf 計算為 1 - _cdf,如果 _cdf(x) 接近於 1,則可能會導致精度損失。

可以由子類別覆寫的方法

_rvs
_pdf
_cdf
_sf
_ppf
_isf
_stats
_munp
_entropy
_argcheck
_get_support

還有其他(內部和私有)通用方法可用於交叉檢查和除錯,但在直接呼叫時可能在所有情況下都有效。

關於 shapes 的註解:子類別不需要明確指定它們。在這種情況下,shapes 將自動從覆寫方法的簽名(pdfcdf 等)中推斷出來。如果由於某些原因,您希望避免依賴內省,您可以將 shapes 明確指定為實例建構子的引數。

凍結分佈

通常,您必須為分佈的每個方法呼叫提供形狀參數(以及選用的位置和尺度參數)。

或者,可以呼叫物件(作為函數)以固定形狀、位置和尺度參數,傳回「凍結」的連續 RV 物件

rv = generic(<形狀(s)>,loc=0,scale=1)

rv_frozen 物件,具有相同的方法,但保留給定的形狀、位置和尺度固定

統計量

預設情況下,統計量使用數值積分計算。為了提高速度,您可以使用 _stats 重新定義此項

  • 取得形狀參數並傳回 mu、mu2、g1、g2

  • 如果您無法計算其中一個,請將其傳回為 None

  • 也可以使用關鍵字引數 moments 定義,該引數是由「m」、「v」、「s」和/或「k」組成的字串。僅應計算並傳回字串中出現的組件,順序為「m」、「v」、「s」或「k」,遺失值傳回為 None。

或者,您可以覆寫 _munp,它接受 n 和形狀參數,並傳回分佈的第 n 個非中心動差。

深度複製/序列化

如果深度複製(序列化/反序列化等)分佈或凍結分佈,則任何底層隨機數產生器都會與其一起深度複製。一個含義是,如果分佈在複製前依賴於單例 RandomState,則在複製後它將依賴於該隨機狀態的副本,並且 np.random.seed 將不再控制狀態。

範例

若要建立新的高斯分佈,我們將執行以下操作

>>> from scipy.stats import rv_continuous
>>> class gaussian_gen(rv_continuous):
...     "Gaussian distribution"
...     def _pdf(self, x):
...         return np.exp(-x**2 / 2.) / np.sqrt(2.0 * np.pi)
>>> gaussian = gaussian_gen(name='gaussian')

scipy.stats 分佈是實例,因此在這裡我們子類別化 rv_continuous 並建立一個實例。有了這個,我們現在就有了一個功能完整的分佈,所有相關方法都由框架自動產生。

請注意,上面我們定義了一個標準常態分佈,平均值為零,變異數為單位。分佈的位移和縮放可以使用 locscale 參數來完成:gaussian.pdf(x, loc, scale) 基本上計算 y = (x - loc) / scalegaussian._pdf(y) / scale

屬性:
random_state

取得或設定用於產生隨機變量的產生器物件。

方法

rvs(*args, **kwds)

給定類型的隨機變量。

pdf(x, *args, **kwds)

給定 RV 在 x 處的機率密度函數。

logpdf(x, *args, **kwds)

給定 RV 在 x 處的機率密度函數的對數。

cdf(x, *args, **kwds)

給定 RV 的累積分布函數。

logcdf(x, *args, **kwds)

給定 RV 在 x 處的累積分布函數的對數。

sf(x, *args, **kwds)

給定 RV 在 x 處的生存函數 (1 - cdf)。

logsf(x, *args, **kwds)

給定 RV 的生存函數的對數。

ppf(q, *args, **kwds)

給定 RV 在 q 處的百分點函數(cdf 的反函數)。

isf(q, *args, **kwds)

給定 RV 在 q 處的反生存函數(sf 的反函數)。

moment(order, *args, **kwds)

指定階數的分佈的非中心動差。

stats(*args, **kwds)

給定 RV 的一些統計量。

entropy(*args, **kwds)

RV 的微分熵。

expect([func, args, loc, scale, lb, ub, ...])

透過數值積分計算函數相對於分佈的期望值。

median(*args, **kwds)

分佈的中位數。

mean(*args, **kwds)

分佈的平均值。

std(*args, **kwds)

分佈的標準差。

var(*args, **kwds)

分佈的變異數。

interval(confidence, *args, **kwds)

中位數周圍具有相等面積的信賴區間。

__call__(*args, **kwds)

凍結給定引數的分佈。

fit(data, *args, **kwds)

從資料傳回形狀(如果適用)、位置和尺度參數的估計值。

fit_loc_scale(data, *args)

使用第一和第二動差從資料估計位置和尺度參數。

nnlf(theta, x)

負對數概似函數。

support(*args, **kwargs)

分佈的支援。