Algoritma K-Nearest Neighbor

K-NN merupakan salah satu algoritma pembelajaran mesin sederhana. Hal ini hanya didasarkan pada gagasan bahwa suatu objek yang “dekat” satu sama lain juga akan memiliki karakteristik yang mirip. Ini berarti jika kita mengetahui ciri ciri dari salah satu objek, maka kita juga dapat memprediksi objek lain berdasarkan tetangga terdekatnya. K-NN adalah improvisasi lanjutan dari teknik klasifikasi Nearest Neighbor. Hal ini didasarkan pada gagasan bahwa setiap  data baru dapat diklasifikasikan oleh suara mayoritas dari K tetangga, di mana K adalah bilangan bulat positif, dan biasanya dengan jumlah kecil (Khamis et. all., 2014). Nilai K biasanya ganjil, hal ini bertujuan agar tidak ada hasil seri pada voting tetangga terdekat.

Secara umum untuk mendefinisikan jarak antara dua objek a dan b, digunakan rumus jarak Euclidean pada persamaan 2.1 (Mustafa, 2014):

dengan:

Algoritma pengerjaan metode K-Nearest Neighbor adalah sebagai berikut:

  1. Tentukan parameter K (banyak tetangga terdekat)
  2. Hitung jarak data baru/data testing dengan semua data yang ada di data training menggunakan jarak Euclidean (persamaan 2.1)
  3. Urutkan jarak dan tentukan tetangga mana yang paling dekat berdasarkan jarak minimum ke-K
  4. Menentukan kategori dari tetangga terdekat
  5. Menggunakan kategori mayoritas yang sederhana dari tetangga terdekat sebagai nilai prediksi data baru.

Contoh Kasus

Data training:

No.Status Pembayaran PremiUsia (Tahun)Lama Pembayaran Premi (Tahun)Besar Pembayaran Premi (Juta Rupiah/bulan)
1Lancar2950,5
2Lancar3651
3Lancar57104
4Lancar4594
5Lancar40102,5
6Tidak Lancar6090,5
7Tidak Lancar39100,5
8Tidak Lancar4195
9Tidak Lancar6084
10Tidak Lancar5285

Data testing:

No.Status Pembayaran PremiUsia (Tahun)Lama Pembayaran Premi (Tahun)Besar Pembayaran Premi (Juta Rupiah/bulan)
1?3071

Sebuah perusahaan asuransi ingin mengetahui status pembayaran premi bulanan (lancar atau tidak lancar) seorang nasabah baru yang akan bergabung. Berdasarkan data di atas, hitung menggunakan algoritma K-NN.

Jawab

1.  Menentukan parameter K yaitu 1, 3, 5, dan 7

2. Hitung jarak data baru/data testing dengan semua data yang ada di data training menggunakan jarak Euclidean (persamaan 2.1)

dengan:

Menghitung jarak antara data training pertama dengan data testing pertama

Menghitung jarak antara data training kedua dengan data testing pertama

Menghitung jarak antara data training ketiga dengan data testing pertama

Jarak Euclidean dihitung hingga data training kesepuluh dan data testing pertama

Sehingga didapatkan jarak Euclidean seperti tabel berikut ini

Status Pembayaran PremiJarak Euclidean
Lancar2,29
Lancar6,32
Lancar27,33
Lancar15,42
Lancar10,54
Tidak Lancar30,07
Tidak Lancar9,5
Tidak Lancar11,87
Tidak Lancar30,16
Tidak Lancar22,38

3.  Urutkan jarak dan tentukan tetangga mana yang paling dekat berdasarkan jarak minimum ke-K diikuti oleh kategori (Status Pembayaran Premi) dari tetangga terdekat

Jarak Euclidean yang sudah diurutkan:

Status Pembayaran PremiJarak Euclidean setelah diurutkan
Lancar2,29
Lancar6,32
Tidak Lancar9,5
Lancar10,54
Tidak Lancar11,87
Lancar15,42
Tidak Lancar22,38
Lancar27,33
Tidak Lancar30,07
Tidak Lancar30,16

