第27回R勉強会@東京(#TokyoR)


   で学ぶ『逆(変換|関数)法』

    @teramonagi
自己紹介
• @teramonagi
• 乱数を撒くお仕事
• C++・R・python・VBA・F#
• 数理物理・データ分析
季節の変わり目ですね。
  ご自愛ください。
                        2
もくじ
• 乱数を撒くお仕事からの逆変換法
• 教科書的な逆変換法の説明
• Rで学ぶ逆変換法
• まとめ



                    3
自己紹介
• @teramonagi

•乱数を撒くお仕事
• C++・R・python・VBA・F#
季節の変わり目ですね。
  ご自愛ください。
                        4
乱数を撒くお仕事
           5
乱数を撒くお仕事
           6
撒かれる乱数?
          7
おじちゃん!
乱数はどこ
から仕入れ
 てくるの?
         8
八百屋・・・?
          9
魚屋・・・?
         10
雑貨屋・・・?
          11
困ったわね…どこか
ら乱数を仕入れれ
ばいいのかしら…




            12
君らエンジニア
    じゃろう?無けれ
    ば作りなさい!




CEOのアドバイス
           13
乱数作り方、いろいろ

逆変換法   マルコフ連鎖
       モンテカルロ法
合成法
       棄却採択法
重畳法

               14
(今回の)前提条件
[0,1]の一様乱数はある
         ||
 メルセンヌ・ツイスター
         ||
       runif() 15
[0,1]の一様乱数(runif)
    60


    40
count




    20


        0
            0.00   0.25   0.50   0.75   1.00
                                               16
逆変換法とは
   [0,1]の乱数
(例:0.1153…, 0.892…, 0.722…)    u
          変換              1
                     FX

FX      からの乱数                  x
                                   17
逆変換法とは
   [0,1]の乱数
(例:0.1153…, 0.892…, 0.722…)    u
                          1
          変換         FX
正規                    指数
分布        二項
          分布
                      分布       x
                                   18
逆変換法とは
1. [0,1]区間の一様乱数 u を取得
         1
2. x  FX u として x を計算    
3. x は累積分布関数 FXからの乱数

[0,1)の乱数                      変換        FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
                                   1
        u                     FX
                                           x   19
(例)逆変換法で指数分布
• 累積分布関数 FX x 1  e              x

• 累積分布関数の逆関数を計算
              u : FX x   1  e  x

                    1 log1  u 
  Xに


              x
ついて解く


                     
  F    1
        X    u    1 log1  u 
                                          20
(例)逆変換法で指数分布
1. rand.exponential <- function(lambda, u)
2. {
3.   - 1.0/lambda * log(1-u)
4. }
5. #λ=0.5とした指数分布に従う10000個生成
6. x <- sapply(runif(10000), function(u)rand.exponential(0.5,u))
7. #plot
8. qplot(x, geom = "blank") +
9.   geom_histogram(aes(y=..density..),fill="bisque",colour="black") +
10. stat_function(fun=dexp,color="red",size=1,arg=list(rate=0.5)) +
11. scale_x_continuous(limits = c(0, 10))




                                                                    21
(例)逆変換法で指数分布
          0.5
                      Rで作った頻度分布 VS 実際の密度関数
          0.4




          0.3
density




          0.2




          0.1




          0.0

                0.0     2.5   5.0   7.5   10.0
                              x

                                                 22
何でこれでい
いんだろう?




     23
もくじ
• 乱数を撒くお仕事からの逆変換法
• 教科書的な逆変換法の説明
• Rで学ぶ逆変換法
• まとめ



                    24
計算機シミュレーションのための
     確率分布乱数生成法




2.2.1 逆関数法(Inverse Transform method)
                                       25
パターン認識と機械学習 下




   11.1.1 標準的な分布
                   26
Rによるモンテカルロ法入門




    2.1.2 逆変換
                27
自然科学の統計学




 11.4.1 逆関数法
               28
そんなテキストらによくある証明


                
Pr X  x   Pr FX  U   x 
                      1


 PrU  FX x   FX x 

                             29
(昔の俺)お手上げ



        30
Yahoo知恵袋にも仲間が!




                 31
もう少し直感的な
説明が欲しいわね




       32
もくじ
• 乱数を撒くお仕事からの逆変換法
• 教科書的な逆変換法の説明
• Rで学ぶ逆変換法
• まとめ



                    33
お題
 カジノにいるSEが作る
ルーレット(二択)      34
ルーレットの設定(当選確率)



      50% 50%
あたり
はずれ
                35
うちのカジノで使う
からさ~逆変換法
でちょいちょいっと
作ってよ!ちょい
ちょいっと!




        36
ええと・・・「0~1」まで
の数値をあたり・はず
れ共に50%になるよう
に変換するにはどうし
たら・・・




                37
逆変換法的に考えて・・・
   [0,1]の乱数
(例:0.1153…, 0.892…, 0.722…)    u
          変換              1
                     FX
  あたり:50%
  はずれ:50%
                               x
                                   38
単純に考えて・・・


 あたり       はずれ

0.0      0.5      1.0
                    39
アルゴリズム的に考えて・・・

     あたり if 0.0  u  0.5
         ,
結果  
     はずれ, if 0.5  u  1.0
u~Uniform(0,1)

                           40
R的に考えて・・・
1.#uは一様乱数(runifの結果)
2.example.1 <- function(u)
3.{
4. if(u < 0.5){
5.    "あたり"
6. }
7. else{
8.    "はずれ"
9. }
10.}

                             41
こんな感じでPLOTしてます
1. library(grid)
2. library(ggplot2)
3. sampling <- function(size, generator)
4. {
5.    data.frame(table(sapply(runif(size), unction(u)generator(u)),dnn=c("Result")))
6. }
7. plot.bar <- function(x,colors)
8. {
9.    ggplot() +
10.     geom_bar(data=x, aes(x=Result, y=Freq,fill=Result),width=.8) +
11.     theme(
12.       legend.key.size=unit(2,"cm"),
13.       legend.text =element_text(size=20),
14.       legend.title=element_text(size=20),
15.       axis.text.x =element_text(size=25),
16.       axis.text.y =element_text(size=25),
17.       axis.title.x=element_text(size=25),
18.       axis.title.y=element_blank()
19.     ) +
20.     scale_fill_manual(values=colors)
21. }
22. plot.bar(sampling(10,example.1),c("#4F81BD","#C0504D"))


                                                                                       42
徹夜でコーディング43
10回回した結果
6
                         Result
4
                              あたり

2                             はずれ


0
    あたり            はずれ
          Result
                                  44
100回回した結果

40                        Result

                               あたり

20
                               はずれ


0
     あたり            はずれ
           Result
                                   45
1000回回した結果
500
400                     Result

300                          あたり

200
                             はずれ
100
 0
      あたり         はずれ
            Result
                                 46
大体50%ずつの確
率になってるね!
いいじゃないか!
儲けさせてもらっ
たよ!




        47
今月末は還元祭だ
から確率いじって
よ!逆変換法で
ちょいちょいだろ!
ちょいちょい!




        48
ルーレットの設定(当選確率)


      30%

あたり         70%
はずれ
                  49
ええと・・・「0~1」まで
の数値をから、あたり
70%・はずれが30%に
なるように変換するに
はどうしたら・・・




                50
単純に考えて・・・


  あたり         はずれ


0.0         0.7 1.0
                  51
アルゴリズム的に考えて・・・

     あたり if 0.0  u  0.7 
         ,
結果  
     はずれ, if 0.7  u  1.0
u~Uniform(0,1)


                           52
R的に考えて・・・
1.example.2 <- function(u)
2.{
3. if(u < 0.7){
4.    "あたり"
5. }
6. else{
7.    "はずれ"
8. }
9.}

                             53
徹夜でコーディング54
1000回回した結果
600
                        Result

400                          あたり


200                          はずれ


 0
      あたり         はずれ
            Result
                                 55
大体あたり70%・
はずれ30%の確
率になってるね!
いいじゃないか!




        56
プロジェクトの終了
        57
束の間の休息…
      58
But…
更なる嵐の予感…
       59
新アトラクション導入!
くじ引き(三択)      60
新しくくじ引き入れ
るからさ~逆変換
法でちょいちょ
いっと頼むわ!
ちょいちょいっと!




        61
くじ引きの設定


    33% 33%
青
赤
緑
     33%
              62
ええと・・・「0~1」まで
の数値をから、青
33%・赤33% ・緑33%で
出るように変換するに
はどうしたら・・・




                  63
逆変換法的に考えて・・・
   [0,1]の乱数
(例:0.1153…, 0.892…, 0.722…)    u
          変換              1
                     FX
   青: 33%
赤:33%, 緑: 33%
                               x
                                   64
単純に考えて・・・


  青       赤       緑
0.0   0.333… 0.666…   1.0
       (1/3)  (2/3)    65
アルゴリズム的に考えて・・・
                              1
    青            , if  0  u  
                              3
                      1       2
 くじ 赤            , if   u  
                      3       3

    緑 , if  3  u  1
           2         
                              
u~Uniform(0,1)                     66
R的に考えて・・・
1.example.3 <- function(u)
2.{
3. if(u < 1/3){
4.    "青"
5. }else if((1/3 <= 13 u) & (u < 2/3)){
                    1

6.    "赤"            3


7. }else if((2/3 <= u) & (u < 1.0)){
8.    "緑"
9. }
10.}


                                          67
徹夜でコーディング68
1000回回した結果
300                    Result

                            青
200
                            赤

100
                            緑


 0
      青    赤       緑
          Result
                                69
いいね!




   70
もっと儲けたい
からさ~くじに
細工してくれ
る?なぁに逆変
換法でちょい
ちょいだろ?




      71
くじ引きの設定

       10%

青   70% 20%
赤
緑
              72
ええと・・・「0~1」まで
の数値をから、青
10%・赤20%・緑70%で
出るように変換するに
はどうしたら・・・




                 73
逆変換法的に考えて・・・
   [0,1]の乱数
(例:0.1153…, 0.892…, 0.722…)    u
          変換              1
                     FX
    青: 10%
 赤:20%, 緑: 70%                 x
                                   74
単純に考えて・・・


青 赤            緑
0 0.1   0.3        1.0
 (10%) (30%)        75
アルゴリズム的に考えて・・・
   青, if 0.0  u  0.1
くじ 赤, if 0.1  u  0.3
   緑, if 0.3  u  1.0
u~Uniform(0,1)        76
R的に考えて・・・
1.example.4 <- function(u)
2.{
3. if(u < 0.1){
4.    "青"
5. }else if((0.1 <= 13 u) & (u < 0.3)){
                    1

6.    "赤"            3


7. }else if((0.3 <= u) & (u < 1.0)){
8.    "緑"
9. }
10.}


                                          77
徹夜でコーディング78
1000回回した結果
600                    Result

                            青
400
                            赤

200                         緑


 0
      青    赤       緑
          Result
                                79
儲かりすぎて笑い
が止まらないよ!
ハハハッハ!!




       80
あのちょいちょい野郎
がいる限り僕のデスマ
は止まらない・・・なん
とか先回りしないと!




              81
アルゴリズム的に考えて・・・
   青, if 0.0  u  0.1
くじ 赤, if 0.1  u  0.3
   緑, if 0.3  u  1.0
u~Uniform(0,1)        82
赤, if 0.1  u  0.3

                   83
0.1や0.3って
数字はどこか
ら来たのかし
ら・・・


            84
赤, if 0.1  u  0.3

                   85
青が出る確率(10%)+
   赤が出る確率(20%)


   赤, if 0.1  u  0.3
青が出る確率(10%)
                      86
アルゴリズム的に考えて・・・
   青, if 0.0  u  0.1
くじ 赤, if 0.1  u  0.3
   緑, if 0.3  u  1.0
u~Uniform(0,1)        87
緑, if 0.3  u  1.0
                   88
青が出る確率(10%)+
    赤が出る確率(20%)+
    緑が出る確率(70%)
青が出る確率(10%)+
赤が出る確率(20%)
    緑, if 0.3  u  1.0
                       89
何か法則性が
ありそうだな…




      90
アルゴリズム的に考えて・・・
   青, if 0.0  u  0.1
くじ 赤, if 0.1  u  0.3
   緑, if 0.3  u  1.0
u~Uniform(0,1)        91
結果を文字式へ
        x1 , if 0.0  u  0.1
 X      x2 , if 0.1  u  0.3
        x3 , if 0.3  u  1.0
u~Uniform(0,1)               92
確率を文字式へ
        x1   , if 0  u  Px1 


 X      x2   , if Px1   u  Px1   Px2 


        x3   , if Px1   Px2   u  Px1   Px2   Px3 


u~Uniform(0,1)                                              93
x1   , if 0  u  Px1 


x2   , if Px1   u  Px1   Px2 


x3   , if Px1   Px2   u  Px1   Px2   Px3 



                                                    94
和の記号(Σ)を使って書く
                                  
   x        0              1
     , if   Pxi   u   Pxi 
    1  i1                i 1    

   x      
    2  i1
            1                2
                                   
     , if   Pxi   u   Pxi 
                           i 1    
                                  
   x        2                3
     , if   Pxi   u   Pxi 
    3  i1                i 1    

                                   95
和の記号(Σ)を使って書く
                                      
           x        0           1
        , if   Pxi   u   Pxi 
       1  i1                  i 1   

           x 
       2  i1
               1                  2
        , if   Pxi   u   Pxi 
                                i 1
                                       
                                       
           x  2             3
        , if   pi  u   pi 
自分の番号(2)から1引いた数値
       3  i1             i 1
                                     
                                     
(1)と同じ番号(2)で和をとる
                                       96
素晴らしい洞察力!
でわ、これを一般化
してみよう!




        97
題材
くじ引き(N択)   98
x1
        くじ引きの設定
        x2
x3      x4
x5      x6
x7      x8
x9      x10
x11     x12
x13     x14
x15     x16
x17     x18
x19     x20
x21     x22
x23     x24
x25     x26
x27     …
x_N-1   xN
                  99
単純に考えて・・・


x1 x2 x3 x4 x5 x6 xN 1 xN
                ・・・


                ・・・


0                      1.0
                        100
N択くじの2番目結果は?


x        
         21

    2  i1
                         2
                                  
    , if   Pxi   u   Pxi 
                          i 1    
自分の番号から1引いた数値と
同じ番号で和をとる
                                101
N択くじのn番目結果は?


x         
          n 1

    n  i1
                          n
                                   
     , if   Pxi   u   Pxi 
                           i 1    
自分の番号から1引いた数値と
同じ番号で和をとる
                                 102
Nを∞にすると・・・
離散         連続
 xn         x
P x     px dx
           
Nを∞にすると・・・

x         
    n  i1
             n 1


                           i 1
                                n
                                   
     , if   Pxi   u   Pxi 
                                   
                                      
x        x

         
          
                            x
    , if   px'dx'  u   px'dx' 
                            
                                       
                                       
                                     104
FX x   px'dx'  u
            x


                     1
    両辺に          F   X かける


    x  F u   1
                X            105
逆変換法とは(再掲)
1. [0,1]区間の一様乱数 u を取得
         1
2. x  FX u として x を計算    
3. x は累積分布関数 FXからの乱数

[0,1)の乱数                      変換        FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
                                   1
        u                     FX
                                           x   106
逆変換法とは(再掲)
1. [0,1]区間の一様乱数 u を取得
         1
2. x  FX u として x を計算    
3. x は累積分布関数 FXからの乱数

[0,1)の乱数                      変換        FX からの乱数
(例:0.1153…, 0.892…, 0.722…)
                                   1
        u                     FX
                                           x   107
ぎゃ、逆変換法
じゃねーか!


          108
Congratulation!!!



               109
まとめ
二択・三択の練習問題
   一般化

 N択のくじ引き
   N→∞

  逆変換法       110

More Related Content

PPTX
ブートストラップ法とその周辺とR
PDF
星野「調査観察データの統計科学」第3章
PPTX
GEE(一般化推定方程式)の理論
PDF
2 3.GLMの基礎
PDF
Stanコードの書き方 中級編
PPTX
重回帰分析で交互作用効果
PDF
[DL輪読会]Deep Learning 第5章 機械学習の基礎
PDF
わかりやすいパターン認識_2章
ブートストラップ法とその周辺とR
星野「調査観察データの統計科学」第3章
GEE(一般化推定方程式)の理論
2 3.GLMの基礎
Stanコードの書き方 中級編
重回帰分析で交互作用効果
[DL輪読会]Deep Learning 第5章 機械学習の基礎
わかりやすいパターン認識_2章

What's hot (20)

PDF
時系列分析入門
PDF
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
PDF
「深層学習」第6章 畳込みニューラルネット
PDF
相関係数は傾きに影響される
PPTX
金融時系列のための深層t過程回帰モデル
PPTX
ようやく分かった!最尤推定とベイズ推定
PDF
機械学習の理論と実践
PPTX
ベイズ統計学の概論的紹介
PDF
機械学習のためのベイズ最適化入門
PDF
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
PDF
20130716 はじパタ3章前半 ベイズの識別規則
PDF
実践多クラス分類 Kaggle Ottoから学んだこと
PDF
「ランダムフォレスト回帰」のハイパーパラメーター
PDF
プログラミングコンテストでの動的計画法
PDF
異常検知と変化検知 第4章 近傍法による異常検知
PDF
PDF
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
PDF
統計的学習の基礎 5章前半(~5.6)
PDF
はじめてのパターン認識 第1章
PDF
はじパタ8章 svm
時系列分析入門
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
「深層学習」第6章 畳込みニューラルネット
相関係数は傾きに影響される
金融時系列のための深層t過程回帰モデル
ようやく分かった!最尤推定とベイズ推定
機械学習の理論と実践
ベイズ統計学の概論的紹介
機械学習のためのベイズ最適化入門
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
20130716 はじパタ3章前半 ベイズの識別規則
実践多クラス分類 Kaggle Ottoから学んだこと
「ランダムフォレスト回帰」のハイパーパラメーター
プログラミングコンテストでの動的計画法
異常検知と変化検知 第4章 近傍法による異常検知
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
統計的学習の基礎 5章前半(~5.6)
はじめてのパターン認識 第1章
はじパタ8章 svm
Ad

Similar to Rで学ぶ逆変換(逆関数)法 (20)

PPT
6 Info Theory
PDF
R language definition3.1_3.2
PDF
プログラミングコンテストでの乱択アルゴリズム
PPT
050 確率と確率分布
ODP
情報オリンピック夏合宿発表
PDF
最適化の手前の数学
PPT
K040 確率分布とchi2分布
PDF
Chap12 4 appendix_suhara
PDF
Chap12 4 appendix_suhara
PDF
モンテカルロサンプリング
PDF
【Unity道場】ゲーム制作に使う数学を学習しよう
PDF
Tokyo.R #19 発表資料 「Rで色々やってみました」
PDF
一般化線形混合モデル isseing333
PDF
2012年1月20日
PPTX
Genetic programming
PDF
コンピュータで全く使われない数表現
PDF
Rで学ぶデータマイニングI 第8章〜第13章
PDF
数式をnumpyに落としこむコツ
PDF
BLUE*アルゴリズム
PPTX
Prml 1.3~1.6 ver3
6 Info Theory
R language definition3.1_3.2
プログラミングコンテストでの乱択アルゴリズム
050 確率と確率分布
情報オリンピック夏合宿発表
最適化の手前の数学
K040 確率分布とchi2分布
Chap12 4 appendix_suhara
Chap12 4 appendix_suhara
モンテカルロサンプリング
【Unity道場】ゲーム制作に使う数学を学習しよう
Tokyo.R #19 発表資料 「Rで色々やってみました」
一般化線形混合モデル isseing333
2012年1月20日
Genetic programming
コンピュータで全く使われない数表現
Rで学ぶデータマイニングI 第8章〜第13章
数式をnumpyに落としこむコツ
BLUE*アルゴリズム
Prml 1.3~1.6 ver3
Ad

More from Nagi Teramo (20)

PDF
第86回R勉強会@東京 LT資料
PDF
Rでを作る
PPTX
Reproducebility 100倍 Dockerマン
PDF
healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
PDF
闇と向き合う
PDF
機械の体を手に入れるのよ、 鉄郎!!!
PDF
続わかりやすいパターン認識11章(11.1 - 11.4)
PDF
5分でわかるかもしれないglmnet
PDF
Ultra Lightning Talk × 3
PDF
F#談話室(17)
PDF
RFinanceJはじめました
PDF
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
PDF
お前の逐モン、GETだぜ!
PDF
Trading volume mapping R in recent environment
PDF
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
PDF
とある金融屋の統計技師が時系列解析してみた
PDF
可視化周辺の進化がヤヴァイ~rChartsを中心として~
PDF
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
PDF
Tokyo.R 白熱教室「これからのRcppの話をしよう」
PDF
レプリカ交換モンテカルロ法で乱数の生成
第86回R勉強会@東京 LT資料
Rでを作る
Reproducebility 100倍 Dockerマン
healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
闇と向き合う
機械の体を手に入れるのよ、 鉄郎!!!
続わかりやすいパターン認識11章(11.1 - 11.4)
5分でわかるかもしれないglmnet
Ultra Lightning Talk × 3
F#談話室(17)
RFinanceJはじめました
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
お前の逐モン、GETだぜ!
Trading volume mapping R in recent environment
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
とある金融屋の統計技師が時系列解析してみた
可視化周辺の進化がヤヴァイ~rChartsを中心として~
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
レプリカ交換モンテカルロ法で乱数の生成

Recently uploaded (8)

PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
PPTX
Vibe Codingを触って感じた現実について.pptx .
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
20250823_IoTLT_vol126_kitazaki_v1___.pdf
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Vibe Codingを触って感じた現実について.pptx .

Rで学ぶ逆変換(逆関数)法