summaryrefslogtreecommitdiff
path: root/validation
diff options
context:
space:
mode:
authormguetlein <martin.guetlein@gmail.com>2012-06-09 10:36:27 +0200
committermguetlein <martin.guetlein@gmail.com>2012-06-09 10:36:27 +0200
commitee0eb28550ada392b7903a49d650f40c695e8612 (patch)
tree4bfff63a3bcd48a12312cbbc960f11788a904d51 /validation
parent14ade1644b69da6229ef6f06f83fc32b2d1957ce (diff)
new branch val_exp
Diffstat (limited to 'validation')
-rwxr-xr-xvalidation/validation_application.rb72
-rwxr-xr-xvalidation/validation_service.rb8
-rwxr-xr-xvalidation/validation_test.rb28
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"}