summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2016-10-13 22:59:45 +0200
committerChristoph Helma <helma@in-silico.ch>2016-10-13 22:59:45 +0200
commit09452bba5c407c27721223d126e3f45c12b20a0c (patch)
treeed4f73a874ddb12c98e7c62af49c2de5fcc4f4d1 /lib
parent2dc66aef3b7932105868ee8c7d32ad975e142d1b (diff)
tests pass
Diffstat (limited to 'lib')
-rw-r--r--lib/caret.rb5
-rw-r--r--lib/model.rb32
-rw-r--r--lib/regression.rb2
3 files changed, 15 insertions, 24 deletions
diff --git a/lib/caret.rb b/lib/caret.rb
index df86093..2c4cd0c 100644
--- a/lib/caret.rb
+++ b/lib/caret.rb
@@ -9,6 +9,11 @@ module OpenTox
if independent_variables.flatten.uniq == ["NA"]
prediction = Algorithm::Regression::weighted_average dependent_variables:dependent_variables, weights:weights
prediction[:warning] = "No variables for regression model. Using weighted average of similar substances."
+ elsif
+ dependent_variables.size < 3
+ prediction = Algorithm::Regression::weighted_average dependent_variables:dependent_variables, weights:weights
+ prediction[:warning] = "Insufficient number of neighbors (#{dependent_variables.size}) for regression model. Using weighted average of similar substances."
+
else
dependent_variables.each_with_index do |v,i|
dependent_variables[i] = to_r(v)
diff --git a/lib/model.rb b/lib/model.rb
index 4bbb7da..d7b072f 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -28,23 +28,9 @@ module OpenTox
bad_request_error "Please provide a prediction_feature and/or a training_dataset." unless prediction_feature or training_dataset
prediction_feature = training_dataset.features.first unless prediction_feature
# TODO: prediction_feature without training_dataset: use all available data
- # explicit prediction algorithm
- if algorithms[:prediction] and algorithms[:prediction][:method]
- case algorithms[:prediction][:method]
- when /Classification/i
- model = LazarClassification.new
- when /Regression/i
- model = LazarRegression.new
- else
- bad_request_error "Prediction method '#{algorithms[:prediction][:method]}' not implemented."
- end
# guess model type
- elsif prediction_feature.numeric?
- model = LazarRegression.new
- else
- model = LazarClassification.new
- end
+ prediction_feature.numeric? ? model = LazarRegression.new : model = LazarClassification.new
model.prediction_feature_id = prediction_feature.id
model.training_dataset_id = training_dataset.id
@@ -193,17 +179,17 @@ module OpenTox
query_descriptors = substance.calculate_properties(features)
similarity_descriptors = query_descriptors.collect_with_index{|v,i| (v-descriptor_means[i])/descriptor_sds[i]}
else
- similarity_descriptors = descriptor_ids.collect_with_index{|id,i|
- prop = substance.properties[id]
- prop = prop.median if prop.is_a? Array # measured
- (prop-descriptor_means[i])/descriptor_sds[i]
- }
- query_descriptors = descriptor_ids.collect_with_index{|id,i|
+ similarity_descriptors = []
+ query_descriptors = []
+ descriptor_ids.each_with_index do |id,i|
prop = substance.properties[id]
prop = prop.median if prop.is_a? Array # measured
- substance.properties[id]
- }
+ if prop
+ similarity_descriptors[i] = (prop-descriptor_means[i])/descriptor_sds[i]
+ query_descriptors[i] = prop
+ end
end
+ end
else
bad_request_error "Unknown descriptor type '#{descriptors}' for similarity method '#{similarity[:method]}'."
end
diff --git a/lib/regression.rb b/lib/regression.rb
index d1724fd..3890987 100644
--- a/lib/regression.rb
+++ b/lib/regression.rb
@@ -3,7 +3,7 @@ module OpenTox
class Regression
- def self.weighted_average dependent_variables:, independent_variables:nil, weights:, query_variables:
+ def self.weighted_average dependent_variables:, independent_variables:nil, weights:, query_variables:nil
# TODO: prediction_interval
weighted_sum = 0.0
sim_sum = 0.0