class AdaBoost::Evaluator

Public Class Methods

new(classifier) click to toggle source
# File lib/adaboost/evaluator.rb, line 5
def initialize(classifier)
  @classifier = classifier
  @threshold = Float::MAX
end

Public Instance Methods

evaluate(test_set) click to toggle source
# File lib/adaboost/evaluator.rb, line 10
def evaluate(test_set)
  contingency_table = ContingencyTable.new
  test_set.each do |sample|
    y = sample[@classifier.y_index]
    h = if Config::USE_THRESHOLD_CLASSIFICATION
      classify_using_threshold(sample)
    else
      classify_normally(sample)
    end
    contingency_table.add_prediction(y, h)
  end
  contingency_table
end
feature_occurrences() click to toggle source
# File lib/adaboost/evaluator.rb, line 32
def feature_occurrences
  used_numbers = used_feature_numbers
  occurrences = {}
  used_numbers.each do |number|
    occurrences[number] = 0 if occurrences[number].nil?
    occurrences[number] += 1
  end
  occurrences
end
used_feature_numbers(unique = false) click to toggle source
# File lib/adaboost/evaluator.rb, line 24
def used_feature_numbers(unique = false)
  used_feature_numbers = []
  @classifier.weak_classifiers.each do |weak_classifier|
    used_feature_numbers << weak_classifier.feature_number
  end
  unique ? used_feature_numbers.uniq : used_feature_numbers
end

Private Instance Methods

classify_normally(sample) click to toggle source
# File lib/adaboost/evaluator.rb, line 54
def classify_normally(sample)
  @classifier.classify(sample > 0) ? 1 : -1
end
classify_using_threshold(sample) click to toggle source
# File lib/adaboost/evaluator.rb, line 58
def classify_using_threshold(sample)
  score = 0.0
  @classifier.weak_classifiers.each do |weak_classifier|
    if sample[weak_classifier.feature_number] > weak_classifier.split
      score += weak_classifier.alpha
    end
  end
  score > threshold ? 1 : -1
end
threshold() click to toggle source
# File lib/adaboost/evaluator.rb, line 44
def threshold
  if @threshold == Float::MAX
    @threshold = 0
    @classifier.weak_classifiers.each do |weak_classifier|
      @threshold += weak_classifier.alpha / 2.0
    end
  end
  @threshold
end