summaryrefslogtreecommitdiff
path: root/lib/classification.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classification.rb')
-rw-r--r--lib/classification.rb43
1 files changed, 18 insertions, 25 deletions
diff --git a/lib/classification.rb b/lib/classification.rb
index 638492b..5796ce2 100644
--- a/lib/classification.rb
+++ b/lib/classification.rb
@@ -1,29 +1,22 @@
-module OpenTox
- module Algorithm
+module Lazar
- # Classification algorithms
- class Classification
-
- # Weighted majority vote
- # @param [Array<TrueClass,FalseClass>] dependent_variables
- # @param [Array<Float>] weights
- # @return [Hash]
- def self.weighted_majority_vote dependent_variables:, independent_variables:nil, weights:, query_variables:nil
- class_weights = {}
- dependent_variables.each_with_index do |v,i|
- class_weights[v] ||= []
- class_weights[v] << weights[i] unless v.nil?
- end
- probabilities = {}
- class_weights.each do |a,w|
- probabilities[a] = w.sum/weights.sum
- end
- probabilities = probabilities.collect{|a,p| [a,weights.max*p]}.to_h
- p_max = probabilities.collect{|a,p| p}.max
- prediction = probabilities.key(p_max)
- {:value => prediction,:probabilities => probabilities}
- end
-
+ # Classification algorithms
+ class Classification
+
+ # Weighted majority vote
+ # @param [Array<0,1>] dependent_variables
+ # @param [Array<Float>] weights
+ # @return [Hash]
+ def self.weighted_majority_vote dependent_variables:, weights:
+ w = []
+ w[0] = weights.each_index.select{|i| dependent_variables[i] == 0}.collect{|i| weights[i]}
+ w[1] = weights.each_index.select{|i| dependent_variables[i] == 1}.collect{|i| weights[i]}
+ weights_sum = weights.sum.to_f
+ weights_max = weights.max.to_f
+ probabilities = []
+ probabilities[0] = weights_max*w[0].sum/weights_sum
+ probabilities[1] = weights_max*w[1].sum/weights_sum
+ probabilities
end
end