azami 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/azami.rb +24 -21
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aff3ce034f65417a0d6a486e0e56e5bbe2ab20e6
|
4
|
+
data.tar.gz: 6c85bd9ffb21f9cc3f1309c1d8df6bd2e2e12849
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c4b6634739be5c8ee532c26c92692d9811bc39c119794e51de011d0e79a5a95bf2cd405d9441c4e8456ffc21d3b4265b899715dacfff3fe839973f7f21d1f60
|
7
|
+
data.tar.gz: ce07429d25995a3f763039b66fe64177c4421ff6dbc5de22a1af6e56bd938c84c720eb0ce8e311fe651956f309eea0fcdb6a522b0a2e4fc5cbb0a934aa67541a
|
data/lib/azami.rb
CHANGED
@@ -1,32 +1,35 @@
|
|
1
|
+
#Azami
|
1
2
|
module Azami
|
2
|
-
|
3
3
|
def self.em(data)
|
4
|
+
inputs = data[:inputs]
|
5
|
+
normal_params = data[:normal_params]
|
6
|
+
iteration_count = data[:iteration_count]
|
4
7
|
|
5
|
-
|
6
|
-
data[:inputs], data[:normal_params], data[:iteration_count]
|
7
|
-
|
8
|
-
iteration_count.times{
|
8
|
+
iteration_count.times do
|
9
9
|
likelihood_weights =
|
10
|
-
inputs.map
|
11
|
-
likelihoods = normal_params.map
|
12
|
-
mean
|
13
|
-
|
14
|
-
|
10
|
+
inputs.map do |input|
|
11
|
+
likelihoods = normal_params.map do |normal_param|
|
12
|
+
mean = normal_param[:mean]
|
13
|
+
stdev = normal_param[:stdev]
|
14
|
+
(0.398942 * (2.71828**(-(0.5 * (input - mean)**2) / stdev**2))) / stdev
|
15
|
+
end
|
15
16
|
total_likelihood = likelihoods.sum
|
16
|
-
likelihoods.map
|
17
|
-
lk/total_likelihood
|
18
|
-
|
19
|
-
|
17
|
+
likelihoods.map do |lk|
|
18
|
+
lk / total_likelihood
|
19
|
+
end
|
20
|
+
end.transpose
|
20
21
|
|
21
|
-
normal_params.each_with_index
|
22
|
+
normal_params.each_with_index do |normal_param, normal_index|
|
22
23
|
weights = likelihood_weights[normal_index]
|
23
24
|
weights_sum = weights.sum
|
24
|
-
normal_param[:mean] = mean =
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
normal_param[:mean] = mean = weights.map.with_index do |weight, input_i|
|
26
|
+
(weight * inputs[input_i])
|
27
|
+
end .sum / weights_sum
|
28
|
+
normal_param[:stdev] = Math.sqrt((weights.map.with_index do |weight, input_i|
|
29
|
+
(((inputs[input_i] - mean)**2) * weight)
|
30
|
+
end).sum / weights_sum)
|
31
|
+
end
|
32
|
+
end
|
30
33
|
normal_params
|
31
34
|
end
|
32
35
|
end
|