diff options
author | Christoph Helma <helma@in-silico.ch> | 2011-06-17 15:21:14 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2011-06-17 15:21:14 +0200 |
commit | 983ad5cd9d1bc9f2ccd931b7d75fbb8b95e5f873 (patch) | |
tree | 7f2f0a85bfa4b4209c5308a6cb8fdf55fda7b029 /lazar.rb | |
parent | ec9aaf16bff077231e7fe3ff300492df3df432e2 (diff) |
lazar dumpfiles implemented
Diffstat (limited to 'lazar.rb')
-rw-r--r-- | lazar.rb | 211 |
1 files changed, 103 insertions, 108 deletions
@@ -13,143 +13,138 @@ class LazarTest < Test::Unit::TestCase def setup @predictions = [] - @models = [] + @compounds = [] + @files = [] + @dump_dir = FileUtils.mkdir_p File.join(File.dirname(__FILE__),"dump",File.basename(__FILE__,".rb")) + FileUtils.mkdir_p File.join(File.dirname(__FILE__),"reference",File.basename(__FILE__,".rb")) end - def teardown - @predictions.each {|p| p.delete(@@subjectid)} - @models.each {|m| m.delete(@@subjectid)} + def dump(object,file) + @files << file + FileUtils.mkdir_p File.dirname(file) + File.open(file,"w+"){|f| f.puts object.to_yaml} end -=begin -=end - def test_create_regression_model - model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@regression_training_dataset.uri, :subjectid => @@subjectid}).to_s - #puts model_uri - validate_owl model_uri,@@subjectid - lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid - @models << lazar - compound = OpenTox::Compound.from_smiles("c1ccccc1NN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid).to_s + def create_model(params) + params[:subjectid] = @@subjectid + model_uri = OpenTox::Algorithm::Lazar.new.run(params).to_s + @model = OpenTox::Model::Lazar.find model_uri, @@subjectid + dump @model, File.join(@dump_dir,caller[0][/`.*'/][1..-2],"model")+".yaml" + end + + def predict_compound(compound) + @compounds << compound + prediction_uri = @model.run(:compound_uri => compound.uri, :subjectid => @@subjectid) prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) @predictions << prediction - assert_equal prediction.value(compound).round_to(3),0.378.round_to(3) - assert_equal prediction.confidence(compound).round_to(3), 0.276.round_to(3) - #assert_equal prediction.value(compound).round_to(4), 0.2847.round_to(4) - #assert_equal prediction.confidence(compound).round_to(4), 0.3223.round_to(4) - assert_equal prediction.neighbors(compound).size, 61 + dump prediction, File.join(@dump_dir,caller[0][/`.*'/][1..-2],"compound_prediction")+@compounds.size.to_s+".yaml" end - def test_create_regression_prop_model - model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@regression_training_dataset.uri, :subjectid => @@subjectid, :local_svm_kernel => "propositionalized"}).to_s - #puts model_uri - validate_owl model_uri,@@subjectid - lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid - @models << lazar - assert_equal 219, lazar.features.size - compound = OpenTox::Compound.from_smiles("c1ccccc1NN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid).to_s + def predict_dataset(dataset) + prediction_uri = @model.run(:dataset_uri => dataset.uri, :subjectid => @@subjectid) prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) @predictions << prediction - assert_equal prediction.value(compound).round_to(1),0.1.round_to(1) - assert_equal prediction.confidence(compound).round_to(3), 0.276.round_to(3) - #assert_equal prediction.value(compound).round_to(4), 0.2847.round_to(4) - #assert_equal prediction.confidence(compound).round_to(4), 0.3223.round_to(4) - assert_equal prediction.neighbors(compound).size, 61 + dump prediction, File.join(@dump_dir,caller[0][/`.*'/][1..-2],"dataset_prediction")+".yaml" end - def test_classification_model + def cleanup # executed only when assertions succeed (teardown is called even when assertions fail) + validate_owl @model.uri + @files.each do |f| + reference = f.sub(/dump/,"reference") + FileUtils.mkdir_p File.dirname(reference) + FileUtils.cp f, reference + FileUtils.rm f + end + @predictions.each do |dataset| + validate_owl @model.uri + dataset.delete(@@subjectid) + end + @model.delete(@@subjectid) + end - # create model - model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@classification_training_dataset.uri, :subjectid => @@subjectid}).to_s - validate_owl model_uri,@@subjectid - lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid - @models << lazar - assert_equal lazar.features.size, 52 +=begin +=end + def test_create_regression_model + create_model :dataset_uri => @@regression_training_dataset.uri + predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN") + assert_equal 0.4.round_to(3), @predictions.first.value(@compounds.first).round_to(3) + assert_equal 0.276.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3) + assert_equal 61, @predictions.first.neighbors(@compounds.first).size + cleanup + end - # single prediction - compound = OpenTox::Compound.from_smiles("c1ccccc1NN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid) - prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) - @predictions << prediction - #puts prediction_uri - assert_equal prediction.value(compound), "false" - assert_equal prediction.confidence(compound).round_to(4), 0.3067.round_to(4) - assert_equal prediction.neighbors(compound).size, 14 + def test_create_regression_prop_model + create_model :dataset_uri => @@regression_training_dataset.uri, :local_svm_kernel => "propositionalized" + predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN") + assert_equal 0.4.round_to(1), @predictions.first.value(@compounds.first).round_to(1) + assert_equal 0.276.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3) + assert_equal 61, @predictions.first.neighbors(@compounds.first).size + assert_equal 219, @model.features.size + cleanup + end + def test_classification_model + create_model :dataset_uri => @@classification_training_dataset.uri + # single prediction + predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN") # dataset activity - compound = OpenTox::Compound.from_smiles("CNN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid) - prediction = OpenTox::LazarPrediction.find prediction_uri, @@subjectid - @predictions << prediction - assert !prediction.measured_activities(compound).empty? - assert_equal prediction.measured_activities(compound).first.to_s, "true" - assert prediction.value(compound).nil? - + predict_compound OpenTox::Compound.from_smiles("CNN") # dataset prediction - test_dataset = OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) - prediction = OpenTox::LazarPrediction.find lazar.run(:dataset_uri => test_dataset.uri, :subjectid => @@subjectid), @@subjectid - @predictions << prediction - assert_equal prediction.compounds.size, 4 - compound = OpenTox::Compound.from_smiles "CC(=Nc1ccc2c(c1)Cc1ccccc21)O" - assert_equal prediction.value(compound), nil - assert_equal prediction.measured_activities(compound).first.to_s, "true" + predict_dataset OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) + # assertions + # single prediction + assert_equal false, @predictions[0].value(@compounds[0]) + assert_equal 0.3067.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4) + assert_equal 14, @predictions[0].neighbors(@compounds[0]).size + # dataset activity + assert !@predictions[1].measured_activities(@compounds[1]).empty? + assert_equal "true", @predictions[1].measured_activities(@compounds[1]).first.to_s + assert @predictions[1].value(@compounds[1]).nil? + # dataset prediction + c = OpenTox::Compound.from_smiles("CC(=Nc1ccc2c(c1)Cc1ccccc21)O") + assert_equal nil, @predictions[2].value(c) + assert_equal "true", @predictions[2].measured_activities(c).first.to_s + c = OpenTox::Compound.new("http://ot-dev.in-silico.ch/compound/InChI=1S/C2H4N4/c3-2-4-1-5-6-2/h1H,(H3,3,4,5,6)") + assert_equal false, @predictions[2].value(c) + # model + assert_equal 52, @model.features.size + cleanup end def test_classification_svm_model - # create model - model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@classification_training_dataset.uri, :subjectid => @@subjectid, :prediction_algorithm => "local_svm_classification"}).to_s - lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid - @models << lazar - assert_equal lazar.features.size, 52 + create_model :dataset_uri => @@classification_training_dataset.uri, :prediction_algorithm => "local_svm_classification" + predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN") + predict_dataset OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) - # single prediction - compound = OpenTox::Compound.from_smiles("c1ccccc1NN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid) - prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) - @predictions << prediction - assert_equal prediction.value(compound), "false" - assert_equal prediction.confidence(compound).round_to(4), 0.4131.round_to(4) - assert_equal prediction.neighbors(compound).size, 14 + assert_equal false, @predictions[0].value(@compounds[0]) + assert_equal 0.3067.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4) + assert_equal 14, @predictions[0].neighbors(@compounds[0]).size - # dataset prediction - test_dataset = OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) - prediction = OpenTox::LazarPrediction.find lazar.run(:dataset_uri => test_dataset.uri, :subjectid => @@subjectid), @@subjectid - @predictions << prediction - assert_equal prediction.compounds.size, 4 - compound = OpenTox::Compound.from_smiles "CC(=Nc1ccc2c(c1)Cc1ccccc21)O" - assert_equal prediction.value(compound), nil - assert_equal prediction.measured_activities(compound).first, true + c = OpenTox::Compound.new("http://ot-dev.in-silico.ch/compound/InChI=1S/C2H4N4/c3-2-4-1-5-6-2/h1H,(H3,3,4,5,6)") + assert_equal 4, @predictions[1].compounds.size + assert_equal false, @predictions[1].value(c) + + assert_equal 52, @model.features.size + cleanup end def test_classification_svm_prop_model + create_model :dataset_uri => @@classification_training_dataset.uri, :prediction_algorithm => "local_svm_classification", :local_svm_kernel => "propositionalized" + predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN") + predict_dataset OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) + + assert_equal false, @predictions[0].value(@compounds[0]) + assert_equal 0.3067.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4) + assert_equal 14, @predictions[0].neighbors(@compounds[0]).size - # create model - model_uri = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => @@classification_training_dataset.uri, :subjectid => @@subjectid, :prediction_algorithm => "local_svm_classification", :local_svm_kernel => "propositionalized"}).to_s - lazar = OpenTox::Model::Lazar.find model_uri, @@subjectid - @models << lazar - assert_equal lazar.features.size, 52 - - # single prediction - compound = OpenTox::Compound.from_smiles("c1ccccc1NN") - prediction_uri = lazar.run(:compound_uri => compound.uri, :subjectid => @@subjectid) - prediction = OpenTox::LazarPrediction.find(prediction_uri, @@subjectid) - @predictions << prediction - assert_equal prediction.value(compound), "false" - assert_equal prediction.confidence(compound).round_to(4), 0.4131.round_to(4) - assert_equal prediction.neighbors(compound).size, 14 - - # dataset prediction - test_dataset = OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid) - prediction = OpenTox::LazarPrediction.find lazar.run(:dataset_uri => test_dataset.uri, :subjectid => @@subjectid), @@subjectid - @predictions << prediction - assert_equal prediction.compounds.size, 4 - compound = OpenTox::Compound.from_smiles "CC(=Nc1ccc2c(c1)Cc1ccccc21)O" - assert_equal prediction.value(compound), nil - assert_equal prediction.measured_activities(compound).first, true + c = OpenTox::Compound.new("http://ot-dev.in-silico.ch/compound/InChI=1S/C2H4N4/c3-2-4-1-5-6-2/h1H,(H3,3,4,5,6)") + assert_equal 4, @predictions[1].compounds.size + assert_equal false, @predictions[1].value(c) + assert_equal 52, @model.features.size + cleanup end =begin |