逆関数法のソースを表示
←
逆関数法
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[File:Inversion method.svg|thumb|300px|逆関数法の概念図。{{math|''F''(''x'')}} を確率変数 {{mvar|X}} の従う確率分布の累積分布関数とし、{{mvar|U}} を標準一様分布に従う確率変数とする。このとき、確率変数 {{math|''F''<sup>-1</sup>(''U'')}} は{{mvar|X}} と同じ確率分布に従う。]] '''逆関数法'''(ぎゃくかんすうほう、{{lang-en-short|inversion method, inverse transform method}})とは、[[累積分布関数]]の[[逆関数]]を用いて、[[連続一様分布#標準一様|標準一様分布]]に従う[[確率変数]]から、所望の分布に従う[[確率変数]]を生成させる方法<ref name="devroye1986_II.2">[[#devroye1986|Luc Devroye (1986), II.2]]</ref><ref name="fushimi1989_chapter2">[[#fushimi1989|伏見 (1989), 第2章]]</ref><ref name="yotsuji2010_chapter2">[[#yotsuji2010|四辻 (2010), 第2章]]</ref>。'''逆関数サンプリング法'''(ぎゃくかんすうサンプリングほう、{{lang-en-short|inverse transform sampling}})とも呼ばれる。計算機シミュレーションにおいて、一様分布に従う[[乱数]]から、所望の乱数を生成させるのに用いられる。 == 方法 == [[File:Generalized inversion method.svg|thumb|300px|累積分布関数の逆関数 {{math|''F''<sup>-1</sup>(''y'')}} の定義。一般に {{math|''F''(''x'')}} は逆関数を持つとは限らないが、右連続かつ単調非減少であり、{{math|''F''<sup>-1</sup>(''y''){{=}}inf{''x'': ''F''(''x'')≥''y''}}} で定義することができる。]] {{mvar|X}} を生成させたい確率分布に従う[[確率変数]]とし、 {{math|''F''(''x'') {{=}}Pr{{mset|''X'' ≤ ''x''}}}}をその[[累積分布関数]]とする。{{math|''y''{{=}}''F''(''x'')}} が[[連続]]な[[単調増加関数]]であれば、逆関数 {{math|''F''<sup>-1</sup>(''y'')}} が存在する。{{mvar|U}} を{{math|[0,1)}}上の一様分布に従う確率変数とすると、 :<math>X:=F^{-1}(U) </math> は累積分布関数 {{math|''F''(''x'')}} をもつ確率分布に従う確率変数となる。実際、これは :<math>\mathrm{Pr}\{F^{-1}(U) \leq x \} =\mathrm{Pr}\{U \leq F(x) \}=F(x) </math> であることから確認できる。 一般に {{math|''F''(''x'')}} は[[右連続]]な[[単調写像|単調非減少関数]]であり、通常の意味での逆関数が存在するとは限らないが、その逆関数 {{math|''F''<sup>-1</sup>(''y'')}} を :<math> F^{-1}(y):=\inf{\{x| F(x) \geq y\}}, \quad 0 \leq y \leq 1</math> で定義すれば、同様な結果が得られる<ref name="devroye1986_II.2"></ref><ref name="fushimi1989_chapter2"></ref>。このように、一様分布に従う確率変数 {{mvar|U}} と累積分布関数の逆関数 {{math|''F''<sup>−1</sup>(''y'')}} から所望の分布に従う確率変数 {{math|''X''{{=}}''F''<sup>−1</sup>(''U'')}} を生成させる方法を逆関数法という。逆関数法は、原理的には連続分布、離散分布に適用可能であるが、必ずしも逆関数が容易にも求まるとは限らず、また高速な乱数生成が得られるとは限らない<ref name="fushimi1989_chapter2"></ref>。 ==例== === 指数分布 === 期待値を {{math|''μ'' > 0}} とする[[指数分布]]の累積分布関数 :<math>F(x)=1-e^{-x/\mu} </math> に対し、逆関数は :<math>F^{-1}(y)=- \mu \ln{(1-y)} </math> であり、 :<math>X=- \mu \ln{(1-U)} </math> となる。{{math|1 − ''U''}} も標準一様分布に従うため、高速化のために{{math|1 − ''U''}} を {{mvar|U}} で置き換えた :<math>X=- \mu \ln{(U)} </math> を使うことができる。この場合、{{math|''U''{{=}}0}}での処理に注意する必要がある。 === コーシー分布 === {{ill|尺度母数|en|Scale parameter}}を {{math|''σ'' > 0}} とする[[コーシー分布]]の累積分布関数 :<math>F(x)=\frac{1}{2}+\frac{1}{\pi}\arctan{\frac{x}{\sigma}}</math> に対し、その逆関数は :<math>F^{-1}(y)=\sigma \tan{\pi \left (y-\frac{1}{2} \right )} </math> であり、 :<math> X=\sigma \tan{\pi \left (U-\frac{1}{2} \right )} </math> となる。 === 離散分布 === 離散分布に従う確率変数 {{mvar|X}} についても、累積分布関数の逆関数を{{math|''F''<sup>−1</sup>(''y''){{=}}inf{{mset|''x''|''F''(''x'') ≥ ''y''}}}}と定義することで、逆関数法を適用できる<ref name="fushimi1989_chapter2"></ref>。値 {{math|''x''<sub>1</sub>, ''x''<sub>2</sub>, … ,}}を取る確率が {{math|''p''<sub>1</sub>, ''p''<sub>2</sub>, … ,}} である離散分布において、 :<math>\sum_{i=1}^{k-1}{p_i}< y \leq \sum_{i=1}^{k}{p_i} </math> が満たされるならば、 :<math>F^{-1}(y)=x_k </math> であるから、 :<math>X=x_k, \quad \mathrm{if}\, \, \sum_{i=1}^{k-1}{p_i}< U \leq \sum_{i=1}^{k}{p_i} </math> となる。但し、この方法は {{mvar|X}} の取りうる値が多いと大小関係の評価時間がかかり、高速化には不向きである。 == 一覧 == 逆関数が陽に求まり、逆関数法が直接適用できる連続分布として、以下の例がある<ref name="yotsuji2010_chapter3">[[#yotsuji2010|四辻 (2010), 第3章]]</ref>。 {|class="wikitable" style="margin: 1em auto 1em auto" !分布!!<math>F(x)</math>!!<math>X=F^{-1}(U)</math> |- |[[指数分布]]<br />(平均値:{{math|μ>0}})||<math>1-\exp{\left (-\frac{x}{\mu} \right )}, \quad x \geq 0</math>||<math> - \mu \ln{(1-U)}</math> |- |[[ワイブル分布]]<br />(尺度母数:{{math|η>0}}、形状母数:{{math|β>0}})||<math>1-\exp{\left ( -\left ( \frac{x}{\eta} \right)^{\beta} \right )}, \quad x \geq 0</math>||<math> \eta ((-\ln{(1-U)})^{1/\beta}</math> |- |[[ガンベル分布]]<br />(尺度母数:{{math|η>0}}、位置母数:{{math|−∞<μ<+∞}})||<math>\exp{ \left ( -\exp {\left ( -\left( \frac{x-\mu}{\eta} \right) \right)} \right)}, \quad -\infty <x< +\infty</math>||<math> \mu- \eta \ln{(-\ln{U})}</math> |- |[[コーシー分布]]<br />(尺度母数:{{math|η>0}})||<math>\frac{1}{2}+\frac{1}{\pi}\arctan{\frac{x}{\eta}}, \quad -\infty <x< +\infty</math>||<math>\eta \tan{\pi \left ( U-\frac{1}{2} \right )}</math> |- |[[ロジスティック分布]]<br />(尺度母数:{{math|η>0}}、位置母数:{{math|−∞<μ<+∞}})||<math>\frac{1}{1+\exp{\left (-\frac{x-\mu}{\eta} \right )}}, \quad -\infty <x< +\infty</math>||<math> \mu+ \eta \ln{\left (\frac{U}{1-U} \right )}</math> |- |[[パレート分布]]<br />(尺度母数:{{math|''b'' >0}}、形状母数:{{math|''a'' >0}})||<math>1-\left (\frac{b}{x} \right )^a , \quad x \geq b</math>||<math> \frac{b}{(1-U)^{1/a}}</math> |} == 積分や逆関数を求めるのが困難な場合 == 逆関数サンプリング法では与えられた確率分布の累積分布関数とその逆関数を計算する必要がある。それらの関数の解析解が既知である場合は、単純なプログラムで与えられた分布に従う擬似乱数を生成することができる。しかしこれらを[[解析的]]に求めるのは困難な場合もある。 === 求根アルゴリズムを使用する方法 === 確率密度関数を[[数値積分]]して累積分布関数の F(x) を求め、F(x) = u は F(x) - u = 0 の事なので[[求根アルゴリズム]]([[ニュートン法]]など)で x を求めてサンプリングする方法もある。F(x) - u の[[導関数]]は P(x) なので、それを求根アルゴリズムでは使用できる。 === 区分的線形累積分布関数を使用する方法 === 確率密度関数から[[区分的]]線形累積分布関数を作り、そこから求める方法もある<ref>[https://jp.mathworks.com/help/stats/examples/nonparametric-estimates-of-cumulative-distribution-functions-and-their-inverses.html 累積分布関数とその逆関数のノンパラメトリック推定 - MATLAB & Simulink Example - MathWorks 日本]</ref>。 == 同時確率分布の場合 == [[条件付き確率]]の定義 P(A, B) = P(B | A) P(A) を使い、単変量サンプリング問題に分割し、A → B と順番にサンプリングする方法もある。ただし、問題によっては、[[マルコフ連鎖モンテカルロ法]]などの他のサンプリング法を使用した方が良い場合もある。 == 正規分布の場合 == [[正規分布]]に従う擬似乱数の生成法としては、[[ボックス=ミュラー法]]などが知られる。正規分布の分位関数は解析的に求められないが、分位関数の[[微分#多項式近似への応用|多項式近似]]を用いた逆関数法でも十分に精度よく正規分布に従う擬似乱数を生成することができ、実際に[[R言語]]では正規分布に従う擬似乱数の生成に逆関数サンプリング法が使われている<ref>[https://stat.ethz.ch/R-manual/R-devel/library/base/html/Random.html R: Random Number Generation]</ref>。計算が高速な手法としては{{仮リンク|ジッグラト法|en|ziggurat algorithm}}がある。 == 出典 == {{脚注ヘルプ}} {{Reflist}} ==参考文献== * {{Cite book | |title= Non-Uniform Random Variate Generation |author1= Luc Devroye |authorlink1= |publisher=Springer-Verlag |year=1986 |isbn=978-3540963059 |ref=devroye1986}} *{{Cite book |和書 |title= 乱数 |author1= 伏見正則 |authorlink1=伏見正則 |publisher=東京大学出版会 |series=UP応用数学選書 |year=1989 |isbn=4-13-064072-0 |ref=fushimi1989}} * {{Cite book |和書 |title= 計算機シミュレーションのための確率分布乱数生成法 |author1= 四辻哲章 |authorlink1=四辻哲章 |publisher=プレアデス出版 |year=2010 |isbn=978-4903814353 |ref=yotsuji2010}} == 関連項目 == *[[乱数列]] *[[連続一様分布]] *[[モンテカルロ法]] *[[マルコフ連鎖モンテカルロ法]] {{確率分布の一覧}} {{デフォルトソート:きやくかんすうほう}} [[Category:乱数]] [[Category:確率分布]] [[Category:逆写像]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Cite book
(
ソースを閲覧
)
テンプレート:Ill
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:Math
(
ソースを閲覧
)
テンプレート:Mvar
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:確率分布の一覧
(
ソースを閲覧
)
テンプレート:脚注ヘルプ
(
ソースを閲覧
)
逆関数法
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報