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 已經是Generator
或RandomState
實例,則使用該實例。
註解
分佈類別實例的公用方法(例如,
pdf
、cdf
)會檢查其引數,並將有效引數傳遞給私有計算方法(_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 將自動從覆寫方法的簽名(pdf
、cdf
等)中推斷出來。如果由於某些原因,您希望避免依賴內省,您可以將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
並建立一個實例。有了這個,我們現在就有了一個功能完整的分佈,所有相關方法都由框架自動產生。請注意,上面我們定義了一個標準常態分佈,平均值為零,變異數為單位。分佈的位移和縮放可以使用
loc
和scale
參數來完成:gaussian.pdf(x, loc, scale)
基本上計算y = (x - loc) / scale
和gaussian._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)分佈的支援。