4.  Menggunakan kategori mayoritas yang sederhana dari tetangga terdekat sebagai nilai prediksi data baru/data testing

  • Untuk K=1
Status Pembayaran PremiJarak Euclidean setelah diurutkan
Lancar2,29
Lancar6,32
Tidak Lancar9,5
Lancar10,54
Tidak Lancar11,87
Lancar15,42
Tidak Lancar22,38
Lancar27,33
Tidak Lancar30,07
Tidak Lancar30,16

Berdasarkan hasil voting 1 tetangga terdekat, maka data testing diprediksi memiliki status pembayaran premi LANCAR

  • Untuk K=3
Status Pembayaran PremiJarak Euclidean setelah diurutkan
Lancar2,29
Lancar6,32
Tidak Lancar9,5
Lancar10,54
Tidak Lancar11,87
Lancar15,42
Tidak Lancar22,38
Lancar27,33
Tidak Lancar30,07
Tidak Lancar30,16

Berdasarkan hasil voting 3 tetangga terdekat (2 Lancar dan 1 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR

  • Untuk K=5
Status Pembayaran PremiJarak Euclidean setelah diurutkan
Lancar2,29
Lancar6,32
Tidak Lancar9,5
Lancar10,54
Tidak Lancar11,87
Lancar15,42
Tidak Lancar22,38
Lancar27,33
Tidak Lancar30,07
Tidak Lancar30,16

Berdasarkan hasil voting 5 tetangga terdekat (3 Lancar dan 2 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR

  • Untuk K=7
Status Pembayaran PremiJarak Euclidean setelah diurutkan
Lancar2,29
Lancar6,32
Tidak Lancar9,5
Lancar10,54
Tidak Lancar11,87
Lancar15,42
Tidak Lancar22,38
Lancar27,33
Tidak Lancar30,07
Tidak Lancar30,16

Berdasarkan hasil voting 7 tetangga terdekat (4 Lancar dan 3 Tidak Lancar), maka data testing diprediksi memiliki status pembayaran premi LANCAR

KESIMPULAN

Berdasarkan perhitungan menggunakan algoritma K-NN dengan K=1,3,5, dan 7, nasabah baru yang akan bergabung diprediksi akan memiliki status pembayaran premi LANCAR pada setiap nilai K.

Sintaks K-NN pada software R

library(class)
#saat menyimpan data, gunakan penamaan Y, X1, X2, dan X3 (Y untuk variabel kategorik)
data=read.table(file.choose(),header=TRUE)
data
Usia<-c(data$X1)
Lama<-c(data$X2)
BesarPremi<-c(data$X3)
Klasifikasi<-factor(data$Y)
Klasifikasi
datatraining<-data.frame(Usia,Lama,BesarPremi)
datatraining
datatesting<-c(30,7,1) #berdasarkan data baru yg akan diprediksi
#K=1 (sesuai peneliti)
Test1<-knn(datatraining,datatesting,Klasifikasi,k=1)
Test1
#K=3 (sesuai peneliti)
Test3<-knn(datatraining,datatesting,Klasifikasi,k=3)
Test3
#K=5 (sesuai peneliti)
T
library(class)
#saat menyimpan data, gunakan penamaan Y, X1, X2, dan X3 (Y untuk variabel kategorik)
data=read.table(file.choose(),header=TRUE)
data
Usia<-c(data$X1)
Lama<-c(data$X2)
BesarPremi<-c(data$X3)
Klasifikasi<-factor(data$Y)
Klasifikasi
datatraining<-data.frame(Usia,Lama,BesarPremi)
datatraining
datatesting<-c(30,7,1) #berdasarkan data baru yg akan diprediksi
#K=1 (sesuai peneliti)
Test1<-knn(datatraining,datatesting,Klasifikasi,k=1)
Test1
#K=3 (sesuai peneliti)
Test3<-knn(datatraining,datatesting,Klasifikasi,k=3)
Test3
#K=5 (sesuai peneliti)
Test5<-knn(datatraining,datatesting,Klasifikasi,k=5)
Test5
#K=7 (sesuai peneliti)
Test7<-knn(datatraining,datatesting,Klasifikasi,k=7)
Test7

Leave a Reply