Algoritma K-nearest neighbor atau KNN adalah sebuah metode untuk melakukan klasifikasi terhadap objek berdasarkan data latih yang jaraknya paling dekat dengan objek tersebut.
Data data latih diproyeksikan ke ruang berdimensi banyak dimana masing-masing dimensi dipersentasikan fitur dari data. Ruang ini dibagi menjadi bagian-bagian berdasakan klasifikasi data pembelajaran. Sebuah titik pada ruang ini ditandai kelas C jika kelas c merupakan klasifikasi yang paling banyak ditemui pada k buah tetangg a terdekat titik tersebut. Dekat atau jauhnya tetangga biasanya dihitung berdasarkan jarak Euclidean. Pada fase pembelajaran, algoritma ini hanya melakukan penyimpanan vector vector fitur dan klasifikasi data test. Jarak dari vector yang baru ini terhadap seluruh vektor data pembelajaran dihitung dan sejumlah k buah yang paling dekat diambil. Titik yang baru klasifikasinya dipredisikan termasuk pada klasifikasi terbanyak dari titik-titik tersebut.
Nilai K yang terbaik untuk algoritma ini tergantung oada data secara umumnya. Nilai k yang tinggi akan mengurangi efek noise pada klasifikasinya, tetapi membuat batasan antara setiap klasifikasi menjadi lebih kabur. Nilai K yang bagus dapat dipilih dengan optimasi parameter, misalnya dengan menggunakan cross-validation. Kasus khusus dimana klasifikasi diprediksikan berdasarkan data pembelajaran yang paling dekat (dengan kata lain k=1)disebut algortimat nearst neighbor.
Euclidean distance adalah perhitungan jarak dari 2 buah titik dalam Euclidean space. Euclidean space diperkenalkan oleh seorang matematikawan dari Yunani sekitar tahun 300 B.C.E untuk mempelajari hubungan antara sudut dan jarak. Euclidean ini biasanya diterapkan pada 2 dimensi dan 3 dimensi. Tapi juga sederana jika diterapkan pada dimensi yang lebih tinggi.
1. buat file bernama sketch.js berikut source codenya :
var training = [];
var k = 1;
var data;
var skip = 20;
var kSlider;
var kParagraph;
function setup() {
createCanvas(800, 600);
kSlider = createSlider(1, 10, 1);
kParagraph = createP();
kSlider.input(update);
for (var i = 0; i < 50; i++) {
var x = random(width);
var y = random(height);
var label = 'A';
var r = random(1);
if (r < 0.33) {
label = 'B';
} else if (r < 0.67) {
label = 'C';
}
var point = {
x: x,
y: y,
label: label
};
training.push(point);
}
update();
}
function update() {
background(0);
var k = kSlider.value();
kParagraph.html('k: ' + k);
for (var x = 0; x < width; x += skip) {
for (var y = 0; y < height; y += skip) {
var neighbors = [];
for (var i = 0; i < training.length; i++) {
var point = training[i];
var d = dist(x, y, point.x, point.y);
neighbors.push({
dist: d,
label: point.label
});
}
neighbors.sort(byDistance);
function byDistance(a, b) {
return a.dist - b.dist;
}
var knn = {};
for (var i = 0; i < k; i++) {
var nb = neighbors[i];
if (knn[nb.label]) {
knn[nb.label]++;
} else {
// Otherwise start with 1
knn[nb.label] = 1;
}
}
var options = Object.keys(knn);
var record = 0;
var classification = null;
for (var i = 0; i < options.length; i++) {
var label = options[i];
var total = knn[label];
if (total > record) {
record = total;
classification = label;
}
}
if (classification == 'A') {
fill(255, 255, 0, 200);
} else if (classification == 'B') {
fill(0, 255, 255, 200);
} else {
fill(255, 0, 255, 200);
}
noStroke();
rect(x, y, skip, skip);
}
}
for (var i = 0; i < training.length; i++) {
var point = training[i];
if (point.label == 'A') {
fill(255, 255, 0, 200);
} else if (point.label == 'B') {
fill(0, 255, 255, 200);
} else {
fill(255, 0, 255, 200);
}
stroke(0);
ellipse(point.x, point.y, 24, 24);
noStroke();
fill(0);
textAlign(CENTER);
textSize(12);
text(point.label, point.x, point.y + 6);
}
}
2. Membuat File index.html
<html>
<head>
<title>Algortima KNN</title>
<meta charset="UTF-8">
<script language="javascript" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/p5.js"></script>
<!-- uncomment lines below to include extra p5 libraries -->
<script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.dom.js"></script>
<!--<script language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.6.1/addons/p5.sound.js"></script>-->
<script language="javascript" type="text/javascript" src="sketch.js"></script>
<!-- this line removes any default padding and style. you might only need one of these values set. -->
</head>
<body>
</body>
</html>
berikut adalah hasil dari codingan di atas :
Buat temen-temen yang males coding bisa langsung download aja DISINI
No comments:
Post a Comment