knn
knn copied to clipboard
Simple K Nearest Neighbour Algorithm
= K Nearest Neighbours
Simple KNN Ruby implementation
== Install
gem sources -a -http://gemcutter.org sudo gem install naive_bayes
== How To Use
require 'rubygems' require 'knn'
data = Array.new(100000) { Array.new(4) { rand } }
knn = KNN.new(data)
knn.nearest_neighbours([1,2,3,4], 4) # ([data], k's) #=> [[4837, 7.43033158269445, [0.966558570073977, 0.903158898673566, 0.954567901514261, 0.988114355901207]], ...
Data is returned in the format
[data index, distance to the input, [data points]]
So if we called queried the data array for 4837...
data[4837] #=> [0.966558570073977, 0.903158898673566, 0.954567901514261, 0.988114355901207]
== Distance Measurements
KNN uses the Distance Measures Gem (http://github.com/reddavis/Distance-Measures) so we get quite a range of distance measurements.
The measurements currently available are:
euclidean_distance
cosine_similarity
jaccard_index
jaccard_distance
binary_jaccard_index
binary_jaccard_distance
tanimoto_coefficient
To specify a particular one to use in the KNN algorithm, just provide it as an option:
KNN.new(@data, :distance_measure => :jaccard_index) KNN.new(@data, :distance_measure => :cosine_similarity) KNN.new(@data, :distance_measure => :tanimoto_coefficient)
== Copyright
Copyright (c) 2009 Red Davis. See LICENSE for details.