class Lurn::Evaluation::ClassifierEvaluator
Attributes
unique_classes[RW]
Public Class Methods
new(predicted, actual)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 10 def initialize(predicted, actual) @classes = Daru::DataFrame.new(predicted: predicted, actual: actual) @unique_classes = (predicted + actual).uniq preprocess_classes end
Public Instance Methods
false_negatives(cls)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 37 def false_negatives(cls) @classes.filter_rows { |r| r[:actual] == cls && r[:predicted] != cls }.size end
false_positives(cls)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 33 def false_positives(cls) @classes.filter_rows { |r| r[:predicted] == cls && r[:actual] != cls }.size end
precision(cls)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 16 def precision(cls) true_positives = true_positives(cls) false_positives = false_positives(cls) true_positives.to_f / (true_positives + false_positives).to_f end
recall(cls)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 22 def recall(cls) true_positives = true_positives(cls) false_nevatives = false_negatives(cls) true_positives.to_f / (true_positives + false_nevatives).to_f end
summary()
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 41 def summary headings = ['Class','Precision','Recall'] ::Terminal::Table.new(rows: summary_rows, headings: headings).to_s end
to_csv(file_path)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 47 def to_csv(file_path) headings = ['Class','Precision','Recall'] CSV.open file_path, 'w' do |csv| csv << headings summary_rows.each do |row| csv << row end end end
true_positives(cls)
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 29 def true_positives(cls) @classes.filter_rows { |r| r[:predicted] == r[:actual] && r[:predicted] == cls }.size end
Private Instance Methods
preprocess_classes()
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 77 def preprocess_classes @classes[:accurately_predicted] = @classes.map_rows { |r| r[:predicted] == r[:actual] } end
summary_rows()
click to toggle source
# File lib/lurn/evaluation/classifier_evaluator.rb, line 61 def summary_rows rows = [] precision_sum = 0 recall_sum = 0 @unique_classes.each do |cls| rows << [cls, self.precision(cls), self.recall(cls)] precision_sum = precision_sum + self.precision(cls) recall_sum = recall_sum + self.recall(cls) end rows << ['Overall Average', precision_sum / @unique_classes.length.to_f, recall_sum / @unique_classes.length.to_f] rows end