blob: 03c32c45d4731718547ca78c58c3bbca018ed6b2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
module OpenTox
module Algorithm
class Classification
def self.weighted_majority_vote substance:, neighbors:
sims = {}
neighbors.each do |neighbor|
sim = neighbor["similarity"]
activities = neighbor["measurements"]
activities.each do |act|
sims[act] ||= []
sims[act] << sim
end if activities
end
sim_all = sims.collect{|a,s| s}.flatten
sim_sum = sim_all.sum
sim_max = sim_all.max
probabilities = {}
sims.each do |a,s|
probabilities[a] = s.sum/sim_sum
end
probabilities = probabilities.collect{|a,p| [a,sim_max*p]}.to_h
p_max = probabilities.collect{|a,p| p}.max
prediction = probabilities.key(p_max)
{:value => prediction,:probabilities => probabilities}
end
end
end
end
|