From 1f789133d961c29d3babfaf69cdde3d675288537 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Sat, 24 Aug 2019 14:44:52 +0200 Subject: initial refactored version for mutagenicity paper --- lib/classification.rb | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) (limited to 'lib/classification.rb') 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] dependent_variables - # @param [Array] 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] 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 -- cgit v1.2.3