Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

# 第１３回数学カフェ「素数！！」二次会 LT資料「乱数！！」

2016/5/7

• Full Name
Comment goes here.

Are you sure you want to Yes No
• Seja o primeiro a comentar

### 第１３回数学カフェ「素数！！」二次会 LT資料「乱数！！」

1. 1. 第353回 確率統計カフェ 「乱数！！」 2016/5/7 Ken ichi Matsui (@kenmatsu4)
2. 2. http://www.slideshare.net/matsukenbook
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.