Skip to content

Instantly share code, notes, and snippets.

@kerminz
Created September 28, 2018 22:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kerminz/dc124befe1bc0900c1a1cb1a68e8b94d to your computer and use it in GitHub Desktop.
Save kerminz/dc124befe1bc0900c1a1cb1a68e8b94d to your computer and use it in GitHub Desktop.
Simple kNN classifier to determine if a given dog (weight, height) whether is a Labrador oder a Bernese Mountain Dog
// Training Data
const weightX = [40,42,42.5,48,50,51,37,38.5,42.5,44.5,45.5,46.5,43.5,51.5,52,47.0,49.5,48.0,48.5,50.5,38,30,35,38,32,30,33,36,36,40,41,37,34,32,31.5,35.5,36,37.5,37,40,38,39]
const heightY = [60,62,62,72,70.5,69.5,55,53.5,61,62,62.5,65,65.5,69,70.5,62.5,59,58,61,64,58,52,54,56,50,48,50.5,51.5,57,59,58,55,52,50,51,49,49.5,52,53,55,52,56.5]
// Label – 0 stands for Berner Sennenhund, 1 for Labrador Retriever
const label = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
const k = 4;
const distances = [];
function getDistances (dogWx, dogHy) {
for (var i=0; i < weightX.length; i++) {
// calculating distance between the points
const dx = weightX[i] - dogWx;
const dy = heightY[i] - dogHy;
const d = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
const label = getLabel(i);
// creating distance objects and push them to the distances array with index, distance, label
const distance = [i, d, label];
distances.push(distance);
// Sort distances in descending order
distances.sort(function(a,b) {
return a[1] - b[1];
});
}
}
function getLabel(index) {
return label[index];
}
function getNearestNeighbors(k, testDataX, testDataY) {
var sum = 0;
getDistances (testDataX, testDataY);
//
for (var i=0; i < k; i++) {
console.log(distances[i])
sum += distances[i][2];
}
const knn = sum / k;
if (knn < 0.5) {
console.log("Berner Sennenhund");
} else {
console.log("Labrador Retriever");
}
}
// Run
getNearestNeighbors(k, 39, 55);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment