Class: OpenTox::Algorithm::Classification

Inherits:
Object
  • Object
show all
Defined in:
lib/classification.rb

Class Method Summary collapse

Class Method Details

.weighted_majority_vote(compound, params) ⇒ Object



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
# File 'lib/classification.rb', line 6

def self.weighted_majority_vote compound, params
  neighbors = params[:neighbors]
  weighted_sum = {}
  sim_sum = 0.0
  confidence = 0.0
  neighbors.each do |row|
    sim = row["tanimoto"]
    row["features"][params[:prediction_feature_id].to_s].each do |act|
      weighted_sum[act] ||= 0
      weighted_sum[act] += sim
    end
  end
  case weighted_sum.size
  when 1
    return {:value => weighted_sum.keys.first, :confidence => weighted_sum.values.first/neighbors.size.abs}
  when 2
    sim_sum = weighted_sum[weighted_sum.keys[0]]
    sim_sum -= weighted_sum[weighted_sum.keys[1]]
    sim_sum > 0 ? prediction = weighted_sum.keys[0] : prediction = weighted_sum.keys[1] 
    confidence = (sim_sum/neighbors.size).abs 
    return {:value => prediction,:confidence => confidence}
  else
    bad_request_error "Cannot predict more than 2 classes, multinomial classifications is not yet implemented. Received classes were: '#{weighted.sum.keys}'"
  end
end