diff options
author | mguetlein <martin.guetlein@gmail.com> | 2012-06-09 10:36:27 +0200 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2012-06-09 10:36:27 +0200 |
commit | ee0eb28550ada392b7903a49d650f40c695e8612 (patch) | |
tree | 4bfff63a3bcd48a12312cbbc960f11788a904d51 /validation | |
parent | 14ade1644b69da6229ef6f06f83fc32b2d1957ce (diff) |
new branch val_exp
Diffstat (limited to 'validation')
-rwxr-xr-x | validation/validation_application.rb | 72 | ||||
-rwxr-xr-x | validation/validation_service.rb | 8 | ||||
-rwxr-xr-x | validation/validation_test.rb | 28 |
3 files changed, 92 insertions, 16 deletions
diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 1bc55f6..89f47e0 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -9,8 +9,8 @@ require 'validation/validation_service.rb' helpers do def check_stratified(params) params[:stratified] = "false" unless params[:stratified] - raise OpenTox::BadRequestError.new "stratified != true|false|super, is #{params[:stratified]}" unless - params[:stratified]=~/true|false|super/ + raise OpenTox::BadRequestError.new "stratified != true|false|super|anti, is #{params[:stratified]}" unless + params[:stratified]=~/true|false|super|anti/ end end @@ -22,7 +22,7 @@ get '/crossvalidation/?' do params[:algorithm] = model.metadata[OT.algorithm] params[:dataset] = model.metadata[OT.trainingDataset] end - uri_list = Lib::OhmUtil.find( Validation::Crossvalidation, params ).sort.collect{|v| v.crossvalidation_uri}.join("\n") + "\n" + uri_list = Lib::OhmUtil.find( Validation::Crossvalidation, params ).sort.delete_if{|v| !v.finished}.collect{|v| v.crossvalidation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "Single validations: "+url_for("/",:full)+"\n"+ @@ -204,6 +204,18 @@ get '/crossvalidation/:id/statistics' do end end +get '/crossvalidation/:id/statistics/uri' do + uri = Validation::Validation.find( :crossvalidation_id => params[:id], :validation_type => "crossvalidation_statistics" ).first.validation_uri + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + content_type "text/html" + OpenTox.text_to_html uri + else + content_type "text/uri-list" + uri + end +end + get '/crossvalidation/:id/statistics/probabilities' do LOGGER.info "get crossvalidation statistics for crossvalidation with id "+params[:id].to_s @@ -273,7 +285,7 @@ end get '/?' do LOGGER.info "list all validations, params: "+params.inspect - uri_list = Lib::OhmUtil.find( Validation::Validation, params ).sort.collect{|v| v.validation_uri}.join("\n") + "\n" + uri_list = Lib::OhmUtil.find( Validation::Validation, params ).sort.delete_if{|v| !v.finished}.collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "To perform a validation:\n"+ @@ -619,6 +631,58 @@ get '/:id/probabilities' do end +get '/:id/viz' do + + begin + validation = Validation::Validation.get(params[:id]) + rescue ActiveRecord::RecordNotFound => ex + raise OpenTox::NotFoundError.new("Validation '#{params[:id]}' not found.") + end + + m = OpenTox::Model::Generic.find(validation.model_uri) + predicted_feature = m.predicted_variable(nil) + actual_feature = validation.prediction_feature + + d = OpenTox::Dataset.create + + test = OpenTox::Dataset.find(validation.test_dataset_uri) + training = OpenTox::Dataset.find(validation.training_dataset_uri) + prediction = OpenTox::Dataset.find(validation.prediction_dataset_uri) + + dataset_feature = "http://dataset" + d.add_feature(dataset_feature) + correct_classified_feature = "http://correct-classified" + d.add_feature(correct_classified_feature) + predicted_nice_feature = "http://predicted" + d.add_feature(predicted_nice_feature) + + [training, test].each do |data| + data.compounds.each do |c| + d.add_compound(c) + d.add(c,dataset_feature,data==training ? "training" : "test") + data.features.each do |f,m| + d.add_feature(f,m) + data.data_entries[c][f].each do |v| + d.add(c,f,v) + end if data.data_entries[c][f] + end + end + end + + prediction.compounds.each do |c| + if prediction.data_entries[c][predicted_feature] + p = prediction.data_entries[c][predicted_feature] + a = d.data_entries[c][actual_feature] + [p,a].each do |v| + raise p.class.to_s+" "+p.inspect unless p.is_a?(Array) and p.size==1 + end + d.add(c,predicted_nice_feature,p[0]) + d.add(c,correct_classified_feature,p[0]==a[0] ? "correct" : "miss") + end + end + d.to_csv +end + #get '/:id/predictions' do # LOGGER.info "get validation predictions "+params.inspect # begin diff --git a/validation/validation_service.rb b/validation/validation_service.rb index 8c8b11f..d30c7d2 100755 --- a/validation/validation_service.rb +++ b/validation/validation_service.rb @@ -446,6 +446,8 @@ module Validation meta = { DC.creator => self.crossvalidation_uri } case stratified + when "anti" + raise "anti-stratification not yet supported for cv" when "false" if self.loo=="true" shuffled_compounds = orig_dataset.compounds @@ -631,16 +633,16 @@ module Validation meta = { DC.creator => $url_provider.url_for('/training_test_split',:full) } case stratified - when /true|super/ + when /true|super|anti/ if stratified=="true" raise OpenTox::BadRequestError.new "prediction feature required for stratified splits" unless prediction_feature features = [prediction_feature] else - LOGGER.warn "prediction feature is ignored for super-stratified splits" if prediction_feature + LOGGER.warn "prediction feature is ignored for super- or anti-stratified splits" if prediction_feature features = nil end r_util = OpenTox::RUtil.new - train, test = r_util.stratified_split( orig_dataset, meta, "NA", split_ratio, @subjectid, random_seed, features ) + train, test = r_util.stratified_split( orig_dataset, meta, "NA", split_ratio, @subjectid, random_seed, features, stratified=="anti" ) r_util.quit_r result = {:training_dataset_uri => train.uri, :test_dataset_uri => test.uri} when "false" diff --git a/validation/validation_test.rb b/validation/validation_test.rb index 70f3ca4..0001076 100755 --- a/validation/validation_test.rb +++ b/validation/validation_test.rb @@ -84,9 +84,14 @@ class ValidationTest < Test::Unit::TestCase # post "/report/method_comparison", # {:validation_uris=>"http://local-ot/validation/389,http://local-ot/validation/390,http://local-ot/validation/391,http://local-ot/validation/392", # :identifier=>"split1,split1,split2,split2"} - - - #post "/report/validation",{:validation_uris=>"http://local-ot/validation/171"} + + get '15709/viz' + puts last_response.body + exit + + post "/report/validation",{:validation_uris=>"http://local-ot/validation/15647"} + exit + #post "/report/validation",{:validation_uris=>"http://local-ot/validation/389"} #dataset_uri = OpenTox::Dataset.create_from_csv_file(File.new("data/EPAFHM.csv").path, nil).uri @@ -94,9 +99,13 @@ class ValidationTest < Test::Unit::TestCase # #dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/603306?feature_uris[]=http://apps.ideaconsult.net:8080/ambit2/feature/764036" # #dataset_uri = "http://apps.ideaconsult.net:8080/ambit2/dataset/603204" -# post "/plain_training_test_split",{:dataset_uri=>dataset_uri, :stratified=>"true", :split_ratio=>0.3} -# puts last_response.body -# uri = last_response.body + + dataset_uri = "http://local-ot/dataset/9264" + post "/plain_training_test_split",{:dataset_uri=>dataset_uri, :stratified=>"false", :split_ratio=>0.5} + puts last_response.body + uri = last_response.body + exit + # rep = wait_for_task(uri) # puts rep #OpenTox::RestClientWrapper.post("http://opentox.informatik.uni-freiburg.de/validation/plain_training_test_split", @@ -131,7 +140,8 @@ class ValidationTest < Test::Unit::TestCase #get 'crossvalidation/189/statistics' #puts last_response.body - #run_test("13a") + run_test("1a") + #run_test("13a",:validation_uri=>"http://local-ot/validation/1568") # run_test("1a",:validation_uri=>"http://local-ot/validation/513") #get '/crossvalidation/79/predictions',nil,'HTTP_ACCEPT' => "application/x-yaml" @@ -178,8 +188,8 @@ class ValidationTest < Test::Unit::TestCase # :random_seed => 1 # }) - #run_test("23a") - run_test("23a",{:validation_uri=>"http://local-ot/validation/crossvalidation/53"}) + #run_test("3a") + #run_test("23a",{:validation_uri=>"http://local-ot/validation/crossvalidation/56"}) #run_test("23a",{:validation_uri=>"http://local-ot/validation/crossvalidation/47"}) #23a loo {:validation_uri=>"http://local-ot/validation/crossvalidation/47"}) #loo mit datasets auf ortona {:validation_uri=>"http://local-ot/validation/crossvalidation/46"} |