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