From 0edca0616624ab9711b3791bbb7697a676e0b141 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Fri, 6 May 2011 17:01:27 +0200 Subject: fix specificity (was 1-specificity) in cv-summary, (added training-test-split to validation object) --- lib/validation.rb | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'lib/validation.rb') diff --git a/lib/validation.rb b/lib/validation.rb index a47a554..8fa95bb 100644 --- a/lib/validation.rb +++ b/lib/validation.rb @@ -12,6 +12,29 @@ module OpenTox val end + # creates a training test split validation, waits until it finishes, may take some time + # @param [Hash] params (required:algorithm_uri,dataset_uri,prediction_feature, optional:algorithm_params,split_ratio(0.67),random_seed(1)) + # @param [String,optional] subjectid + # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly + # @return [OpenTox::Validation] + def self.create_training_test_split( params, subjectid=nil, waiting_task=nil ) + params[:subjectid] = subjectid if subjectid + uri = OpenTox::RestClientWrapper.post( File.join(CONFIG[:services]["opentox-validation"],"training_test_split"), + params,{:content_type => "text/uri-list"},waiting_task ) + Validation.new(uri) + end + + # looks for report for this validation, creates a report if no report is found + # @param [String,optional] subjectid + # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly + # @return [String] report uri + def find_or_create_report( subjectid=nil, waiting_task=nil ) + @report = ValidationReport.find_for_validation(@uri, subjectid) unless @report + @report = ValidationReport.create(@uri, subjectid, waiting_task) unless @report + @report.uri + end + + # creates a validation object from crossvaldiation statistics, raise error if not found # (as crossvaldiation statistics are returned as an average valdidation over all folds) # @param [String] crossvalidation uri @@ -42,7 +65,7 @@ module OpenTox res[:true_negatives] = s[OT.numTrueNegatives] res[:false_negatives] = s[OT.numFalseNegatives] res[:sensitivity] = s[OT.truePositiveRate] - res[:specificity] = s[OT.falsePositiveRate] + res[:specificity] = s[OT.trueNegativeRate] break end end @@ -110,6 +133,16 @@ module OpenTox class ValidationReport include OpenTox + # finds ValidationReport via uri, raises error if not found + # @param [String] uri + # @param [String,optional] subjectid + # @return [OpenTox::ValidationReport] + def self.find( uri, subjectid=nil ) + # PENDING load report data? + OpenTox::RestClientWrapper.get(uri,{:subjectid => subjectid}) + ValidationReport.new(uri) + end + # finds ValidationReport for a particular validation # @param [String] crossvalidation uri # @param [String,optional] subjectid @@ -120,6 +153,17 @@ module OpenTox uris.size==0 ? nil : ValidationReport.new(uris[-1]) end + # creates a validation report via validation + # @param [String] validation uri + # @param [String,optional] subjectid + # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly + # @return [OpenTox::ValidationReport] + def self.create( validation_uri, subjectid=nil, waiting_task=nil ) + uri = RestClientWrapper.post(File.join(CONFIG[:services]["opentox-validation"],"/report/validation"), + { :validation_uris => validation_uri, :subjectid => subjectid }, {}, waiting_task ) + ValidationReport.new(uri) + end + end class CrossvalidationReport -- cgit v1.2.3