class DataMining::KNearestNeighbor
k-Nearest Neighbor Classifier
Public Class Methods
new(training_data, k)
click to toggle source
Find nearest neighbors class
Arguments:
training_data: (array of arrays, like [[:c1, value], [:c2, value] .. ]) k: (integer)
# File lib/data_mining/knn.rb, line 9 def initialize(training_data, k) @data = training_data.map { |i, v| DataMining::Point.new(i, v) } @k = k end
Public Instance Methods
classify(point)
click to toggle source
# File lib/data_mining/knn.rb, line 14 def classify(point) count_classes(k_nearest_points(point)).max_by { |_, v| v }.first end
Private Instance Methods
count_classes(points)
click to toggle source
# File lib/data_mining/knn.rb, line 20 def count_classes(points) points.each_with_object(Hash.new(0)) do |p, o| o[p.id] += 1 end end
k_nearest_points(point)
click to toggle source
# File lib/data_mining/knn.rb, line 26 def k_nearest_points(point) @data.sort_by do |item| euclidean_distance(item, DataMining::Point.new(point[0], point[1])) end.take(@k) end