summaryrefslogtreecommitdiff
path: root/validation/validation_format.rb
diff options
context:
space:
mode:
authorMartin Gütlein <martin.guetlein@gmail.com>2010-01-12 11:14:02 +0100
committerMartin Gütlein <martin.guetlein@gmail.com>2010-01-12 11:14:02 +0100
commit037e9dded9dc0e0708ebacc7a8e987fcf1cc9d59 (patch)
tree98351f804fe98c7179d3cdcd9477a461868665fe /validation/validation_format.rb
parent86f056bbb8f8b083313a8dd55b1b8aa47574afe1 (diff)
added report examples and example tests, new module Validation
Diffstat (limited to 'validation/validation_format.rb')
-rw-r--r--validation/validation_format.rb413
1 files changed, 208 insertions, 205 deletions
diff --git a/validation/validation_format.rb b/validation/validation_format.rb
index b953a9b..748271f 100644
--- a/validation/validation_format.rb
+++ b/validation/validation_format.rb
@@ -1,234 +1,237 @@
-# adding to_yaml and to_rdf functionality to validation
-class Validation < Lib::Validation
+module Validation
- # get_content is the basis for to_yaml and to_rdf
- # the idea is that everything is stored in a hash structure
- # the hash is directly printed in to_yaml, while the has_keys can be used to resolve
- # the right properties, classes
- def get_content
-
- h = {}
- Lib::VAL_PROPS.each{|p| h[p] = self.send(p)}
- if crossvalidation_id!=nil
- cv = {}
- Lib::VAL_CV_PROPS.each do |p|
- cv[p] = self.send(p)
- end
- h[:crossvalidation_info] = cv
- end
- if classification_statistics
- clazz = {}
- Lib::VAL_CLASS_PROPS_SINGLE.each{ |p| clazz[p] = classification_statistics[p] }
+ # adding to_yaml and to_rdf functionality to validation
+ class Validation < Lib::Validation
+
+ # get_content is the basis for to_yaml and to_rdf
+ # the idea is that everything is stored in a hash structure
+ # the hash is directly printed in to_yaml, while the has_keys can be used to resolve
+ # the right properties, classes
+ def get_content
- # transpose results per class
- class_values = {}
- Lib::VAL_CLASS_PROPS_PER_CLASS.each do |p|
- classification_statistics[p].each do |class_value, property_value|
- class_values[class_value] = {:class_value => class_value} unless class_values.has_key?(class_value)
- map = class_values[class_value]
- map[p] = property_value
+ h = {}
+ Lib::VAL_PROPS.each{|p| h[p] = self.send(p)}
+ if crossvalidation_id!=nil
+ cv = {}
+ Lib::VAL_CV_PROPS.each do |p|
+ cv[p] = self.send(p)
end
+ h[:crossvalidation_info] = cv
end
- clazz[:class_value_statistics] = class_values.values
-
- #converting confusion matrix
- cells = []
- classification_statistics[:confusion_matrix].each do |k,v|
- cell = {}
- # key in confusion matrix is map with predicted and actual attribute
- k.each{ |kk,vv| cell[kk] = vv }
- cell[:confusion_matrix_value] = v
- cells.push cell
+ if classification_statistics
+ clazz = {}
+ Lib::VAL_CLASS_PROPS_SINGLE.each{ |p| clazz[p] = classification_statistics[p] }
+
+ # transpose results per class
+ class_values = {}
+ Lib::VAL_CLASS_PROPS_PER_CLASS.each do |p|
+ classification_statistics[p].each do |class_value, property_value|
+ class_values[class_value] = {:class_value => class_value} unless class_values.has_key?(class_value)
+ map = class_values[class_value]
+ map[p] = property_value
+ end
+ end
+ clazz[:class_value_statistics] = class_values.values
+
+ #converting confusion matrix
+ cells = []
+ classification_statistics[:confusion_matrix].each do |k,v|
+ cell = {}
+ # key in confusion matrix is map with predicted and actual attribute
+ k.each{ |kk,vv| cell[kk] = vv }
+ cell[:confusion_matrix_value] = v
+ cells.push cell
+ end
+ cm = { :confusion_matrix_cell => cells }
+ clazz[:confusion_matrix] = cm
+
+ h[:classification_statistics] = clazz
+ elsif regression_statistics
+ regr = {}
+ Lib::VAL_REGR_PROPS.each{ |p| regr[p] = regression_statistics[p]}
+ h[:regression_statistics] = regr
end
- cm = { :confusion_matrix_cell => cells }
- clazz[:confusion_matrix] = cm
+ return h
+ end
+
+ def to_yaml
+ get_content.to_yaml
+ end
+
+ def to_rdf
+ owl = ValidationOwl.new()
+ owl.title = "Validation"
+ owl.uri = uri
+ owl.add_content( ValidationToRDF.new, get_content, "Validation" )
+ owl.rdf
+ end
+ end
+
+ class Crossvalidation < Lib::Crossvalidation
+
+ def get_content
+ h = {}
+ Lib::CROSS_VAL_PROPS.each{|p| h[p] = self.send(p)}
- h[:classification_statistics] = clazz
- elsif regression_statistics
- regr = {}
- Lib::VAL_REGR_PROPS.each{ |p| regr[p] = regression_statistics[p]}
- h[:regression_statistics] = regr
+ v = []
+ Validation.all(:crossvalidation_id => self.id).each do |val|
+ v.push({ :validation_uri => val.uri.to_s })
+ end
+ h[:validations] = v
+ h
end
- return h
- end
-
- def to_yaml
- get_content.to_yaml
- end
-
- def to_rdf
- owl = ValidationOwl.new()
- owl.title = "Validation"
- owl.uri = uri
- owl.add_content( ValidationToRDF.new, get_content, "Validation" )
- owl.rdf
- end
- end
-
-class Crossvalidation < Lib::Crossvalidation
-
- def get_content
- h = {}
- Lib::CROSS_VAL_PROPS.each{|p| h[p] = self.send(p)}
- v = []
- Validation.all(:crossvalidation_id => self.id).each do |val|
- v.push({ :validation_uri => val.uri.to_s })
+ def to_yaml
+ get_content.to_yaml
end
- h[:validations] = v
- h
- end
-
- def to_yaml
- get_content.to_yaml
- end
-
- def to_rdf
- owl = ValidationOwl.new()
- owl.title = "Crossvalidation"
- owl.uri = uri
- owl.add_content( CrossvalidationToRDF.new, get_content, "Crossvalidation" )
- owl.rdf
- end
-
-end
-
-
-class ValidationOwl
- include OpenTox::Owl
-
- def initialize
- super
- end
-
- def add_content( content_to_rdf, output, clazz )
- @content_to_rdf = content_to_rdf
- recursiv_add_content( output, @model.subject(RDF['type'],OT[clazz]) )
+
+ def to_rdf
+ owl = ValidationOwl.new()
+ owl.title = "Crossvalidation"
+ owl.uri = uri
+ owl.add_content( CrossvalidationToRDF.new, get_content, "Crossvalidation" )
+ owl.rdf
+ end
+
end
+
- private
- def recursiv_add_content( output, node )
- output.each do |k,v|
- raise "null value: "+k.to_s if v==nil
- if v.is_a?(Hash)
- new_node = add_class( k, node )
- recursiv_add_content( v, new_node )
- elsif v.is_a?(Array)
- v.each do |value|
+ class ValidationOwl
+ include OpenTox::Owl
+
+ def initialize
+ super
+ end
+
+ def add_content( content_to_rdf, output, clazz )
+ @content_to_rdf = content_to_rdf
+ recursiv_add_content( output, @model.subject(RDF['type'],OT[clazz]) )
+ end
+
+ private
+ def recursiv_add_content( output, node )
+ output.each do |k,v|
+ raise "null value: "+k.to_s if v==nil
+ if v.is_a?(Hash)
new_node = add_class( k, node )
- recursiv_add_content( value, new_node )
+ recursiv_add_content( v, new_node )
+ elsif v.is_a?(Array)
+ v.each do |value|
+ new_node = add_class( k, node )
+ recursiv_add_content( value, new_node )
+ end
+ elsif @content_to_rdf.literal?(k)
+ set_literal( k, v, node)
+ elsif @content_to_rdf.object_property?(k)
+ add_object_property( k, v, node)
+ elsif [ :uri, :id, :finished ].index(k)!=nil
+ #skip
+ else
+ raise "illegal value k:"+k.to_s+" v:"+v.to_s
end
- elsif @content_to_rdf.literal?(k)
- set_literal( k, v, node)
- elsif @content_to_rdf.object_property?(k)
- add_object_property( k, v, node)
- elsif [ :uri, :id, :finished ].index(k)!=nil
- #skip
- else
- raise "illegal value k:"+k.to_s+" v:"+v.to_s
end
end
- end
-
- def add_class( property, node )
- raise "no object prop: "+property.to_s unless @content_to_rdf.object_property?(property)
- raise "no class name: "+property.to_s unless @content_to_rdf.class_name(property)
- res = @model.create_resource
- @model.add res, RDF['type'], @content_to_rdf.class_name(property)
- @model.add res, DC['title'], @content_to_rdf.class_name(property)
- @model.add node, @content_to_rdf.object_property_name(property), res
- return res
- end
- def set_literal(property, value, node )
- raise "empty literal value "+property.to_s if value==nil || value.to_s.size==0
- raise "no literal name "+propety.to_s unless @content_to_rdf.literal_name(property)
- begin
- l = @model.object(subject, @content_to_rdf.literal_name(property))
- @model.delete node, @content_to_rdf.literal_name(property), l
- rescue
- end
- @model.add node, @content_to_rdf.literal_name(property), value.to_s
+ def add_class( property, node )
+ raise "no object prop: "+property.to_s unless @content_to_rdf.object_property?(property)
+ raise "no class name: "+property.to_s unless @content_to_rdf.class_name(property)
+ res = @model.create_resource
+ @model.add res, RDF['type'], @content_to_rdf.class_name(property)
+ @model.add res, DC['title'], @content_to_rdf.class_name(property)
+ @model.add node, @content_to_rdf.object_property_name(property), res
+ return res
+ end
+
+ def set_literal(property, value, node )
+ raise "empty literal value "+property.to_s if value==nil || value.to_s.size==0
+ raise "no literal name "+propety.to_s unless @content_to_rdf.literal_name(property)
+ begin
+ l = @model.object(subject, @content_to_rdf.literal_name(property))
+ @model.delete node, @content_to_rdf.literal_name(property), l
+ rescue
+ end
+ @model.add node, @content_to_rdf.literal_name(property), value.to_s
+ end
+
+ def add_object_property(property, value, node )
+ raise "empty object property value "+property.to_s if value==nil || value.to_s.size==0
+ raise "no object property name "+propety.to_s unless @content_to_rdf.object_property_name(property)
+ @model.add node, @content_to_rdf.object_property_name(property), Redland::Uri.new(value) # untyped individual comes from this line, why??
+ #@model.add Redland::Uri.new(value), RDF['type'], type
+ end
+
end
- def add_object_property(property, value, node )
- raise "empty object property value "+property.to_s if value==nil || value.to_s.size==0
- raise "no object property name "+propety.to_s unless @content_to_rdf.object_property_name(property)
- @model.add node, @content_to_rdf.object_property_name(property), Redland::Uri.new(value) # untyped individual comes from this line, why??
- #@model.add Redland::Uri.new(value), RDF['type'], type
- end
-end
-
-
-class ContentToRDF
-
- def literal?( prop )
- @literals.index( prop ) != nil
- end
+ class ContentToRDF
+
+ def literal?( prop )
+ @literals.index( prop ) != nil
+ end
+
+ def literal_name( prop )
+ #PENDING
+ return OT[prop.to_s]
+ end
+
+ def object_property?( prop )
+ @object_properties.has_key?( prop )
+ end
+
+ def object_property_name( prop )
+ return @object_properties[ prop ]
+ end
- def literal_name( prop )
- #PENDING
- return OT[prop.to_s]
+ def class_name( prop )
+ return @classes[ prop ]
+ end
+
end
- def object_property?( prop )
- @object_properties.has_key?( prop )
- end
- def object_property_name( prop )
- return @object_properties[ prop ]
- end
-
- def class_name( prop )
- return @classes[ prop ]
+ class CrossvalidationToRDF < ContentToRDF
+
+ def initialize()
+ @literals = [ :stratified, :num_folds, :random_seed ]
+ @object_properties = { :dataset_uri => OT['crossvalidationDataset'], :algorithm_uri => OT['crossvalidationAlgorithm'],
+ :validation_uri => OT['crossvalidationValidation'], :validations => OT['crossvalidationValidations'] }
+ @classes = { :validations => OT['CrossvalidationValidations'] }
+ end
end
-end
-
-
-class CrossvalidationToRDF < ContentToRDF
+ class ValidationToRDF < ContentToRDF
+
+ def initialize()
+ @literals = [ :created_at, :real_runtime, :num_instances, :num_without_class,
+ :percent_without_class, :num_unpredicted, :percent_unpredicted,
+ :crossvalidation_fold, :crossvalidation_id,
+ :num_correct, :num_incorrect, :percent_correct, :percent_incorrect,
+ :area_under_roc, :false_negative_rate, :false_positive_rate,
+ :f_measure, :num_false_positives, :num_false_negatives,
+ :num_true_positives, :num_true_negatives, :precision,
+ :recall, :true_negative_rate, :true_positive_rate,
+ :confusion_matrix_value ]
+ # created at -> date
+ # owl.set_literal(OT['numInstances'],validation.num_instances)
+ # owl.set_literal(OT['numWithoutClass'],validation.num_without_class)
+ # owl.set_literal(OT['percentWithoutClass'],validation.percent_without_class)
+ # owl.set_literal(OT['numUnpredicted'],validation.num_unpredicted)
+ # owl.set_literal(OT['percentUnpredicted'],validation.percent_unpredicted)
+
+
+ @object_properties = { :model_uri => OT['validationModel'], :training_dataset_uri => OT['validationTrainingDataset'],
+ :prediction_feature => OT['predictedFeature'], :test_dataset_uri => OT['validationTestDataset'],
+ :prediction_dataset_uri => OT['validationPredictionDataset'], :crossvalidation_info => OT['hasValidationInfo'],
+ :classification_statistics => OT['hasValidationInfo'],
+ :class_value_statistics => OT['classValueStatistics'], :confusion_matrix => OT['confusionMatrix'],
+ :confusion_matrix_cell => OT['confusionMatrixCell'], :class_value => OT['class_value'],
+ :confusion_matrix_actual => OT['confusionMatrixActual'], :confusion_matrix_predicted => OT['confusionMatrixPredicted'] }
+
+ @classes = { :crossvalidation_info => OT['CrossvalidationInfo'], :classification_statistics => OT['ClassificationStatistics'],
+ :class_value_statistics => OT['ClassValueStatistics'],
+ :confusion_matrix => OT['ConfusionMatrix'], :confusion_matrix_cell => OT['ConfusionMatrixCell']}
+ end
- def initialize()
- @literals = [ :stratified, :num_folds, :random_seed ]
- @object_properties = { :dataset_uri => OT['crossvalidationDataset'], :algorithm_uri => OT['crossvalidationAlgorithm'],
- :validation_uri => OT['crossvalidationValidation'], :validations => OT['crossvalidationValidations'] }
- @classes = { :validations => OT['CrossvalidationValidations'] }
end
end
-
-class ValidationToRDF < ContentToRDF
-
- def initialize()
- @literals = [ :created_at, :real_runtime, :num_instances, :num_without_class,
- :percent_without_class, :num_unpredicted, :percent_unpredicted,
- :crossvalidation_fold, :crossvalidation_id,
- :num_correct, :num_incorrect, :percent_correct, :percent_incorrect,
- :area_under_roc, :false_negative_rate, :false_positive_rate,
- :f_measure, :num_false_positives, :num_false_negatives,
- :num_true_positives, :num_true_negatives, :precision,
- :recall, :true_negative_rate, :true_positive_rate,
- :confusion_matrix_value ]
- # created at -> date
- # owl.set_literal(OT['numInstances'],validation.num_instances)
- # owl.set_literal(OT['numWithoutClass'],validation.num_without_class)
- # owl.set_literal(OT['percentWithoutClass'],validation.percent_without_class)
- # owl.set_literal(OT['numUnpredicted'],validation.num_unpredicted)
- # owl.set_literal(OT['percentUnpredicted'],validation.percent_unpredicted)
-
-
- @object_properties = { :model_uri => OT['validationModel'], :training_dataset_uri => OT['validationTrainingDataset'],
- :prediction_feature => OT['predictedFeature'], :test_dataset_uri => OT['validationTestDataset'],
- :prediction_dataset_uri => OT['validationPredictionDataset'], :crossvalidation_info => OT['hasValidationInfo'],
- :classification_statistics => OT['hasValidationInfo'],
- :class_value_statistics => OT['classValueStatistics'], :confusion_matrix => OT['confusionMatrix'],
- :confusion_matrix_cell => OT['confusionMatrixCell'], :class_value => OT['class_value'],
- :confusion_matrix_actual => OT['confusionMatrixActual'], :confusion_matrix_predicted => OT['confusionMatrixPredicted'] }
-
- @classes = { :crossvalidation_info => OT['CrossvalidationInfo'], :classification_statistics => OT['ClassificationStatistics'],
- :class_value_statistics => OT['ClassValueStatistics'],
- :confusion_matrix => OT['ConfusionMatrix'], :confusion_matrix_cell => OT['ConfusionMatrixCell']}
- end
-
-end