class Callidus::KNN

Attributes

input[RW]
output[RW]

Public Class Methods

new(ip = [], op = []) click to toggle source
# File lib/src/KNN.rb, line 8
def initialize(ip = [], op = [])
    @input = ip
    @output = op
end

Public Instance Methods

predict(x, k = 1) click to toggle source
# File lib/src/KNN.rb, line 13
def predict(x, k = 1)
    diffs = @input.map { |i| Math.sqrt(x.each_with_index.map { |val, ind| (i[ind] - val) ** 2 }.sum) }
    tdiffs = diffs.dup

    mins = []

    k.times do |i|
        ind = tdiffs.index(tdiffs.min)
        mins << tdiffs[ind]
        tdiffs.pop(ind)
    end

    @output[diffs.index(Comp::Arrays.MostFrequent(mins))];
end