summaryrefslogtreecommitdiff
path: root/lib/classification.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/classification.rb')
-rw-r--r--lib/classification.rb37
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