diff options
author | mguetlein <martin.guetlein@gmail.com> | 2011-02-07 10:09:29 +0100 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2011-02-07 10:09:29 +0100 |
commit | 6e73d2f1c60382ed9f9a54b4fe6677cf767dc8db (patch) | |
tree | e21782699607172005cf1e5857487e65f5f715cc | |
parent | 9407e4f481bc2a7c5d1daa3c42a0123c5fb5fbbf (diff) |
activate copy of old cv dataset folds
-rwxr-xr-x | report/validation_access.rb | 4 | ||||
-rwxr-xr-x | test/test_examples.rb | 8 | ||||
-rw-r--r-- | test/unit_test.rb | 5 | ||||
-rwxr-xr-x | validation/validation_service.rb | 59 |
4 files changed, 47 insertions, 29 deletions
diff --git a/report/validation_access.rb b/report/validation_access.rb index 03ec0e5..83ca144 100755 --- a/report/validation_access.rb +++ b/report/validation_access.rb @@ -61,7 +61,7 @@ class Reports::ValidationDB < Reports::ValidationAccess cv = nil raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+u.to_s if - subjectid and !OpenTox::Authorization.authorized?(u,"GET",subjectid) + AA_SERVER and !OpenTox::Authorization.authorized?(u,"GET",subjectid) # begin # #cv = Lib::Crossvalidation.find( cv_id ) # rescue => ex @@ -87,7 +87,7 @@ class Reports::ValidationDB < Reports::ValidationAccess (validation_id.to_i > 0 || validation_id.to_s=="0" ) v = nil raise OpenTox::NotAuthorizedError.new "Not authorized: GET "+uri.to_s if - subjectid and !OpenTox::Authorization.authorized?(uri,"GET",subjectid) + AA_SERVER and !OpenTox::Authorization.authorized?(uri,"GET",subjectid) v = Lib::Validation.get(validation_id) raise OpenTox::NotFoundError.new "validation with id "+validation_id.to_s+" not found" unless v raise OpenTox::BadRequestError.new "validation with id "+validation_id.to_s+" is not finished yet" unless v.finished diff --git a/test/test_examples.rb b/test/test_examples.rb index 29fe8cd..e7a07ca 100755 --- a/test/test_examples.rb +++ b/test/test_examples.rb @@ -310,9 +310,13 @@ module ValidationExamples class LR_AmbitCacoModel < ModelValidation def initialize - @model_uri = "http://apps.ideaconsult.net:8080/ambit2/model/33" - @test_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/R545" +# @model_uri = "http://apps.ideaconsult.net:8080/ambit2/model/33" +# @test_dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/R545" #@prediction_feature=http://apps.ideaconsult.net:8080/ambit2/feature/22200 + + @model_uri = "https://ambit.uni-plovdiv.bg:8443/ambit2/model/33" + @test_dataset_uri = "https://ambit.uni-plovdiv.bg:8443/ambit2/dataset/R545" + end end diff --git a/test/unit_test.rb b/test/unit_test.rb index d76e156..8474dd2 100644 --- a/test/unit_test.rb +++ b/test/unit_test.rb @@ -112,11 +112,14 @@ class ValidationTest < Test::Unit::TestCase assert_equal report.uri,report3.uri @report = report end + + ################### utils and overrides ########################## def app Sinatra::Application end + # checks RestCallError type def assert_rest_call_error( ex ) if ex==OpenTox::NotAuthorizedError and @@subjectid==nil puts "AA disabled: skipping test for not authorized" @@ -133,12 +136,12 @@ class ValidationTest < Test::Unit::TestCase end end + # hack to have a global_setup and global_teardown def teardown if((@@expected_test_count-=1) == 0) global_teardown end end - def setup unless defined?@@expected_test_count @@expected_test_count = (self.class.instance_methods.reject{|method| method[0..3] != 'test'}).length diff --git a/validation/validation_service.rb b/validation/validation_service.rb index 417c72a..0ef01ae 100755 --- a/validation/validation_service.rb +++ b/validation/validation_service.rb @@ -273,10 +273,13 @@ module Validation end # creates the cv folds - # PENDING copying datasets of an equal (same dataset, same params) crossvalidation is disabled for now def create_cv_datasets( prediction_feature, task=nil ) - - create_new_cv_datasets( prediction_feature, task ) #unless copy_cv_datasets( prediction_feature ) + if copy_cv_datasets( prediction_feature ) + # dataset folds of a previous crossvalidaiton could be used + task.progress(100) if task + else + create_new_cv_datasets( prediction_feature, task ) + end end # executes the cross-validation (build models and validates them) @@ -307,30 +310,38 @@ module Validation # returns true if successfull, false otherwise def copy_cv_datasets( prediction_feature ) - equal_cvs = Crossvalidation.all( { :dataset_uri => self.dataset_uri, :num_folds => self.num_folds, - :stratified => self.stratified, :random_seed => self.random_seed } ).reject{ |cv| cv.id == self.id } - return false if equal_cvs.size == 0 - cv = equal_cvs[0] - Validation.all( :crossvalidation_id => cv.id ).each do |v| - - if self.stratified and v.prediction_feature != prediction_feature - return false; + cvs = Crossvalidation.all( { + :dataset_uri => self.dataset_uri, + :num_folds => self.num_folds, + :stratified => self.stratified, + :random_seed => self.random_seed, + :finished => true} ).reject{ |cv| cv.id == self.id } + cvs.each do |cv| + next if AA_SERVER and !OpenTox::Authorization.authorized?(cv.crossvalidation_uri,"GET",self.subjectid) + tmp_val = [] + Validation.all( :crossvalidation_id => cv.id ).each do |v| + break unless + v.prediction_feature == prediction_feature and + OpenTox::Dataset.exist?(v.training_dataset_uri,self.subjectid) and + OpenTox::Dataset.exist?(v.test_dataset_uri,self.subjectid) + #make sure self.id is set + self.save if self.new? + tmp_val << { :validation_type => "crossvalidation", + :training_dataset_uri => v.training_dataset_uri, + :test_dataset_uri => v.test_dataset_uri, + :test_target_dataset_uri => self.dataset_uri, + :crossvalidation_id => self.id, + :crossvalidation_fold => v.crossvalidation_fold, + :prediction_feature => prediction_feature, + :algorithm_uri => self.algorithm_uri } end - unless (OpenTox::Dataset.find(v.training_dataset_uri) and - OpenTox::Dataset.find(v.test_dataset_uri)) - LOGGER.debug "dataset uris obsolete, aborting copy of datasets" - Validation.all( :crossvalidation_id => self.id ).each{ |v| v.delete } - return false + if tmp_val.size == self.num_folds + @tmp_validations = tmp_val + LOGGER.debug "copied dataset uris from cv "+cv.crossvalidation_uri.to_s #+":\n"+tmp_val.inspect + return true end - validation = Validation.new :validation_type => "crossvalidation", - :crossvalidation_id => self.id, - :crossvalidation_fold => v.crossvalidation_fold, - :training_dataset_uri => v.training_dataset_uri, - :test_dataset_uri => v.test_dataset_uri, - :algorithm_uri => self.algorithm_uri end - LOGGER.debug "copied dataset uris from cv "+cv.crossvalidation_uri.to_s - return true + false end # creates cv folds (training and testdatasets) |