summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhelma@in-silico.ch <helma@in-silico.ch>2018-11-16 22:45:17 +0100
committerhelma@in-silico.ch <helma@in-silico.ch>2018-11-16 22:45:17 +0100
commit1b44e0cd76f2ead93b8b3fa0f970c85ef32a4b14 (patch)
tree554447ba32d3e2355988e86e0676ba00f63698f1
parentc12d5bb40ab2a0783f755c3238a20448b9a5a42e (diff)
confidence for prediction datasets
-rw-r--r--lib/dataset.rb11
-rw-r--r--lib/feature.rb5
-rw-r--r--lib/model.rb5
-rw-r--r--test/classification-model.rb1
-rw-r--r--test/regression-model.rb1
5 files changed, 19 insertions, 4 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb
index 3979105..df17569 100644
--- a/lib/dataset.rb
+++ b/lib/dataset.rb
@@ -70,6 +70,12 @@ module OpenTox
features.select{|f| f.is_a?(Warnings)}
end
+ # Get Confidence feature
+ # @return [OpenTox::Confidence] confidence feature
+ def confidence_feature
+ features.select{|f| f.is_a?(Confidence)}.first
+ end
+
# Get nominal and numeric bioactivity features
# @return [Array<OpenTox::NominalBioActivity,OpenTox::NumericBioActivity>]
def bioactivity_features
@@ -392,8 +398,9 @@ module OpenTox
predictions[s] ||= {}
prediction_feature = prediction_features.first
predictions[s][:value] = values(s,prediction_feature).first
- predictions[s][:warnings] = []
- warnings_features.each { |w| predictions[s][:warnings] += values(s,w) }
+ #predictions[s][:warnings] = []
+ #warnings_features.each { |w| predictions[s][:warnings] += values(s,w) }
+ predictions[s][:confidence] = values(s,confidence_feature).first
if predictions[s][:value] and prediction_feature.is_a? NominalLazarPrediction
prediction_feature.accept_values.each do |v|
f = LazarPredictionProbability.find_by(:name => v, :model_id => prediction_feature.model_id, :training_feature_id => prediction_feature.training_feature_id)
diff --git a/lib/feature.rb b/lib/feature.rb
index b474398..72c26d7 100644
--- a/lib/feature.rb
+++ b/lib/feature.rb
@@ -15,6 +15,11 @@ module OpenTox
field :dataset_id, type: BSON::ObjectId
end
+ # Confidence
+ class Confidence < Feature
+ field :dataset_id, type: BSON::ObjectId
+ end
+
# Categorical variables
class NominalFeature < Feature
field :accept_values, type: Array
diff --git a/lib/model.rb b/lib/model.rb
index 08ca07e..cbfefe3 100644
--- a/lib/model.rb
+++ b/lib/model.rb
@@ -338,7 +338,8 @@ module OpenTox
return predictions
elsif object.is_a? Dataset
d = object.copy
- warning_feature = Warnings.find_or_create_by(:dataset_id => d.id)
+ #warning_feature = Warnings.find_or_create_by(:dataset_id => d.id)
+ confidence_feature = Confidence.find_or_create_by(:dataset_id => d.id)
if prediction_feature.is_a? NominalBioActivity
f = NominalLazarPrediction.find_or_create_by(:name => prediction_feature.name, :accept_values => prediction_feature.accept_values, :model_id => self.id, :training_feature_id => prediction_feature.id)
probability_features = {}
@@ -356,7 +357,7 @@ module OpenTox
# add predictions to dataset
predictions.each do |substance_id,p|
substance_id = BSON::ObjectId.from_string(substance_id)
- d.add substance_id,warning_feature,p[:warnings].join(" ") unless p[:warnings].empty?
+ d.add substance_id,confidence_feature,p[:confidence]
unless p[:value].nil?
d.add substance_id,f,p[:value]
p[:probabilities].each {|name,p| d.add substance_id,probability_features[name],p} if p[:probabilities]
diff --git a/test/classification-model.rb b/test/classification-model.rb
index 2032bf8..79ccb98 100644
--- a/test/classification-model.rb
+++ b/test/classification-model.rb
@@ -90,6 +90,7 @@ class ClassificationModelTest < MiniTest::Test
assert_nil result.predictions[result.compounds.first][:value]
assert_equal "carcinogenic", result.predictions[result.compounds[1]][:value]
assert_equal 0.27, result.predictions[result.compounds[1]][:probabilities]["non-carcinogenic"].round(2)
+ assert_match /High/i, result.predictions[result.compounds[1]][:confidence]
end
def test_carcinogenicity_rf_classification
diff --git a/test/regression-model.rb b/test/regression-model.rb
index b925439..7f667dc 100644
--- a/test/regression-model.rb
+++ b/test/regression-model.rb
@@ -179,6 +179,7 @@ class LazarRegressionTest < MiniTest::Test
assert_equal [1.37], result.values(result.compounds[6], result.bioactivity_features[0]).collect{|v| v.round(2)}
assert_equal [1.79], result.values(result.compounds[6], result.prediction_features[0]).collect{|v| v.round(2)}
assert_equal [1.84,1.73], result.values(result.compounds[7], result.bioactivity_features[0]).collect{|v| v.round(2)}
+ assert_match /Low/i, result.predictions[result.compounds[6]][:confidence]
end
end