Algoritma k-Nearest Neighbors (k-NN) adalah algoritma yang berfungsi untuk melakukan klasifikasi suatu data berdasarkan data pembelajaran (train data sets), yang diambil dari k tetangga terdekatnya (nearest neighbors). Dengan k merupakan banyaknya tetangga terdekat
author : cahya dsn
,
published on : November 7th, 2018
updated on : February 7th, 2020
k-Nerest Neaighbors melakukan klasifikasi dengan proyeksi data pembelajaran pada ruang berdimensi banyak. Ruang ini dibagi menjadi bagian-bagian yang merepresentasikan kriteria data pembelajaran. Setiap data pembelajaran direpresentasikan menjadi titik-titik c pada ruang dimensi banyak.
Algoritma K-Nearest Neighbor (k-NN) adalah salah satu metode yang menerapkan algoritma supervised (Han, 2006
) dimana hasil dari sampel uji yang baru diklasifikasikan berdasarkan mayoritas dari kategori pada k-Nearest Neighbor (kNN).
Ketepatan algoritma k-NN ditentukan oleh ada dan tidak adanya data yang tidak relevan, atau jika bobot fitur tersebut setara dengan relevansinya terhadap klasifikasi (Nugroho, 2015
). Algoritma k-NN adalah salah satu metode yang digunakan untuk analisis klasifikasi, namun beberapa dekade terakhir metode k-NN juga digunakan untuk prediksi (Alkhatib, 2013
). k-NN termasuk kelompok instance-based learning. Algoritma ini juga merupakan salah satu teknik lazy learning. k-NN dilakukan dengan mencari kelompok k
objek dalam data training yang paling dekat (mirip) dengan objek pada data baru atau data testing(Leidiyana, 2010
)
Mencari jarak terdekat antara data yang akan dievaluasi dengan k
tetangga (neighbor) terdekatnya dalam data pelatihan. Ruang ini dibagi menjadi kelompok-kelompok berdasarkan klasifikasi data training. Sebuah titik pada tempat ini ditandai dengan kelas c
, dimana jika kelas c
merupakan klasifikasi yang sangat banyak ditemui pada k buah tetangga terdekat titik tersebut. Untuk sistem kerja k-NN data training di proyeksikan ke tempat berdimensi banyak, yang mana dari masing-masing dimensi mempersentasikan fitur dari data (Whidhiasih 2013
)
Tujuan dari algoritma ini adalah mengklasifikasi objek baru berdasakan atribut dan sampel latih. pengklasifikasian tidak menggunakan model apapun untuk dicocokkan dan hanya berdasarkan pada memori. Diberikan titik uji, akan ditemukan sejumlah k
objek (titik training) yang paling dekat dengan titik uji. Klasifikasi menggunakan voting terbanyak di antara klasifikasi dari k
objek. Algoritma k-NN menggunakan klasifikasi ketetanggaan sebagai nilai prediksi dari sample uji yang baru. Dekat atau jauhnya tetangga biasanya dihitung berdasarkan jarak Eucledian.
Algoritma metode k-NN sangatlah sederhana, bekerja dengan berdasarkan pada jarak terpendek dari sample uji ke sample latih untuk menentukan k-NN nya. Setelah mengumpulkan k-NN, kemudian diambil mayoritas dari k-NN untuk dijadikan prediksi dari sample uji. Data untuk algoritma k-NN terdiri dari beberapa atribut multi-variate Xi
yang akan digunakan untuk mengklasifikasikan Y
. Data dari k-NN dapat dalam skala ukuran apapun, dari ordinal ke nominal.
Algoritma k- Nearest Neighbor menggunakan klasifikasi ketetanggaan (neighbor) sebagai nilai prediksi dari query instance yang baru. Algoritma ini sederhana, bekerja berdasarkan jarak terpendek dari query instance ke training sample untuk menentukan ketetanggaannya (Rizal, 2013
). Langkah-langkah untuk menghitung metode k-Nearest Neighbor antara lain:
k
k
K-nearest neighbors melakukan klasifikasi dengan proyeksi data pembelajaran pada ruang berdimensi banyak. Ruang ini dibagi menjadi bagian-bagian yang merepresentasikan kriteria data pembelajaran. Setiap data pembelajaran direpresentasikan menjadi titik-titik $c$ pada ruang dimensi banyak.
d
) -- adalah bagian penting dalam algoritma k-Nearest Neighbor (k-NN). Ada banyak ragam perhitungan dissimilarity ini, diantaranya adalah :Disebut Manhattan ini berdasar pada kota Manhattan yang tersusun menjadi blok-blok. Sehingga sering juga disebut city block distance, juga sering disebut sebagai ablosute value distance atau boxcar distance. Rumusan pencarian jarak Manhattan adalah sebagai berikut:
persamaan jarak Manhattan ini hanya menjumlahkan semua selisih dari $x_{i}$ dan $y_{i}$
Perhitungan jarak yang paling umum dipakai pada perhitungan pada algoritma k-NN adalah menggunakan perhitungan jarak Euclidean. Rumusannya adalah sebagai berikut:
Teknik pencarian tetangga terdekat disesuaikan dengan dimensi data, proyeksi, dan kemudahan implementasi oleh pengguna.
Untuk menggunakan algoritma k nearest neighbors, perlu ditentukan banyaknya $k$ tetangga terdekat yang digunakan untuk melakukan klasifikasi data baru. Banyaknya $k$, sebaiknya merupakan angka ganjil, misalnya $k = 1, 2, 3$, dan seterusnya. Penentuan nilai $k$ dipertimbangkan berdasarkan banyaknya data yang ada dan ukuran dimensi yang dibentuk oleh data. Semakin banyak data yang ada, angka $k$ yang dipilih sebaiknya semakin rendah. Namun, semakin besar ukuran dimensi data, angka $k$ yang dipilih sebaiknya semakin tinggi.
Algoritma k-NN memiliki beberapa kelebihan yaitu:
x
menggunakan k-NN, kita cukup mendefinisikan fungsi untuk menghitung jarak antar-instance, menghitung jarak x
dengan semua instance lainnya berdasarkan fungsi tersebut, dan menentukan kelas x
sebagai kelas yang paling banyak muncul dalam k
instance terdekat
x
. Kita cukup mencari satu instance yang paling dekat dari x
. Instance ini dijamin memiliki kelas yang sama dengan x
. Mengapa? Karena kalau tidak sama, pasti ada instance lain yang lebih dekat dari x
dan memiliki kelas yang sama dengan x
, mengacu pada asumsi kita memiliki semua instance dan tidak ada noise di dalam dataset. Sangat menakjubkan untuk sebuah algoritma yang sederhana.
Sedangkan kelemahan dari k-NN adalah :
k
(Jumlah Tetangga Terdekat)k
kecil. Fleksibilitas ini mengakibatkan k-NN cenderung sensitif terhadap data pencilan, khususnya pencilan yang terletak di 'tengah-tengah' kelas yang berbeda. Lebih jelasnya, perhatikan ilustrasi di bawah.a
saja (perhatikan garis vertikal yang memisahkan kedua kelas secara linear). Namun, k-NN tidak dapat mengetahui bahwa variabel b
tidak informatif. Alhasil, dua instance kelas biru terklasifikasi dengan salah, karena kedua instance tersebut dekat dengan instance kelas jingga dalam dimensi b. Andaikan kita hanya menggunakan variabel a
dan membuang variabel b
, semua instance akan terklasifikasi dengan tepat.Pemilihan variabel sebelum menerapkan kNN dapat membantu menangani permasalahan di atas. Selain itu, kita juga bisa memberi bobot pada variabel dalam perhitungan jarak antar-instance. Variabel yang kita tahu noninformatif kita beri bobot yang kecil, misalnya:
$$d(x_{1},x_{2})=\sqrt(0.97*(x_{11}-x_{21})^2+0.15*(x_{12}-x_{22})^2)$$
p
yang memiliki rentang jauh lebih besar dibanding variabel-variabel lainnya, maka perhitungan jarak akan didominasi oleh p
. Misalkan ada dua variabel, a
dan b
, dengan rentang variabel a
0 sampai 1.000 dan rentang variabel b
0 sampai 10. Kuadrat selisih dua nilai variabel b
tidak akan lebih dari 100, sedangkan untuk variabel a
kuadrat selisihnya bisa mencapai 1.000.000. Hal ini bisa mengecoh k-NN sehingga k-NN menganggap a
tidak membawa pengaruh dalam perhitungan jarak karena rentangnya sangat besar dibanding rentang b
. Ilustrasinya diberikan di bawah ini.x
? Jika dilihat dari 'kacamata' komputer, nearest neighbour x
bukanlah y
, melainkan z
, Mengapa?
Untuk mengatasi perbedaan rentang, biasanya dilakukan preproses berupa standardisasi rentang semua variabel sebelum menerapkan algoritma k-NN. Contohnya yaitu melalui operasi centre-scale atau operasi min-max.
Untuk mengklasifikasi sebuah instance x
, k-NN harus menghitung jarak antara x
dengan semua instance lain dalam dataset yang kita miliki. Dengan kata lain, kompleksitas waktu klasifikasi k-NN berbanding lurus dengan jumlah instance latih. Jika dataset yang kita miliki berukuran besar (terdiri dari banyak instance dan/atau banyak variabel), proses ini bisa jadi sangat lambat. Bayangkan, jika kita punya 10.000 instance dengan masing-masing 20 variabel dan kita ingin mengklasifikasi 100 instance baru (instance uji), maka total operasi yang harus dilakukan menjadi:
(100 instance uji * 10.000 instance_latih) * 20 (variabel/instance) * 2 (operasi/variabel) = 4*107 operasi.
Operasi ini bisa dipercepat dengan vektorisasi, namun nyatanya kNN tetap termasuk salah satu algoritma yang paling lambat dalam melakukan klasifikasi. Beberapa cara pengindexan (k-dimensional tree) dan berbagai proses heuristik -- semisal Locality Sensitive Hashing/LSH (Slaney, 2008
) -- dapat digunakan untuk mereduksi biaya komputasi. Maka dari itu, tidak disarankan menggunakan kNN jika kita punya data latih yang sangat besar (big data).
Algoritma data mining C4.5 [lihat Data Mining Algoritma C4.5] merupakan salah satu algoritma yang digunakan untuk melakukan klasifikasi atau segmentasi atau pengelompokan dan bersifat prediktif. Dasar algoritma C4.5 adalah pembentukan pohon keputusan (decision tree). Cabang-cabang pohon keputusan merupakan pertanyaan klasifikasi dan daun-daunnya merupakan kelas-kelas atau segmen-segmennya.
Algoritma C4.5 merupakan salah satu algoritma machine learning. Dengan algoritma ini, mesin (komputer) akan diberikan sekelompok data untuk dipelajari yang disebut learning dataset. Kemudian hasil dari pembelajaran selanjutnya akan digunakan untuk mengolah data-data yang baru yang disebut test dataset . Karena algoritma C4.5 digunakan untuk melakukan klasifikasi, jadi hasil dari pengolahan test dataset berupa pengelompokkan data ke dalam kelas-kelasnya
Algoritma Apriori adalah algoritma pengambilan data dengan aturan asosiatif untuk menentukan hubungan asosiatif suatu kombinasi item. Algoritma apriori adalah algoritma pengambilan data dengan aturan asosiatif (Association rule)untuk menentukan hubungan asosiatif suatu kombinasi item (Kusrini 2009
). Association Rule yang dimaksud dilakukan melalui mekanisme penghitungan support dan confidence dari suatu hubungan item. Sebuah rule asosiasi dikatakan interesting jika nilai support adalah lebih besar dari minimum support dan juga nilai confidence adalah lebih besar dari minimum confidence. Algoritma apriori ini akan cocok untuk iterapkan bila terdapat beberapa hubungan item yang ingin dianalisa. Salah satunya yang bisa diterapkan adalah di dalam bidang promosi dan penentuan strategi pemasaran.
Klasifikasi Bayesian [lihat Naïve Bayes Classifier] didasarkan pada Teorema Bayes ini. Pengklasifikasi Bayesian adalah pengklasifikasi statistik. Classifier Bayesian mampu memprediksi probabilitas keanggotaan kelas seperti probabilitas bahwa tupel diberikan milik kelas tertentu. Pengantar Klasifikasi Bayesian didasarkan pada Bayes Teorema. Pengklasifikasi Bayesian adalah pengklasifikasi statistik. Classifier Bayesian mampu memprediksi probabilitas keanggotaan kelas seperti probabilitas bahwa tupel diberikan milik kelas tertentu. Dalam klasifikasi statistik classifier Bayes meminimalkan kemungkinan kesalahan klasifikasi.
Data akademik atau informasi yang ada pada suatu perguruan tinggi akan semakin bertambah seiring dengan berlangsungnya proses kegiatan akademik. Hal ini menciptakan kondisi yang membuat adanya suatu tumpukan data. Sampai saat ini, data mahasiswa yang ada belum dimanfaatkan secara maksimal sehingga perlu diolah untuk menemukan sebuah informasi baru.
Data yang digunakan adalah data IP mahasiswa mulai dari semester satu sampai dengan semester empat, menggunakan salah satu fungsi data mining yaitu fungsi klasifikasi dengan menggunakan algoritma k-Nearest Neighbor (k-NN) dengan harapan dapat memprediksi kelulusan tepat waktu mahasiswa sehingga dapat digunakan oleh pihak program studi untuk mencari solusi atau kebijakan dalam proses evaluasi pembelajaran di program studi ilmu komputer.
Data mining adalah serangkaian proses untuk menggali nilai tambah dari suatu kumpulan data berupa pengetahuan yang selama ini tidak diketahui secara manual (Moertini, 2002
). Teknik data mining merupakan sebuah proses ekstraksi informasi untuk menggali pengetahuan (knowledge discovery) dan menemukan pola (pattern recognition) pada tumpukan data dalam database yang biasanya berskala besar. (Larose, 2005
).
Klasifikasi adalah proses penemuan model (atau fungsi) yang menggambarkan dan membedakan kelas data atau konsep yang bertujuan agar bisa digunakan untuk memprediksi kelas dari objek yang label kelasnya tidak diketahui (Han, 2006
). Algoritma yang digunakan untuk melakukan fungsi klasifikasi adalah algoritma k-NN. k-NN adalah metode klasifikasi yang menentukan kategori berdasarkan mayoritas kategori pada k-Nearest Neighbor (Liu, 2007
). kNN dilakukan dengan mencari kelompok k objek dalam data training yang paling dekat (mirip) dengan objek pada data baru atau data testing (Wu, 2009
).
Dalam Algoritma k-NN terdapat salah satu parameter yaitu k
. Berdasarkan jurnal "The Top Ten Algorithms in Data mining" (Wu, 2009
) pemilihan nilai k
menjadi hal yang penting karena akan mempengaruhi kinerja algoritma k-NN. Nilai k
yang terlalu kecil, maka hasil klasifikasi akan lebih terpengaruh oleh noise. Di sisi lain, jika nilai k
terlalu tinggi akan mengurangi efek noise pada klasifikasi, tetapi membuat batasan antara setiap klasifikasi menjadi lebih kabur. Nilai k
yang bagus dapat dipilih dengan optimasi parameter, misalnya dengan menggunakan cross-validation.
Sebagai bahan pembelajaran Algoritma k-NN ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:
CREATE DATABASE IF NOT EXISTS db_dm; USE db_dm;
Awalnya membuat dulu database dengan nama db_dm
jika belum ada database dengan nama tersebut, kemudian gunakan database tersebut dengan memakai sintak USE db_dm;
Sebelum dilakukan perhitungan-perhitungan menggunakan algoritma k-Nearest Neaighbors dengan menggunakan PHP, maka terlebih dahulu kita menyiapkan data yang akan diolah dengan mengambil (fetching) data dari database, dan disimpan (assign) ke dalam variabel-variabel PHP.
Sebelum melalukan operasi dengan data dari database, perlu dibuat script untuk koneksi ke database terlebih dahulu. Dari database yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli sebagai berikut:
<?php
//-- konfigurasi database
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'db_dm';
//-- koneksi ke database server dengan extension mysqli
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- hentikan program dan tampilkan pesan kesalahan jika koneksi gagal
if ($db->connect_error) {
die('Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>;
Sesuaikan nilai-nilai $dbhost,$dbuser,$dbpass
dan $dbname
dengan konfigurasi database yg digunakan.