summaryrefslogtreecommitdiff
path: root/lib/classification.rb
blob: 93b4f0f807390dd870dd0eabfad8761cf2c1ed02 (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 compound, params
        neighbors = params[:neighbors]
        feature_id = params[:prediction_feature_id].to_s
        sims = {}
        neighbors.each do |n|
          sim = n["tanimoto"]
          n["toxicities"][feature_id].each do |act|
            sims[act] ||= []
            sims[act] << sim
          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