Basic method for pseudo-random number sampling
逆変換サンプリング( 反転サンプリング 、 逆確率積分変換 、 逆変換法 、 スミルノフ 変換 とも呼ばれる )は、 疑似乱数サンプリング 、つまり 累積分布関数 が与えられた任意の 確率分布 から ランダム にサンプル番号を生成するための基本的な方法です。
逆変換サンプリングは、0から1まで の数値を 確率として解釈し、その数値を一様サンプルとして抽出し、確率変数の累積分布関数における最小の数値を返します 。 例えば 、 平均 が 0で 標準偏差 が1の標準 正規分布 を想像してください。以下の表は、一様分布から抽出されたサンプルと、それらの標準正規分布における表現を示しています。 u {\displaystyle u} x ∈ R {\displaystyle x\in \mathbb {R} } F ( x ) ≥ u {\displaystyle F(x)\geq u} F {\displaystyle F} F {\displaystyle F}
均一サンプルから正規サンプルへの変換 u {\displaystyle u} F − 1 ( u ) {\displaystyle F^{-1}(u)} .5 0 .975 1.95996 .995 2.5758 .999999 4.75342 1-2 −52 8.12589
正規分布の逆変換サンプリング 曲線の下の面積の割合をランダムに選び、その割合の面積がちょうどその数値の左側に現れるように、定義域内の数値を返します。直感的に言えば、裾野の端にある数値を選ぶ可能性は低いでしょう。裾野の端にある数値は面積が非常に小さいため、0または1に非常に近い数値を選ぶ必要があるからです。
計算的には、この手法は分布の分位関数 を計算すること 、つまり 分布の 累積分布関数(CDF)(定義域内の数値を0から1の間の確率にマッピングする)を計算し、その関数 を反転することを 意味します。これが、この手法の多くの名称で「逆」または「反転」という用語が使われている理由です。 離散分布 の場合、CDFの計算は一般にそれほど難しくありません。分布の様々な点における個々の確率を単純に合計するだけです。しかし、 連続分布の場合は、分布の 確率密度関数 (PDF)を積分する必要がありますが、これはほとんどの分布( 正規分布 を含む)では解析的に行うことは不可能です。その結果、この手法は多くの分布に対して計算効率が悪く、他の手法が好まれます。しかし、 棄却標本抽出法 に基づくサンプラーなど、より一般的に適用可能なサンプラーを構築するには便利な手法です 。
正規分布 の場合 、 対応する分位関数の 解析的表現が存在しないことから、計算的には他の手法(例えば、 ボックス・ミュラー変換 )が適している可能性がある。単純な分布であっても、逆変換サンプリング法は改良の余地があることは多い。 [1] 例えば、 ジッグラトアルゴリズム や 棄却サンプリングを 参照のこと。一方、中程度の次数多項式を用いれば正規分布の分位関数を極めて正確に近似することが可能であり、実際、この手法は十分に高速であるため、統計パッケージ R では、逆サンプリングが正規分布からのサンプリングのデフォルト手法となっている。 [2]
任意の確率変数 に対して 、確率変数 は と同じ分布に従います 。ここで は の 累積分布関数 の 一般化逆関数 であり 、 上で一様です 。 [3] X ∈ R {\displaystyle X\in \mathbb {R} } F X − 1 ( U ) {\displaystyle F_{X}^{-1}(U)} X {\displaystyle X} F X − 1 {\displaystyle F_{X}^{-1}} F X {\displaystyle F_{X}} X {\displaystyle X} U {\displaystyle U} [ 0 , 1 ] {\displaystyle [0,1]}
連続ランダム変数 の場合 、 逆確率積分変換 は 、累積分布関数 を持つ 連続ランダム変数 の場合、ランダム変数が 上で 一様で ある ことを示す 確率積分変換 の逆です 。 X {\displaystyle X} F X {\displaystyle F_{X}} U = F X ( X ) {\displaystyle U=F_{X}(X)} [ 0 , 1 ] {\displaystyle [0,1]}
からへ の反転手法のグラフ 。右下には通常の関数、左上にはその反転が表示されています。 x {\displaystyle x} F ( x ) {\displaystyle F(x)}
直感 から、 CDF を使用し て を生成したいとします。は連続した厳密に 増加する関数 であると 仮定します 。これにより、優れた直感が得られます。 U ∼ U n i f [ 0 , 1 ] {\displaystyle U\sim \mathrm {Unif} [0,1]} X {\displaystyle X} F X ( x ) . {\displaystyle F_{X}(x).} F X ( x ) {\displaystyle F_{X}(x)}
となるような 厳密に単調な変換を見つけられるかどうかを確認したい 。 T : [ 0 , 1 ] ↦ R {\displaystyle T:[0,1]\mapsto \mathbb {R} } T ( U ) = d X {\displaystyle T(U){\overset {d}{=}}X}
F X ( x ) = Pr ( X ≤ x ) = Pr ( T ( U ) ≤ x ) = Pr ( U ≤ T − 1 ( x ) ) = T − 1 ( x ) , for x ∈ R , {\displaystyle F_{X}(x)=\Pr(X\leq x)=\Pr(T(U)\leq x)=\Pr(U\leq T^{-1}(x))=T^{-1}(x),{\text{ for }}x\in \mathbb {R} ,}
ここで、最後のステップでは、 が 上で均一である 場合にが使用されます 。 Pr ( U ≤ y ) = y {\displaystyle \Pr(U\leq y)=y} U {\displaystyle U} [ 0 , 1 ] {\displaystyle [0,1]}
つまり、 は の逆関数 、つまり、 F X {\displaystyle F_{X}} T {\displaystyle T} T ( u ) = F X − 1 ( u ) , u ∈ [ 0 , 1 ] . {\displaystyle T(u)=F_{X}^{-1}(u),u\in [0,1].}
したがって 、 X {\displaystyle X} F X − 1 ( U ) . {\displaystyle F_{X}^{-1}(U).}
方法 逆変換サンプリングの概略図。 の逆関数は で定義できます 。 y = F X ( x ) {\displaystyle y=F_{X}(x)} F X − 1 ( y ) = i n f { x | F X ( x ) ≥ y } {\displaystyle F_{X}^{-1}(y)=\mathrm {inf} \{x|F_{X}(x)\geq y\}} 逆変換サンプリングが均一に分布した乱数から正規分布した乱数を生成する様子を示すアニメーション 逆変換サンプリング法が解決する問題は次のとおりです。
を累積分布関数 によって分布が記述できる 確率変数 とし ます 。 X {\displaystyle X} F X {\displaystyle F_{X}} この分布に従って分布する 値を生成したいと考えています。 X {\displaystyle X} 逆変換サンプリング方式は次のように機能します。
区間 の標準一様分布から 乱数を生成する 。つまり、 u {\displaystyle u} [ 0 , 1 ] {\displaystyle [0,1]} U ∼ U n i f [ 0 , 1 ] . {\displaystyle U\sim \mathrm {Unif} [0,1].} 目的の CDF の 一般化逆関数 、つまり を見つけます 。 F X − 1 ( u ) {\displaystyle F_{X}^{-1}(u)} を計算します 。計算された確率変数は 分布を持ち 、したがって と同じ法則に従います 。 X ′ ( u ) = F X − 1 ( u ) {\displaystyle X'(u)=F_{X}^{-1}(u)} X ′ ( U ) {\displaystyle X'(U)} F X {\displaystyle F_{X}} X {\displaystyle X} 言い換えると、累積分布関数 と一様変数が与えられた場合 、確率変数は 分布に従います 。 [3] F X {\displaystyle F_{X}} U ∈ [ 0 , 1 ] {\displaystyle U\in [0,1]} X = F X − 1 ( U ) {\displaystyle X=F_{X}^{-1}(U)} F X {\displaystyle F_{X}}
連続の場合、そのような逆関数を微分方程式を満たすオブジェクトとして扱うことができる。 [4] そのような微分方程式の中には、 非線形であるにもかかわらず、明示的な 冪級数解を許容するものもある。 [5]
例 例えば、確率変数 と 累積分布関数があるとする。 U ∼ U n i f ( 0 , 1 ) {\displaystyle U\sim \mathrm {Unif} (0,1)} F ( x ) = 1 − exp ( − x ) {\displaystyle {\begin{aligned}F(x)=1-\exp(-{\sqrt {x}})\end{aligned}}} 逆行列を求めるには、 F ( F − 1 ( u ) ) = u {\displaystyle F(F^{-1}(u))=u} F ( F − 1 ( u ) ) = u 1 − exp ( − F − 1 ( u ) ) = u F − 1 ( u ) = ( − log ( 1 − u ) ) 2 = ( log ( 1 − u ) ) 2 {\displaystyle {\begin{aligned}F(F^{-1}(u))&=u\\1-\exp \left(-{\sqrt {F^{-1}(u)}}\right)&=u\\F^{-1}(u)&=(-\log(1-u))^{2}\\&=(\log(1-u))^{2}\end{aligned}}} ここからステップ 1、2、3 を実行します。 別の例として、x ≥ 0(それ以外は0)の 指数分布 を用いる 。y=F(x)を解くと逆関数が得られる。 F X ( x ) = 1 − e − λ x {\displaystyle F_{X}(x)=1-e^{-\lambda x}} x = F − 1 ( y ) = − 1 λ ln ( 1 − y ) . {\displaystyle x=F^{-1}(y)=-{\frac {1}{\lambda }}\ln(1-y).} つまり、 a からいくつかを抽出し て計算すると、 これは 指数分布に従います。 y 0 {\displaystyle y_{0}} U ∼ U n i f ( 0 , 1 ) {\displaystyle U\sim \mathrm {Unif} (0,1)} x 0 = F X − 1 ( y 0 ) = − 1 λ ln ( 1 − y 0 ) , {\displaystyle x_{0}=F_{X}^{-1}(y_{0})=-{\frac {1}{\lambda }}\ln(1-y_{0}),} x 0 {\displaystyle x_{0}} この考え方は次のグラフに示されています。 乱数 y i は 、0から1までの一様分布、すなわちY ~ U(0, 1)から生成されます。これらはy軸上に色付きの点として描画されます。各点はx=F −1 (y)に従ってマッピングされ、2つの例の点には灰色の矢印が示されています。この例では、指数分布を使用しています。したがって、x ≥ 0の場合、確率密度は 、累積分布関数は です 。したがって、 となります 。この方法を用いると、指数分布で予想される通り、多くの点が0に近づき、高いx値を持つ点はごくわずかであることがわかります。 ϱ X ( x ) = λ e − λ x {\displaystyle \varrho _{X}(x)=\lambda e^{-\lambda \,x}} F ( x ) = 1 − e − λ x {\displaystyle F(x)=1-e^{-\lambda \,x}} x = F − 1 ( y ) = − ln ( 1 − y ) λ {\displaystyle x=F^{-1}(y)=-{\frac {\ln(1-y)}{\lambda }}} yではなく1-yから始めても分布は変わらないことに注意してください。したがって、計算上は[0, 1]の範囲で乱数yを生成し、単純に計算するだけで十分です。 x = F − 1 ( y ) = − 1 λ ln ( y ) . {\displaystyle x=F^{-1}(y)=-{\frac {1}{\lambda }}\ln(y).}
正しさの証明 を累積分布関数 とし 、 を その 一般逆関数とする(CDFは弱単調かつ 右連続 なので 下限値 を使用する ) [6] 。 F {\displaystyle F} F − 1 {\displaystyle F^{-1}}
F − 1 ( u ) = inf { x ∣ F ( x ) ≥ u } ( 0 < u < 1 ) . {\displaystyle F^{-1}(u)=\inf \;\{x\mid F(x)\geq u\}\qquad (0<u<1).} 主張: が上の 均一 ランダム変数 である 場合、その CDF は です 。 U {\displaystyle U} [ 0 , 1 ] {\displaystyle [0,1]} F − 1 ( U ) {\displaystyle F^{-1}(U)} F {\displaystyle F}
証拠:
Pr ( F − 1 ( U ) ≤ x ) = Pr ( U ≤ F ( x ) ) ( F is right-continuous, so { u : F − 1 ( u ) ≤ x } = { u : u ≤ F ( x ) } ) = F ( x ) ( because Pr ( U ≤ u ) = u , when U is uniform on [ 0 , 1 ] ) {\displaystyle {\begin{aligned}&\Pr(F^{-1}(U)\leq x)\\&{}=\Pr(U\leq F(x))\quad &(F{\text{ is right-continuous, so }}\{u:F^{-1}(u)\leq x\}=\{u:u\leq F(x)\})\\&{}=F(x)\quad &({\text{because }}\Pr(U\leq u)=u,{\text{ when }}U{\text{ is uniform on }}[0,1])\\\end{aligned}}}
切り捨て分布 逆変換サンプリングは、棄却サンプリングのコストをかけずに、区間 上の 切り捨て分布 のケースに簡単に拡張できます 。同じアルゴリズムを使用できますが、0 から 1 の間で均一に分布する乱数を生成する代わりに 、から の間 で 均一に分布する を生成し 、再度 を取ります 。 ( a , b ] {\displaystyle (a,b]} u {\displaystyle u} u {\displaystyle u} F ( a ) {\displaystyle F(a)} F ( b ) {\displaystyle F(b)} F − 1 ( u ) {\displaystyle F^{-1}(u)}
反転回数の削減 多数のサンプルを得るためには、分布の逆行列を同数だけ実行する必要がある。多数のサンプルを得ながら逆行列の回数を減らす一つの方法は、多項式 カオス 展開の枠組みの中で、いわゆる確率的コロケーション・モンテカルロ・サンプラー(SCMCサンプラー)を適用することである。これにより、解析的に逆行列が利用可能な変数(例えば標準正規分布)の独立サンプルを用いて、元の分布の逆行列を数回実行するだけで、任意の数のモンテカルロ・サンプルを生成することができる。 [7]
ソフトウェア実装 逆サンプリング法が閉形式で利用できない場合に、逆数の近似値を用いて逆サンプリング法を適用するためのソフトウェア実装が存在します。例えば、ユーザーがPDF [8] やCDFなどの分布に関する情報を提供すれば、逆数の近似値を計算することができます。
CライブラリUNU.RAN [9] RライブラリRunuran [10] scipy.stats のPythonサブパッケージサンプリング [11] [12]
参照
参考文献 ^ Luc Devroye (1986). 非一様乱数変量生成 (PDF) . ニューヨーク: Springer-Verlag. 2014年8月18日時点のオリジナル (PDF)からアーカイブ。 2012年4月12日 閲覧 。 ^ 「R: 乱数生成」。 ^ ab McNeil, Alexander J.; Frey, Rüdiger; Embrechts, Paul (2005). 定量的リスク管理 . プリンストン・シリーズ・イン・ファイナンス. プリンストン大学出版局, プリンストン, ニュージャージー州. p. 186. ISBN 0-691-12255-5 。 ^ Steinbrecher, György; Shaw, William T. (2008年3月19日). 「Quantile mechanics」. European Journal of Applied Mathematics . 19 (2): 87– 112. doi :10.1017/S0956792508007341. S2CID 6899308. ^ Arridge, Simon; Maass, Peter; Öktem, Ozan; Schönlieb, Carola-Bibiane (2019). 「データ駆動型モデルを用いた逆問題の解決」. Acta Numerica . 28 : 1– 174. doi : 10.1017/S0962492919000059 . ISSN 0962-4929. S2CID 197480023. ^ Luc Devroye (1986). 「第2.2節 F(X) = U の数値解による逆変換」 (PDF) . 非一様乱数生成 . ニューヨーク: Springer-Verlag. ^ LA Grzelak, JAS Witteveen, M. Suarez, CW Oosterlee. 確率的コロケーション・モンテカルロ・サンプラー:高コスト分布からの高効率サンプリング. https://ssrn.com/abstract=2529691 ^ Derflinger, Gerhard; Hörmann, Wolfgang; Leydold, Josef (2010). 「密度のみが既知の場合の数値逆変換によるランダム変量生成」 (PDF) . ACM Transactions on Modeling and Computer Simulation . 20 (4). doi :10.1145/945511.945517. ^ 「UNU.RAN - ユニバーサル非一様乱数ジェネレータ」。 ^ 「Runuran: 'UNU.RAN'乱数変数ジェネレータへのRインターフェース」2023年1月17日。 ^ 「乱数ジェネレーター (Scipy.stats.sampling) — SciPy v1.12.0 マニュアル」。 ^ Baumgarten, Christoph; Patel, Tirth (2022). 「Pythonによるランダム変数の自動生成」. 第21回Python in Science Conference Proceedings . pp. 46– 51. doi :10.25080/majora-212e5952-007.