Download - 第13回数学カフェ「素数!!」二次会 LT資料「乱数!!」
https://twitter.com/_inundata/status/616658949761302528
https://twitter.com/_inundata/status/616658949761302528
xk+n := xk+m � (xku | xk+1
l)A k = 0, 1, . . .
A =
✓0 Iw�1
aw�1 (aw�2, . . . , a0)
◆
w
=
0
BBBBBBBBB@
0 1 · · · 0...
0...
. . ....
...0 0 · · · 1
aw�1 aw�2 · · · a0
1
CCCCCCCCCA
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}
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 � (xku | xk+1
l)A k = 0, 1, . . .
A =
✓0 Iw�1
aw�1 (aw�2, . . . , a0)
◆
w = 32, n = 624,m = 397, r = 31
nw � r = 19937
2nw�r � 1
219937 � 1
w = 32, n = 624,m = 397, r = 31
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 � (xku | xk+1
l)A k = 0, 1, . . .
A =
✓0 Iw�1
aw�1 (aw�2, . . . , a0)
◆
w = 32, n = 624,m = 397, r = 31
nw � r = 19937
2nw�r � 1
219937 � 1
w = 32, n = 624,m = 397, r = 31
http://www.math.wm.edu/~leemis/2008amstat.pdf
確率分布 曼荼羅
76個 有り〼
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)
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.")
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")
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")
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')
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!p
x11 · · · pxk
k
when
Pk
i=1 xi
= n
0 otherwise.
↵ = (↵1,↵2, · · · ,↵K)
f(p;↵) =1
B(↵)
KY
i=1
p↵i�1i
pi � 0,X
pi = 1
z� w�θ�α�
β� φ�
N� D�:"Observed"variables�
:"Unknown"parameters�
:"Hyper"parameters�
word�topic�topic"generate distribu;on�
word"generate distribu;on�
doc word freq0 128 20 129 20 130 20 131 10 5 10 134 20 7 20 137 10 139 10 140 10 141 10 14 10 16 20 18 20 19 30 20 10 23 10 26 60 28 30 31 20 32 70 36 10 37 10 38 10 42 50 44 10 45 40 46 20 47 30 49 10 52 50 53 10 9 10 57 10 6 10 59 20 60 10 61 10 66 30 67 10 68 10 69 10 70 60 72 20 75 10 76 10 78 10 79 50 81 20 82 10 83 20 84 20 85 20 55 10 89 20 90 10 91 10 92 10 93 10 94 40 95 20 96 30 98 140 99 10 100 20 101 50 103 70 104 40 105 30 106 10 107 1
doc word freq98 142 199 129 199 131 499 5 299 134 399 1 299 136 199 137 199 10 199 139 199 13 199 16 199 3 199 20 199 22 199 25 199 27 199 28 299 29 199 30 299 133 199 36 399 37 199 42 399 45 699 46 199 47 299 8 199 115 299 52 199 53 199 138 199 55 499 57 299 61 199 63 199 67 199 69 199 70 199 72 299 73 199 74 299 75 399 76 499 77 199 79 399 84 399 85 199 89 199 91 399 94 599 144 199 98 299 99 399 101 199 102 299 103 499 105 199 107 199 108 299 109 199 111 199 114 299 19 299 116 299 118 399 119 199 121 199 9 199 123 199 127 1
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)); } } }