Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第13回数学カフェ「素数!!」二次会 LT資料「乱数!!」

1,680 views

Published on

第13回数学カフェ「素数!!」二次会 LT資料「乱数!!」
2016/5/7

乱数生成の話から確率分布、そして確率モデルの例としてトピックモデルについてご紹介しました。
表紙はネタですw

Published in: Data & Analytics
  • Be the first to comment

第13回数学カフェ「素数!!」二次会 LT資料「乱数!!」

  1. 1. 第353回 確率統計カフェ 「乱数!!」 2016/5/7 Ken ichi Matsui (@kenmatsu4)
  2. 2. http://www.slideshare.net/matsukenbook
  3. 3. https://twitter.com/_inundata/status/616658949761302528
  4. 4. https://twitter.com/_inundata/status/616658949761302528
  5. 5. x1, x2, · · · , xn xn+1
  6. 6. M xj+1 := axj + c mod M a = 1103515245, c = 12345, M = 231 231
  7. 7. xj+1 := axj + c mod M 231 Ma = 1103515245, c = 12345, M = 231
  8. 8. 219937 1 xk+n := xk+m (xk u | xk+1 l )A k = 0, 1, . . . 219937 1
  9. 9. xk+n := xk+m (xk u | xk+1 l )A k = 0, 1, . . . A = ✓ 0 Iw 1 aw 1 (aw 2, . . . , a0) ◆ w = 0 B B B B B B B B B @ 0 1 · · · 0 ... 0 ... ... ... ... 0 0 · · · 1 aw 1 aw 2 · · · a0 1 C C C C C C C C C A 1  m < n 0  r  w 1 xA = ( shiftright(x) shiftright(x) + a xi = (xi(w 1), xi(w 2), · · · , xi(0)) xi(j) 2 {0, 1}
  10. 10. y := x ((x >> u)&d) y := y ((y << s)&b) y := y ((y << t)&c) z := y (y >> l) x
  11. 11. y := x ((x >> u)&d) y := y ((y << s)&b) y := y ((y << t)&c) z := y (y >> l) (w, n, m, r) = (32, 624, 397, 31) a = 9908B0DF16 (u, d) = (11, FFFFFFFF16) (s, b) = (7, 9D2C568016) (t, c) = (15, EFC6000016) l = 18 xk+n := xk+m (xk u | xk+1 l )A k = 0, 1, . . . A = ✓ 0 Iw 1 aw 1 (aw 2, . . . , a0) ◆ w = 32, n = 624, m = 397, r = 3 nw r = 19937 2nw r 1 219937 1 w = 32, n = 624, m = 397, r = 31
  12. 12. y := x ((x >> u)&d) y := y ((y << s)&b) y := y ((y << t)&c) z := y (y >> l) (w, n, m, r) = (32, 624, 397, 31) a = 9908B0DF16 (u, d) = (11, FFFFFFFF16) (s, b) = (7, 9D2C568016) (t, c) = (15, EFC6000016) l = 18 xk+n := xk+m (xk u | xk+1 l )A k = 0, 1, . . . A = ✓ 0 Iw 1 aw 1 (aw 2, . . . , a0) ◆ w = 32, n = 624, m = 397, r = 3 nw r = 19937 2nw r 1 219937 1 w = 32, n = 624, m = 397, r = 31
  13. 13. x = 1 x = 0 f(x; p) = 8 < : p if x = 1, 1 p if x = 0. f(x; p) = px (1 p)1 x , x = {0, 1} x p p 1 p
  14. 14. http://www.math.wm.edu/~leemis/2008amstat.pdf 確率分布 曼荼羅 76個 有り〼
  15. 15. P(X = x) = px (1 p)1 x (x = 0, 1)
  16. 16. p  =  0.7   trial_size  =  10000   set.seed(71)   data  <-­‐  rbern(trial_size,  p)   dens  <-­‐  data.frame(y=c((1-­‐p),p)*trial_size,  x=c(0,  1))   ggplot()  +          layer(data=data.frame(x=data),  mapping=aes(x=x),  geom="bar",                      stat="bin",  bandwidth=0.1   )  +  layer(data=dens,  mapping=aes(x=x,  y=y),  geom="bar",                      stat="identity",  width=0.05,  fill="#777799",  alpha=0.7)  
  17. 17. P(X = x) = nCrpx (1 p)n x (x = 1, 2, · · · , n)
  18. 18. p  =  0.7   trial_size  =  10000   sample_size  =  30   set.seed(71)   gen_binom_var  <-­‐  function()  {      return(sum(rbern(sample_size,  p)))   }   result  <-­‐  rdply(trial_size,  gen_binom_var())   dens  <-­‐  data.frame(y=dbinom(seq(sample_size),                                          sample_size,  0.7))*trial_size   ggplot()  +      layer(data=resuylt,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",      binwidth=1,  fill="#6666ee",  color="gray"   )  +  layer(data=dens,  mapping=aes(x=seq(sample_size)+.5,  y=y),            geom="line",  stat="identity",  position="identity",colour="red"      )  +  ggtitle("Bernoulli  to  Binomial.")  
  19. 19. f(x) = ⇢ 1 (0  x  1) 0 (otherwise)
  20. 20. Z = x1(1/2)1 + x2(1/2)2 + · · · + xq(1/2)q
  21. 21. width  <-­‐  0.02   p  <-­‐  0.5;   sample_size  <-­‐  1000   trial_size  <-­‐  100000   gen_unif_rand  <-­‐  function()  {      return  (sum(rbern(sample_size,  p)  *  (rep(1/2,  sample_size)                        **  seq(sample_size))))   }   gen_rand  <-­‐  function(){          return(  rdply(trial_size,  gen_unif_rand())  )   }   system.time(res  <-­‐  gen_rand())   ggplot()  +      layer(data=res,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  ggtitle("Bernoulli  to  Standard  Uniform")  
  22. 22. (0 < x < 1) Xi ⇠ U(0, 1)iid (i = 1, 2, · · · , ↵ + 1) f(x, ↵, ) = 1 B(↵, ) x↵ 1 (1 x) 1
  23. 23. width  <-­‐  0.03;  p  <-­‐  0.5   digits_length  <-­‐  30;  set_size  <-­‐  3   trial_size        <-­‐  30000   gen_unif_rand  <-­‐  function()  {      return  (sum(rbern(digits_length,  p)  *        (rep(1/2,  digits_length)  **          seq(digits_length))))   }   gen_rand  <-­‐  function(){          return(  rdply(set_size,  gen_unif_rand())$V1  )   }   unif_dataset  <-­‐  rlply(trial_size,  gen_rand,  .progress='text')   p  <-­‐  ceiling(set_size  *  0.5);  q  <-­‐  set_size  -­‐  p  +  1   get_nth_data  <-­‐  function(a){  return(a[order(a)][p])  }   disp_data  <-­‐  data.frame(lapply(unif_dataset,  get_nth_data))   names(disp_data)  <-­‐  seq(length(disp_data));  disp_data  <-­‐  data.frame(t(disp_data))   names(disp_data)  <-­‐  "V1"   x_range  <-­‐  seq(0,  1,  0.001)   dens  <-­‐  data.frame(y=dbeta(x_range,  p,  q)*trial_size*width)   ggplot()  +      layer(data=disp_data,  mapping=aes(x=V1),  geom="bar",  stat  =  "bin",                  binwidth=width,  fill="#6666ee",  color="gray"      )  +  layer(data=dens,  mapping=aes(x=x_range,  y=y),                            geom="line",  stat="identity",  position="identity",  colour="red"      )  +  ggtitle("Bernoulli  to  Beta")  
  24. 24. P(X = x) = px (1 p)1 x p, 1 p p ⇠ Beta(↵, ) p, 1 p1 p
  25. 25. P
  26. 26. i f(x = i|p) = pi p = (p1, ..., pk) kX i=1 pi = 1
  27. 27. trial_num  =  10000   x  =  rd.multinomial(1,  [1/6]*6,  trial_num)   result  =  np.sum(x,  axis=0)   data  =  np.array([result,  np.array([1/6]*6)*trial_num]).T   #  Draw  graph   df  =  pd.DataFrame(data,  columns=["trial","theory"],index=range(1,7))   ax  =  df.plot.bar()   ax.set_ylim(0,2000)   ax.legend(loc='best')
  28. 28. P P
  29. 29. ip = (p1, ..., pk) n 結果の例 ([[4, 1, 1, 5, 5, 2], [3, 3, 2, 4, 3, 3], [1, 4, 3, 4, 3, 3], ..., [3, 3, 4, 2, 3, 3], [3, 3, 2, 3, 4, 3], [1, 3, 4, 3, 4, 3]]) f(x; p) = ( n! x1!···xk! px1 1 · · · pxk k when Pk i=1 xi = n 0 otherwise.
  30. 30. P P
  31. 31. ↵ = (↵1, ↵2, · · · , ↵K) f(p; ↵) = 1 B(↵) KY i=1 p↵i 1 i pi 0, X pi = 1
  32. 32. z wθα β φ N D :"Observed"variables :"Unknown"parameters :"Hyper"parameters wordtopictopic"generate distribu;on word"generate distribu;on
  33. 33. doc word freq 0 128 2 0 129 2 0 130 2 0 131 1 0 5 1 0 134 2 0 7 2 0 137 1 0 139 1 0 140 1 0 141 1 0 14 1 0 16 2 0 18 2 0 19 3 0 20 1 0 23 1 0 26 6 0 28 3 0 31 2 0 32 7 0 36 1 0 37 1 0 38 1 0 42 5 0 44 1 0 45 4 0 46 2 0 47 3 0 49 1 0 52 5 0 53 1 0 9 1 0 57 1 0 6 1 0 59 2 0 60 1 0 61 1 0 66 3 0 67 1 0 68 1 0 69 1 0 70 6 0 72 2 0 75 1 0 76 1 0 78 1 0 79 5 0 81 2 0 82 1 0 83 2 0 84 2 0 85 2 0 55 1 0 89 2 0 90 1 0 91 1 0 92 1 0 93 1 0 94 4 0 95 2 0 96 3 0 98 14 0 99 1 0 100 2 0 101 5 0 103 7 0 104 4 0 105 3 0 106 1 0 107 1 doc word freq 98 142 1 99 129 1 99 131 4 99 5 2 99 134 3 99 1 2 99 136 1 99 137 1 99 10 1 99 139 1 99 13 1 99 16 1 99 3 1 99 20 1 99 22 1 99 25 1 99 27 1 99 28 2 99 29 1 99 30 2 99 133 1 99 36 3 99 37 1 99 42 3 99 45 6 99 46 1 99 47 2 99 8 1 99 115 2 99 52 1 99 53 1 99 138 1 99 55 4 99 57 2 99 61 1 99 63 1 99 67 1 99 69 1 99 70 1 99 72 2 99 73 1 99 74 2 99 75 3 99 76 4 99 77 1 99 79 3 99 84 3 99 85 1 99 89 1 99 91 3 99 94 5 99 144 1 99 98 2 99 99 3 99 101 1 99 102 2 99 103 4 99 105 1 99 107 1 99 108 2 99 109 1 99 111 1 99 114 2 99 19 2 99 116 2 99 118 3 99 119 1 99 121 1 99 9 1 99 123 1 99 127 1
  34. 34. data  {        int<lower=2>  K;                                        #  num  topics        int<lower=2>  V;                                        #  num  words        int<lower=1>  M;                                        #  num  docs        int<lower=1>  N;                                        #  total  word  instances        int<lower=1,upper=V>  W[N];                  #  word  n        int<lower=1>  Freq[N];                            #  frequency  of  word  n        int<lower=1,upper=N>  Offset[M,2];    #  range  of  word  index  per  doc        vector<lower=0>[K]  Alpha;                    #  topic  prior        vector<lower=0>[V]  Beta;                      #  word  prior   }   parameters  {        simplex[K]  theta[M];      #  topic  dist  for  doc  m        simplex[V]  phi[K];          #  word  dist  for  topic  k   }   model  {        #  prior        for  (m  in  1:M)              theta[m]  ~  dirichlet(Alpha);        for  (k  in  1:K)              phi[k]  ~  dirichlet(Beta);        #  likelihood        for  (m  in  1:M)  {              for  (n  in  Offset[m,1]:Offset[m,2])  {                    real  gamma[K];                    for  (k  in  1:K)                          gamma[k]  <-­‐  log(theta[m,k])  +  log(phi[k,W[n]]);                    increment_log_prob(Freq[n]  *  log_sum_exp(gamma));              }        }   }
  35. 35.
  36. 36.

×