summaryrefslogtreecommitdiff
path: root/report/report_factory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'report/report_factory.rb')
-rwxr-xr-x[-rw-r--r--]report/report_factory.rb464
1 files changed, 124 insertions, 340 deletions
diff --git a/report/report_factory.rb b/report/report_factory.rb
index 646ecfd..e770d2f 100644..100755
--- a/report/report_factory.rb
+++ b/report/report_factory.rb
@@ -3,11 +3,14 @@
VAL_ATTR_TRAIN_TEST = [ :model_uri, :training_dataset_uri, :test_dataset_uri, :prediction_feature ]
# selected attributes of interest when generating the crossvalidation report
VAL_ATTR_CV = [ :algorithm_uri, :dataset_uri, :num_folds, :crossvalidation_fold ]
+
# selected attributes of interest when performing classification
-VAL_ATTR_CLASS = [ :percent_correct, :weighted_area_under_roc, :area_under_roc, :f_measure, :true_positive_rate, :true_negative_rate ]
-VAL_ATTR_REGR = [ :root_mean_squared_error, :mean_absolute_error, :r_square ]
+VAL_ATTR_CLASS = [ :num_instances, :num_unpredicted, :accuracy, :weighted_accuracy, :weighted_area_under_roc,
+ :area_under_roc, :f_measure, :true_positive_rate, :true_negative_rate ]
+VAL_ATTR_REGR = [ :num_instances, :num_unpredicted, :root_mean_squared_error, :mean_absolute_error, :r_square ]
-VAL_ATTR_BAR_PLOT_CLASS = [ :accuracy, :weighted_area_under_roc, :area_under_roc, :f_measure, :true_positive_rate, :true_negative_rate ]
+VAL_ATTR_BAR_PLOT_CLASS = [ :accuracy, :weighted_area_under_roc,
+ :area_under_roc, :f_measure, :true_positive_rate, :true_negative_rate ]
VAL_ATTR_BAR_PLOT_REGR = [ :root_mean_squared_error, :mean_absolute_error, :r_square ]
@@ -20,64 +23,77 @@ module Reports::ReportFactory
RT_VALIDATION = "validation"
RT_CV = "crossvalidation"
RT_ALG_COMP = "algorithm_comparison"
- RT_QMRF = "qmrf"
- REPORT_TYPES = [RT_VALIDATION, RT_CV, RT_ALG_COMP, RT_QMRF ]
+ REPORT_TYPES = [RT_VALIDATION, RT_CV, RT_ALG_COMP ]
# creates a report of a certain type according to the validation data in validation_set
#
# call-seq:
# self.create_report(type, validation_set) => Reports::ReportContent
#
- def self.create_report(type, validation_set)
+ def self.create_report(type, validation_set, task=nil)
case type
when RT_VALIDATION
- create_report_validation(validation_set)
+ create_report_validation(validation_set, task)
when RT_CV
- create_report_crossvalidation(validation_set)
+ create_report_crossvalidation(validation_set, task)
when RT_ALG_COMP
- create_report_compare_algorithms(validation_set)
+ create_report_compare_algorithms(validation_set, task)
else
raise "unknown report type "+type.to_s
end
end
private
- def self.create_report_validation(validation_set)
+ # this function is only to set task progress accordingly
+ # loading predicitons is time consuming, and is done dynamically ->
+ # pre-load and set task progress
+ def self.pre_load_predictions( validation_set, task=nil)
+ i = 0
+ task_step = 100 / validation_set.size.to_f
+ validation_set.validations.each do |v|
+ v.get_predictions( OpenTox::SubTask.create(task, i*task_step, (i+1)*task_step ) )
+ i += 1
+ end
+ end
+
+ def self.create_report_validation(validation_set, task=nil)
- raise Reports::BadRequest.new("num validations is not equal to 1") unless validation_set.size==1
+ raise OpenTox::BadRequestError.new("num validations is not equal to 1") unless validation_set.size==1
val = validation_set.validations[0]
-
+ pre_load_predictions( validation_set, OpenTox::SubTask.create(task,0,80) )
+
report = Reports::ReportContent.new("Validation report")
- if (val.classification?)
- report.add_section_result(validation_set, VAL_ATTR_TRAIN_TEST + VAL_ATTR_CLASS, "Results", "Results")
- report.add_section_roc_plot(validation_set, nil, nil, "roc-plot.svg")
- #val.get_prediction_feature_values.each do |class_value|
- #report.add_section_roc_plot(validation_set, class_value, nil, "roc-plot-"+class_value+".svg")
- #end
- report.add_section_confusion_matrix(val)
- else #regression
- report.add_section_result(validation_set, VAL_ATTR_TRAIN_TEST + VAL_ATTR_REGR, "Results", "Results")
- report.add_section_regression_plot(validation_set)
+ case val.feature_type
+ when "classification"
+ report.add_result(validation_set, [:validation_uri] + VAL_ATTR_TRAIN_TEST + VAL_ATTR_CLASS, "Results", "Results")
+ report.add_roc_plot(validation_set)
+ report.add_confusion_matrix(val)
+ when "regression"
+ report.add_result(validation_set, [:validation_uri] + VAL_ATTR_TRAIN_TEST + VAL_ATTR_REGR, "Results", "Results")
+ report.add_regression_plot(validation_set, :model_uri)
end
+ task.progress(90) if task
- report.add_section_result(validation_set, Lib::ALL_PROPS, "All Results", "All Results")
- report.add_section_predictions( validation_set )
- return report
+ report.add_result(validation_set, Lib::ALL_PROPS, "All Results", "All Results")
+ report.add_predictions( validation_set )
+ task.progress(100) if task
+ report
end
- def self.create_report_crossvalidation(validation_set)
+ def self.create_report_crossvalidation(validation_set, task=nil)
- raise Reports::BadRequest.new("num validations is not >1") unless validation_set.size>1
- raise Reports::BadRequest.new("crossvalidation-id not unique and != nil: "+
+ raise OpenTox::BadRequestError.new("num validations is not >1") unless validation_set.size>1
+ raise OpenTox::BadRequestError.new("crossvalidation-id not unique and != nil: "+
validation_set.get_values(:crossvalidation_id,false).inspect) if validation_set.unique_value(:crossvalidation_id)==nil
validation_set.load_cv_attributes
- raise Reports::BadRequest.new("num validations ("+validation_set.size.to_s+") is not equal to num folds ("+
+ raise OpenTox::BadRequestError.new("num validations ("+validation_set.size.to_s+") is not equal to num folds ("+
validation_set.unique_value(:num_folds).to_s+")") unless validation_set.unique_value(:num_folds)==validation_set.size
- raise Reports::BadRequest.new("num different folds is not equal to num validations") unless validation_set.num_different_values(:crossvalidation_fold)==validation_set.size
- raise Reports::BadRequest.new("validations must be either all regression, "+
- +"or all classification validations") unless validation_set.all_classification? or validation_set.all_regression?
+ raise OpenTox::BadRequestError.new("num different folds is not equal to num validations") unless validation_set.num_different_values(:crossvalidation_fold)==validation_set.size
+ raise OpenTox::BadRequestError.new("validations must have unique feature type, i.e. must be either all regression, "+
+ +"or all classification validations") unless validation_set.unique_feature_type
+ pre_load_predictions( validation_set, OpenTox::SubTask.create(task,0,80) )
merged = validation_set.merge([:crossvalidation_id])
raise unless merged.size==1
@@ -85,336 +101,104 @@ module Reports::ReportFactory
#puts merged.get_values(:percent_correct_variance, false).inspect
report = Reports::ReportContent.new("Crossvalidation report")
- if (validation_set.all_classification?)
- report.add_section_result(merged, VAL_ATTR_CV+VAL_ATTR_CLASS-[:crossvalidation_fold],"Mean Results","Mean Results")
-
- report.add_section_roc_plot(validation_set, nil, nil, "roc-plot.svg", "Roc Plot", nil, "Roc plot")
- report.add_section_roc_plot(validation_set, nil, :crossvalidation_fold, "roc-plot-folds.svg", "Roc Plot", nil, "Roc plots for folds")
- #validation_set.first.get_prediction_feature_values.each do |class_value|
- #report.add_section_roc_plot(validation_set, class_value, nil, "roc-plot-"+class_value+".svg")
- #end
- report.add_section_confusion_matrix(merged.validations[0])
- report.add_section_result(validation_set, VAL_ATTR_CV+VAL_ATTR_CLASS-[:num_folds], "Results","Results")
- else #regression
- report.add_section_result(merged, VAL_ATTR_CV+VAL_ATTR_REGR-[:crossvalidation_fold],"Mean Results","Mean Results")
- report.add_section_result(validation_set, VAL_ATTR_CV+VAL_ATTR_REGR-[:num_folds], "Results","Results")
+ case validation_set.unique_feature_type
+ when "classification"
+ report.add_result(merged, [:crossvalidation_uri]+VAL_ATTR_CV+VAL_ATTR_CLASS-[:crossvalidation_fold],"Mean Results","Mean Results")
+ report.add_roc_plot(validation_set, nil, "ROC Plots over all folds")
+ report.add_roc_plot(validation_set, :crossvalidation_fold)
+ report.add_confusion_matrix(merged.validations[0])
+ report.add_result(validation_set, VAL_ATTR_CV+VAL_ATTR_CLASS-[:num_folds],
+ "Results","Results",nil,"validation")
+ when "regression"
+ report.add_result(merged, [:crossvalidation_uri]+VAL_ATTR_CV+VAL_ATTR_REGR-[:crossvalidation_fold],"Mean Results","Mean Results")
+ report.add_regression_plot(validation_set, :crossvalidation_fold)
+ report.add_result(validation_set, VAL_ATTR_CV+VAL_ATTR_REGR-[:num_folds], "Results","Results")
end
+ task.progress(90) if task
- report.add_section_result(validation_set, Lib::ALL_PROPS, "All Results", "All Results")
- report.add_section_predictions( validation_set, [:crossvalidation_fold] )
- return report
+ report.add_result(validation_set, Lib::ALL_PROPS, "All Results", "All Results")
+ report.add_predictions( validation_set ) #, [:crossvalidation_fold] )
+ task.progress(100) if task
+ report
end
- def self.create_report_compare_algorithms(validation_set)
+ def self.create_report_compare_algorithms(validation_set, task=nil)
#validation_set.to_array([:test_dataset_uri, :model_uri, :algorithm_uri], false).each{|a| puts a.inspect}
- raise Reports::BadRequest.new("num validations is not >1") unless validation_set.size>1
- raise Reports::BadRequest.new("validations must be either all regression, "+
- "or all classification validations") unless validation_set.all_classification? or validation_set.all_regression?
- raise Reports::BadRequest.new("number of different algorithms <2: "+
+ raise OpenTox::BadRequestError.new("num validations is not >1") unless validation_set.size>1
+ raise OpenTox::BadRequestError.new("validations must have unique feature type, i.e. must be either all regression, "+
+ +"or all classification validations") unless validation_set.unique_feature_type
+ raise OpenTox::BadRequestError.new("number of different algorithms <2: "+
validation_set.get_values(:algorithm_uri).inspect) if validation_set.num_different_values(:algorithm_uri)<2
if validation_set.has_nil_values?(:crossvalidation_id)
- if validation_set.num_different_values(:test_dataset_uri)>1
-
- # groups results into sets with equal test and training dataset
- dataset_grouping = Reports::Util.group(validation_set.validations, [:test_dataset_uri, :training_dataset_uri])
- # check if the same algorithms exists for each test and training dataset
- Reports::Util.check_group_matching(dataset_grouping, [:algorithm_uri])
-
- #merged = validation_set.merge([:algorithm_uri, :dataset_uri])
- report = Reports::ReportContent.new("Algorithm comparison report - Many datasets")
-
- if (validation_set.all_classification?)
- report.add_section_result(validation_set,[:algorithm_uri, :test_dataset_uri]+VAL_ATTR_CLASS,"Mean Results","Mean Results")
- report.add_section_ranking_plots(validation_set, :algorithm_uri, :test_dataset_uri,
- [:percent_correct, :true_positive_rate, :true_negative_rate], "true")
- else # regression
- raise Reports::BadRequest.new("not implemented yet for regression")
- end
- return report
- else
- # this groups all validations in x different groups (arrays) according to there algorithm-uri
- algorithm_grouping = Reports::Util.group(validation_set.validations, [:algorithm_uri])
- # we check if there are corresponding validations in each group that have equal attributes (folds, num-folds,..)
- Reports::Util.check_group_matching(algorithm_grouping, [:training_dataset_uri, :test_dataset_uri, :prediction_feature])
-
- report = Reports::ReportContent.new("Algorithm comparison report")
-
- if (validation_set.all_classification?)
- report.add_section_bar_plot(validation_set,nil,:algorithm_uri,VAL_ATTR_BAR_PLOT_CLASS, "bar-plot.svg")
- report.add_section_roc_plot(validation_set,nil, :algorithm_uri, "roc-plot.svg")
- #validation_set.first.get_prediction_feature_values.each do |class_value|
- #report.add_section_bar_plot(validation_set,class_value,:algorithm_uri,VAL_ATTR_CLASS, "bar-plot-"+class_value+".svg")
- #report.add_section_roc_plot(validation_set, class_value, :algorithm_uri, "roc-plot-"+class_value+".svg")
- #end
- report.add_section_result(validation_set,[:algorithm_uri]+VAL_ATTR_CLASS,"Results","Results")
- else
- #regression
- report.add_section_result(validation_set,[:algorithm_uri]+VAL_ATTR_REGR,"Results","Results")
- report.add_section_bar_plot(validation_set,nil,:algorithm_uri,VAL_ATTR_BAR_PLOT_REGR, "bar-plot.svg")
- report.add_section_regression_plot(validation_set)
-
- #report.add_section_result(merged, VAL_ATTR_CV+VAL_ATTR_REGR-[:crossvalidation_fold],"Mean Results","Mean Results")
- #report.add_section_result(validation_set, VAL_ATTR_CV+VAL_ATTR_REGR-[:num_folds], "Results","Results")
- end
- report.add_section_result(validation_set, Lib::ALL_PROPS, "All Results", "All Results")
- return report
- end
+ raise OpenTox::BadRequestError.new("algorithm comparison for non crossvalidation not yet implemented")
else
- raise Reports::BadRequest.new("num different cross-validation-ids <2") if validation_set.num_different_values(:crossvalidation_id)<2
+ raise OpenTox::BadRequestError.new("num different cross-validation-ids <2") if validation_set.num_different_values(:crossvalidation_id)<2
validation_set.load_cv_attributes
-
- if validation_set.num_different_values(:dataset_uri)>1
- # groups results into sets with equal dataset
- dataset_grouping = Reports::Util.group(validation_set.validations, [:dataset_uri])
- # check if equal values in each group exist
- Reports::Util.check_group_matching(dataset_grouping, [:algorithm_uri, :crossvalidation_fold, :num_folds, :stratified, :random_seed])
- # we only checked that equal validations exist in each dataset group, now check for each algorithm
- dataset_grouping.each do |validations|
- algorithm_grouping = Reports::Util.group(validations, [:algorithm_uri])
- Reports::Util.check_group_matching(algorithm_grouping, [:crossvalidation_fold, :num_folds, :stratified, :random_seed])
- end
-
- merged = validation_set.merge([:algorithm_uri, :dataset_uri])
- report = Reports::ReportContent.new("Algorithm comparison report - Many datasets")
-
- if (validation_set.all_classification?)
- report.add_section_result(merged,VAL_ATTR_CV+VAL_ATTR_CLASS-[:crossvalidation_fold],"Mean Results","Mean Results")
- report.add_section_ranking_plots(merged, :algorithm_uri, :dataset_uri, [:acc, :auc, :sens, :spec], "true")
- else # regression
- report.add_section_result(merged,VAL_ATTR_CV+VAL_ATTR_REGR-[:crossvalidation_fold],"Mean Results","Mean Results")
- end
-
- return report
- else
- # this groups all validations in x different groups (arrays) according to there algorithm-uri
- algorithm_grouping = Reports::Util.group(validation_set.validations, [:algorithm_uri])
- # we check if there are corresponding validations in each group that have equal attributes (folds, num-folds,..)
- Reports::Util.check_group_matching(algorithm_grouping, [:crossvalidation_fold, :num_folds, :dataset_uri, :stratified, :random_seed])
- merged = validation_set.merge([:algorithm_uri])
-
- report = Reports::ReportContent.new("Algorithm comparison report")
-
- if (validation_set.all_classification?)
-
- report.add_section_result(merged,VAL_ATTR_CV+VAL_ATTR_CLASS-[:crossvalidation_fold],"Mean Results","Mean Results")
-
- true_class = validation_set.get_true_prediction_feature_value
- if true_class!=nil
- report.add_section_bar_plot(merged,true_class,:algorithm_uri,VAL_ATTR_BAR_PLOT_CLASS, "bar-plot.svg")
- report.add_section_roc_plot(validation_set, nil, :algorithm_uri, "roc-plot.svg")
- else
- validation_set.get_prediction_feature_values.each do |class_value|
- report.add_section_bar_plot(merged,class_value,:algorithm_uri,VAL_ATTR_BAR_PLOT_CLASS, "bar-plot-"+class_value+".svg")
- report.add_section_roc_plot(validation_set, class_value, :algorithm_uri, "roc-plot-"+class_value+".svg")
- end
- end
-
- report.add_section_result(validation_set,VAL_ATTR_CV+VAL_ATTR_CLASS-[:num_folds],"Results","Results")
- else #regression
- report.add_section_result(merged, VAL_ATTR_CV+VAL_ATTR_REGR-[:crossvalidation_fold],"Mean Results","Mean Results")
- report.add_section_result(validation_set, VAL_ATTR_CV+VAL_ATTR_REGR-[:num_folds], "Results","Results")
- end
-
- return report
- end
- end
- end
-
-end
-
-# = Reports::ReportContent
-#
-# wraps an xml-report, adds functionality for adding sections, adds a hash for tmp files
-#
-class Reports::ReportContent
-
- attr_accessor :xml_report, :tmp_files
-
- def initialize(title)
- @xml_report = Reports::XMLReport.new(title, Time.now.strftime("Created at %m.%d.%Y - %H:%M"))
- end
-
- def add_section_predictions( validation_set,
- validation_attributes=[],
- section_title="Predictions",
- section_text="This section contains predictions.",
- table_title="Predictions")
-
- section_table = @xml_report.add_section(@xml_report.get_root_element, section_title)
- if validation_set.validations[0].get_predictions
- @xml_report.add_paragraph(section_table, section_text) if section_text
- @xml_report.add_table(section_table, table_title, Reports::PredictionUtil.predictions_to_array(validation_set, validation_attributes))
- else
- @xml_report.add_paragraph(section_table, "No prediction info available.")
+ compare_algorithms_crossvalidation(validation_set, task)
end
- end
-
- def add_section_result( validation_set,
- validation_attributes,
- table_title,
- section_title="Results",
- section_text="This section contains results.")
-
- section_table = @xml_report.add_section(xml_report.get_root_element, section_title)
- @xml_report.add_paragraph(section_table, section_text) if section_text
- vals = validation_set.to_array(validation_attributes,true,validation_set.get_true_prediction_feature_value)
- vals = vals.collect{|a| a.collect{|v| v.to_s }}
- #PENDING transpose values if there more than 4 columns, and there are more than columns than rows
- transpose = vals[0].size>4 && vals[0].size>vals.size
- @xml_report.add_table(section_table, table_title, vals, !transpose, transpose)
- end
-
- def add_section_confusion_matrix( validation,
- section_title="Confusion Matrix",
- section_text="This section contains the confusion matrix.",
- table_title="Confusion Matrix")
- section_confusion = @xml_report.add_section(xml_report.get_root_element, section_title)
- @xml_report.add_paragraph(section_confusion, section_text) if section_text
- @xml_report.add_table(section_confusion, table_title,
- Reports::XMLReportUtil::create_confusion_matrix( validation.confusion_matrix ), false)
- end
+ end
- def add_section_regression_plot( validation_set,
- split_set_attribute = nil,
- plot_file_name="regression-plot.svg",
- section_title="Regression Plot",
- section_text=nil,
- image_title=nil,
- image_caption=nil)
-
- section_text = "This section contains the regression plot." unless section_text
- image_title = "Regression plot" unless image_title
+ # create Algorithm Comparison report
+ # crossvalidations, 1-n datasets, 2-n algorithms
+ def self.compare_algorithms_crossvalidation(validation_set, task=nil)
- section_regr = @xml_report.add_section(@xml_report.get_root_element, section_title)
- prediction_set = validation_set.collect{ |v| v.get_predictions }
-
- if prediction_set.size>0
-
- section_text += "\nWARNING: regression plot information not available for all validation results" if prediction_set.size!=validation_set.size
- @xml_report.add_paragraph(section_regr, section_text) if section_text
- begin
- plot_file_path = add_tmp_file(plot_file_name)
- Reports::PlotFactory.create_regression_plot( plot_file_path, prediction_set )
- @xml_report.add_imagefigure(section_regr, image_title, plot_file_name, "SVG", image_caption)
- rescue RuntimeError => ex
- LOGGER.error("Could not create regression plot: "+ex.message)
- rm_tmp_file(plot_file_name)
- @xml_report.add_paragraph(section_regr, "could not create regression plot: "+ex.message)
- end
+ # groups results into sets with equal dataset
+ if (validation_set.num_different_values(:dataset_uri)>1)
+ dataset_grouping = Reports::Util.group(validation_set.validations, [:dataset_uri])
+ # check if equal values in each group exist
+ Reports::Util.check_group_matching(dataset_grouping, [:algorithm_uri, :crossvalidation_fold, :num_folds, :stratified, :random_seed])
else
- @xml_report.add_paragraph(section_regr, "No prediction info for regression available.")
+ dataset_grouping = [ validation_set.validations ]
end
- end
-
- def add_section_roc_plot( validation_set,
- class_value = nil,
- split_set_attribute = nil,
- plot_file_name="roc-plot.svg",
- section_title="Roc Plot",
- section_text=nil,
- image_title=nil,
- image_caption=nil)
-
- if class_value
- section_text = "This section contains the roc plot for class '"+class_value+"'." unless section_text
- image_title = "Roc Plot for class-value '"+class_value+"'" unless image_title
- else
- section_text = "This section contains the roc plot." unless section_text
- image_title = "Roc Plot for all classes" unless image_title
+ # we only checked that equal validations exist in each dataset group, now check for each algorithm
+ dataset_grouping.each do |validations|
+ algorithm_grouping = Reports::Util.group(validations, [:algorithm_uri])
+ Reports::Util.check_group_matching(algorithm_grouping, [:crossvalidation_fold, :num_folds, :stratified, :random_seed])
end
- section_roc = @xml_report.add_section(@xml_report.get_root_element, section_title)
- prediction_set = validation_set.collect{ |v| v.get_predictions && v.get_predictions.confidence_values_available? }
+ pre_load_predictions( validation_set, OpenTox::SubTask.create(task,0,80) )
+ report = Reports::ReportContent.new("Algorithm comparison report - Many datasets")
+
+ if (validation_set.num_different_values(:dataset_uri)>1)
+ all_merged = validation_set.merge([:algorithm_uri, :dataset_uri, :crossvalidation_id, :crossvalidation_uri])
+ report.add_ranking_plots(all_merged, :algorithm_uri, :dataset_uri,
+ [:percent_correct, :weighted_area_under_roc, :true_positive_rate, :true_negative_rate] )
+ report.add_result_overview(all_merged, :algorithm_uri, :dataset_uri, [:percent_correct, :weighted_area_under_roc, :true_positive_rate, :true_negative_rate])
+
+ end
+
+ case validation_set.unique_feature_type
+ when "classification"
+ attributes = VAL_ATTR_CV+VAL_ATTR_CLASS-[:crossvalidation_fold]
+ attributes = ([ :dataset_uri ] + attributes).uniq
+
+ dataset_grouping.each do |validations|
+
+ set = Reports::ValidationSet.create(validations)
+
+ dataset = validations[0].dataset_uri
+ merged = set.merge([:algorithm_uri, :dataset_uri, :crossvalidation_id, :crossvalidation_uri])
+ merged.sort(:dataset_uri)
- if prediction_set.size>0
+ report.add_section("Dataset: "+dataset)
+ report.add_result(merged,attributes,
+ "Mean Results","Mean Results",nil,"crossvalidation")
+ report.add_paired_ttest_table(set, :algorithm_uri, :percent_correct)
+
+ report.add_bar_plot(merged, :algorithm_uri, VAL_ATTR_BAR_PLOT_CLASS)
+ report.add_roc_plot(set, :algorithm_uri)
+ report.end_section
+ end
- section_text += "\nWARNING: roc plot information not available for all validation results" if prediction_set.size!=validation_set.size
- @xml_report.add_paragraph(section_roc, section_text) if section_text
- begin
- plot_file_path = add_tmp_file(plot_file_name)
- Reports::PlotFactory.create_roc_plot( plot_file_path, prediction_set, class_value, split_set_attribute, false )#prediction_set.size>1 )
- @xml_report.add_imagefigure(section_roc, image_title, plot_file_name, "SVG", image_caption)
- rescue RuntimeError => ex
- LOGGER.error("could not create roc plot: "+ex.message)
- rm_tmp_file(plot_file_name)
- @xml_report.add_paragraph(section_roc, "could not create roc plot: "+ex.message)
- end
- else
- @xml_report.add_paragraph(section_roc, "No prediction-confidence info for roc plot available.")
+ when "regression"
+ raise OpenTox::BadRequestError.new("algorithm comparison for regression not yet implemented")
end
-
+ task.progress(100) if task
+ report
end
-
- def add_section_ranking_plots( validation_set,
- compare_attribute,
- equal_attribute,
- rank_attributes,
- class_value,
- section_title="Ranking Plots",
- section_text="This section contains the ranking plots.")
-
- section_rank = @xml_report.add_section(@xml_report.get_root_element, section_title)
- @xml_report.add_paragraph(section_rank, section_text) if section_text
- rank_attributes.each{|a| add_ranking_plot(section_rank, validation_set, compare_attribute, equal_attribute, a, class_value, a.to_s+"-ranking.svg")}
- end
-
- def add_ranking_plot( report_section,
- validation_set,
- compare_attribute,
- equal_attribute,
- rank_attribute,
- class_value=nil,
- plot_file_name="ranking.svg",
- image_title=nil,
- image_caption=nil)
+end
- image_title = "Ranking Plot for class value: '"+class_value.to_s+"'" if image_title==nil
- plot_file_path = add_tmp_file(plot_file_name)
- Reports::PlotFactory::create_ranking_plot(plot_file_path, validation_set, compare_attribute, equal_attribute, rank_attribute, class_value)
- @xml_report.add_imagefigure(report_section, image_title, plot_file_name, "SVG", image_caption)
-
- end
-
- def add_section_bar_plot(validation_set,
- class_value,
- title_attribute,
- value_attributes,
- plot_file_name="bar-plot.svg",
- section_title="Bar Plot",
- section_text=nil,
- image_title=nil,
- image_caption=nil)
- if class_value
- section_text = "This section contains the bar plot for class '"+class_value+"'." unless section_text
- image_title = "Bar Plot for class-value '"+class_value+"'" unless image_title
- else
- section_text = "This section contains the bar plot." unless section_text
- image_title = "Bar Plot for all classes" unless image_title
- end
- section_bar = @xml_report.add_section(@xml_report.get_root_element, section_title)
- @xml_report.add_paragraph(section_bar, section_text) if section_text
-
- plot_file_path = add_tmp_file(plot_file_name)
- Reports::PlotFactory.create_bar_plot(plot_file_path, validation_set, class_value, title_attribute, value_attributes )
- @xml_report.add_imagefigure(section_bar, image_title, plot_file_name, "SVG", image_caption)
- end
-
- private
- def add_tmp_file(tmp_file_name)
-
- @tmp_files = {} unless @tmp_files
- raise "file name already exits" if @tmp_files[tmp_file_name] || (@text_files && @text_files[tmp_file_name])
- tmp_file_path = Reports::Util.create_tmp_file(tmp_file_name)
- @tmp_files[tmp_file_name] = tmp_file_path
- return tmp_file_path
- end
-
- def rm_tmp_file(tmp_file_name)
- @tmp_files.delete(tmp_file_name) if @tmp_files.has_key?(tmp_file_name)
- end
-
-end \ No newline at end of file