diff options
Diffstat (limited to 'lib/classification.rb')
-rw-r--r-- | lib/classification.rb | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/lib/classification.rb b/lib/classification.rb index f6c9b11..127fa28 100644 --- a/lib/classification.rb +++ b/lib/classification.rb @@ -17,10 +17,10 @@ module OpenTox $logger.debug "Weighted Majority Vote Classification." - values = neighbors.collect{|n| n[1]}.uniq + values = neighbors.collect{|n| n[2]}.uniq neighbors.each do |neighbor| - neighbor_weight = neighbor[2] - activity = values.index(neighbor[1]) + 1 # map values to integers > 1 + neighbor_weight = neighbor[1] + activity = values.index(neighbor[2]) + 1 # map values to integers > 1 neighbor_contribution += activity * neighbor_weight if values.size == 2 # AM: provide compat to binary classification: 1=>false 2=>true case activity @@ -46,9 +46,38 @@ module OpenTox $logger.debug "Prediction: '" + prediction.to_s + "'." unless prediction.nil? confidence = (confidence_sum/neighbors.size).abs $logger.debug "Confidence: '" + confidence.to_s + "'." unless prediction.nil? - return {:prediction => prediction, :confidence => confidence.abs} + [prediction, confidence.abs] end + # Local support vector regression from neighbors + # @param [Hash] params Keys `:props, :activities, :sims, :min_train_performance` are required + # @return [Numeric] A prediction value. + def self.local_svm_classification(params) + + confidence = 0.0 + prediction = nil + + $logger.debug "Local SVM." + if params[:activities].size>0 + if params[:props] + n_prop = params[:props][0].collect.to_a + q_prop = params[:props][1].collect.to_a + props = [ n_prop, q_prop ] + end + activities = params[:activities].collect.to_a + activities = activities.collect{|v| "Val" + v.to_s} # Convert to string for R to recognize classification + prediction = local_svm_prop( props, activities, params[:min_train_performance]) # params[:props].nil? signals non-prop setting + prediction = prediction.sub(/Val/,"") if prediction # Convert back + confidence = 0.0 if prediction.nil? + #$logger.debug "Prediction: '" + prediction.to_s + "' ('#{prediction.class}')." + confidence = get_confidence({:sims => params[:sims][1], :activities => params[:activities]}) + end + {:prediction => prediction, :confidence => confidence} + + end + + + end end |