summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavor <vorgrimmlerdavid@gmx.de>2012-09-28 17:15:33 +0200
committerdavor <vorgrimmlerdavid@gmx.de>2012-09-28 17:15:33 +0200
commit1ca63af872eef2e789b6b8edce741d3bdd3bbb03 (patch)
tree9d4d3946b4665d1a3aec2292f9e91779c2acd2ed
parent39a1abd863aaf1b26d86eb8d3c9f6e55086dbb3f (diff)
Added weights option.weights_opt
-rw-r--r--lib/algorithm.rb26
-rw-r--r--lib/model.rb3
2 files changed, 24 insertions, 5 deletions
diff --git a/lib/algorithm.rb b/lib/algorithm.rb
index 78fc447..b009e1a 100644
--- a/lib/algorithm.rb
+++ b/lib/algorithm.rb
@@ -393,7 +393,7 @@ module OpenTox
end
acts = params[:acts].collect
acts = acts.collect{|v| "Val" + v.to_s} # Convert to string for R to recognize classification
- prediction = local_svm_prop( props, acts, params[:min_train_performance]) # params[:props].nil? signals non-prop setting
+ prediction = local_svm_prop( props, acts, params[:min_train_performance], params[:weights_option]) # params[:props].nil? signals non-prop setting
prediction = prediction.sub(/Val/,"") if prediction # Convert back to Float
confidence = 0.0 if prediction.nil?
LOGGER.debug "Prediction is: '" + prediction.to_s + "'."
@@ -415,8 +415,9 @@ module OpenTox
# @param [Array] props, propositionalization of neighbors and query structure e.g. [ Array_for_q, two-nested-Arrays_for_n ]
# @param [Array] acts, activities for neighbors.
# @param [Float] min_train_performance, parameter to control censoring
+ # @param [integer] weights_option, parameter to select a weight function
# @return [Numeric] A prediction value.
- def self.local_svm_prop(props, acts, min_train_performance)
+ def self.local_svm_prop(props, acts, min_train_performance, weights_option=nil)
LOGGER.debug "Local SVM (Propositionalization / Kernlab Kernel)."
n_prop = props[0] # is a matrix, i.e. two nested Arrays.
@@ -441,6 +442,7 @@ module OpenTox
@r.n_prop_y_size = n_prop[0].size
@r.y = acts
@r.q_prop = q_prop
+ weights_option.nil? ? @r.weights_opt = 0 : @r.weights_opt = weights_option
#@r.eval "y = matrix(y)"
@r.eval "prop_matrix = matrix(n_prop, n_prop_x_size, n_prop_y_size, byrow=T)"
@r.eval "q_prop = matrix(q_prop, 1, n_prop_y_size, byrow=T)"
@@ -449,10 +451,26 @@ module OpenTox
LOGGER.debug "Preparing R data ..."
@r.eval <<-EOR
weights=NULL
- if (class(y) == 'character') {
+ if (!(class(y) == 'numeric')) {
y = factor(y)
suppressPackageStartupMessages(library('class'))
- #weights=unlist(as.list(prop.table(table(y))))
+ weights=unlist(as.list(prop.table(table(y))))
+ set_weights <- function(weights, option) {
+ if (option==1){
+ return(weights)
+ } else if (option==2){
+ return(1/weights)
+ } else if (option==3){
+ return(1-weights)
+ } else if (option==4){
+ return(-(weights^2)+1)
+ } else if (option==5){
+ return((weights-1)^2)
+ }else {
+ return(NULL)
+ }
+ }
+ weights=set_weights(weights,weights_opt)
}
EOR
diff --git a/lib/model.rb b/lib/model.rb
index 77b0274..4dc8f18 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -283,7 +283,8 @@ module OpenTox
:acts => mtf.acts,
:sims => mtf.sims,
:value_map => @value_map,
- :min_train_performance => self.parameter(\"min_train_performance\")
+ :min_train_performance => self.parameter(\"min_train_performance\"),
+ :weights_option => self.parameter(\"weights_option\")
} ) ")
value_feature_uri = File.join( @uri, "predicted", "value")