blob: b9b66f0c7cc56bc3a84e0ae5205ffe0d0e1d06b6 (
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
34
|
module OpenTox
module Algorithm
class Classification
def self.weighted_majority_vote compound, params
neighbors = params[:neighbors]
feature_id = params[:prediction_feature_id].to_s
sims = {}
neighbors.each do |n|
sim = n["tanimoto"]
n["features"][feature_id].each do |act|
sims[act] ||= []
sims[act] << sim
#sims[act] << 0.5*sim+0.5 # scale to 1-0.5
end
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
|