summaryrefslogtreecommitdiff
path: root/model.rb
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2010-06-25 20:14:51 +0200
committerChristoph Helma <helma@in-silico.ch>2010-06-25 20:14:51 +0200
commitd8aa6f493d2e74678c7268cc0d7f2ab6ce7ac6de (patch)
tree1d8b371be6b3461ecc2f7803e58a5536fb983d65 /model.rb
parent160cf6bf6fd21759e665a37002ad5d8504bb36bf (diff)
regression initially working
Diffstat (limited to 'model.rb')
-rw-r--r--model.rb100
1 files changed, 100 insertions, 0 deletions
diff --git a/model.rb b/model.rb
new file mode 100644
index 0000000..36670d9
--- /dev/null
+++ b/model.rb
@@ -0,0 +1,100 @@
+class ToxCreateModel
+ include DataMapper::Resource
+ property :id, Serial
+ property :name, String, :length => 255
+ property :uri, String, :length => 255
+ property :task_uri, String, :length => 255
+ property :validation_task_uri, String, :length => 255
+ property :validation_uri, String, :length => 255
+ property :validation_report_task_uri, String, :length => 255
+ property :validation_report_uri, String, :length => 255
+ property :warnings, Text, :length => 2**32-1
+ property :nr_compounds, Integer
+ property :created_at, DateTime
+
+ def status
+ RestClient.get(File.join(@task_uri, 'hasStatus')).body
+ end
+
+ def validation_status
+ begin
+ RestClient.get(File.join(@validation_task_uri, 'hasStatus')).body
+ rescue
+ "Service offline"
+ end
+ end
+
+ def validation_report_status
+ begin
+ RestClient.get(File.join(@validation_report_task_uri, 'hasStatus')).body
+ rescue
+ "Service offline"
+ end
+ end
+
+ def algorithm
+ begin
+ RestClient.get(File.join(@uri, 'algorithm')).body
+ rescue
+ ""
+ end
+ end
+
+ def training_dataset
+ begin
+ RestClient.get(File.join(@uri, 'trainingDataset')).body
+ rescue
+ ""
+ end
+ end
+
+ def feature_dataset
+ begin
+ RestClient.get(File.join(@uri, 'feature_dataset')).body
+ rescue
+ ""
+ end
+ end
+
+ def validation
+ begin
+ uri = File.join(@validation_uri, 'statistics')
+ yaml = RestClient.get(uri).body
+ v = YAML.load(yaml)
+ tp=0; tn=0; fp=0; fn=0; n=0
+ v[:classification_statistics][:confusion_matrix][:confusion_matrix_cell].each do |cell|
+ if cell[:confusion_matrix_predicted] == "true" and cell[:confusion_matrix_actual] == "true"
+ tp = cell[:confusion_matrix_value]
+ n += tp
+ elsif cell[:confusion_matrix_predicted] == "false" and cell[:confusion_matrix_actual] == "false"
+ tn = cell[:confusion_matrix_value]
+ n += tn
+ elsif cell[:confusion_matrix_predicted] == "false" and cell[:confusion_matrix_actual] == "true"
+ fn = cell[:confusion_matrix_value]
+ n += fn
+ elsif cell[:confusion_matrix_predicted] == "true" and cell[:confusion_matrix_actual] == "false"
+ fp = cell[:confusion_matrix_value]
+ n += fp
+ end
+ end
+ {
+ :n => n,
+ :tp => tp,
+ :fp => fp,
+ :tn => tn,
+ :fn => fn,
+ :correct_predictions => sprintf("%.2f", 100*(tp+tn).to_f/n),
+ :weighted_area_under_roc => sprintf("%.3f", v[:classification_statistics][:weighted_area_under_roc].to_f),
+ :sensitivity => sprintf("%.3f", tp.to_f/(tp+fn)),
+ :specificity => sprintf("%.3f", tn.to_f/(tn+fp))
+ }
+ rescue
+ "Service offline"
+ end
+ end
+
+end
+
+DataMapper.auto_upgrade!
+
+