KNN (K-Nearest Neighbors) Algorithm with Easy Steps in R

DW ADS

Haloo haloo sobat Exsight, dalam dunia statistika, tentunya sobat Exsight sudah tidak asing dengan istilah klasifikasi. Salah satu algoritma yang umum digunakan dalam klasifikasi yaitu algoritma KNN (K-Nearest Neighbors). Nah pada artikel ini, akan dibahas lebih lanjut terkait algoritma KNN, meliputi definisi, cara kerja, kelebihan & keterbatasan, serta penerapannya. Yuk yuk simak dengan seksama yaa!

Definisi

Algoritma K-Nearest Neighbors (KNN) merupakan suatu algoritma machine learning yang dapat digunakan dalam klasifikasi maupun regresi. Algoritma KNN bekerja dengan cara mencari sejumlah k tetangga terdekat (neighbors) dari data yang akan diprediksi (data testing) berdasarkan kesamaan maupun jarak antara data tersebut dengan data yang sudah ada dalam dataset pelatihan (data training).

Dalam hal ini k tetangga terdekat (neighbors) berupa bilangan bulat positif yang dapat ditentukan oleh pengguna, serta memiliki sifat semakin kecil nilai k, maka akan semakin rentan terhadap data outlier.

Cara Kerja Algoritma KNN

KNN

Prinsip utama dari algoritma K-Nearest Neighbors yaitu data-data yang mirip cenderung termasuk dalam kelas yang sama atau memiliki nilai yang mirip. Nilai k dalam KNN mengacu pada jumlah tetangga terdekat yang akan digunakan untuk membuat prediksi. Nilai k dipilih sebelumnya dan dapat memengaruhi hasil klasifikasi. Nilai k yang lebih besar akan membuat model lebih halus, sementara k yang lebih kecil cenderung lebih sensitif terhadap noise dalam data.

Beberapa metrik jarak yang kerap kali digunakan digunakan dalam algoritma K-Nearest Neighbors diantaranya jarak Euclidean, jarak Manhattan, maupun jarak Minkowski. Dalam hal ini metrik jarak digunakan untuk mengukur seberapa dekat atau berbedanya data yang akan diprediksi dengan data dalam dataset pelatihan (data training).

Dalam penerapannya, metrik jarak yang seringkali digunakan yaitu jarak Euclidean. Hal ini dikarenakan jarak Euclidean memiliki tingkat akurasi dan juga productivity yang tinggi. Adapun rumus untuk perhitungan jarak Euclidean adalah sebagai berikut.

d\left ( x_{i} ,x_{j}\right )=\sqrt{\sum_{n=1}^{p}\left ( x_{ip}-x_{jp} \right )^{2}}

Dimana berdasarkan rumus di atas.
xip = data ke-i pada variabel ke-p
xjp = data ke-j pada variabel ke-p
d(xip ,xjp) = jarak euclidean
p = dimensi data variabel bebas

Kelebihan dan Keterbatasan

Terdapat beberapa kelebihan dan keterbatasan dalam algoritma K-Nearest Neighbors di antaranya:

KNN

Kelebihan

  1. Sederhana
    KNN merupakan algoritma yang relatif mudah dipahami dan diimplementasikan.
  2. Tidak Memerlukan Asumsi Statistik
    Algoritma KNN tidak bergantung pada asumsi statistik tertentu tentang data sehingga algoritma ini dapat berguna untuk berbagai jenis data, termasuk data yang tidak mengikuti suatu distribusi tertentu.
  3. Adaptif terhadap Perubahan Data
    KNN adalah algoritma non-parametrik, sehingga dapat dikatakan algoritma ini dapat dengan baik menangani dataset yang berubah seiring waktu atau memiliki variasi dalam jumlah kelas atau kelompok data.
  4. Cocok untuk Data Berdimensi Tinggi
    Meskipun seringkali agoritma K-Nearest Neighbors cenderung bekerja lebih baik pada data berdimensi rendah, namun algoritma ini juga dapat diterapkan pada data berdimensi tinggi dengan menggunakan teknik seperti pemilihan fitur (feature selection) dan normalisasi.
  5. Hasil yang Didapatkan Cukup Baik
    Algoritma K-Nearest Neighbors seringkali dapat menghasilkan hasil yang cukup baik dalam banyak kasus dibandingkan algoritma klasifikasi lainnya, terutama ketika jumlah tetangga (K) yang dipilih tepat dan data yang digunakan memiliki struktur yang jelas.

Keterbatasan

  1. Sensitif terhadap Nilai K (Jumlah Tetangga)
    Hasil KNN dapat sangat bervariasi tergantung pada nilai K (jumlah tetangga) yang digunakan. KNN cenderung overfitting dengan K (jumlah tetangga) yang terlalu kecil dan underfitting dengan K (jumlah tetangga) yang terlalu besar.
  2. Perlunya Ketelitian dalam Pemrosesan Data dan Pemilihan Metrik Jarak
    Ketelitian dalam pemrosesan data serta pemilihan metrik jarak memiliki peran sangat penting dalam algoritma K-Nearest Neighbors (KNN) karena faktor-faktor ini secara langsung memengaruhi kualitas dan keandalan hasil prediksi model KNN. Pilihan yang salah dapat menghasilkan hasil yang buruk.
  3. Rentan terhadap Outlier
    Algoritma K-Nearest Neighbors rentan terhadap pengaruh adanya data outlier. Hal ini dikarenakan algoritma KNN hanya mengandalkan tetangga terdekat sehingga adanya outlier dapat mengganggu hasil klasifikasi.

Ketika akan menggunakan algoritma K-Nearest Neighbors untuk menangani suatu studi kasus, maka penting untuk mempertimbangkan kelebihan dan kekurangannya serta memilih parameter yang tepat (nilai K) dengan tujuan untuk mencapai hasil yang optimal.

Studi Kasus Penerapan Algoritma KNN

Algoritma K-Nearest Neighbors memiliki beragam aplikasi dalam berbagai bidang. Berikut ini beberapa contoh aplikasi penerapan algoritma K-Nearest Neighbors.

1.Sistem Rekomendasi
Algoritma K-Nearest Neighbors dapat diterapkan dalam sistem rekomendasi, diantaranya rekomendasi produk dalam e-commerce, rekomendasi film dalam layanan streaming, atau rekomendasi teman dalam jejaring sosial. Algoritma ini membandingkan preferensi pengguna dengan data dari pengguna-pengguna lain untuk memberikan rekomendasi yang lebih relevan.

KNN

2. Diagnostik Medis
Dalam bidang kesehatan, algoritma K-Nearest Neighbors dapat digunakan untuk mendiagnosis penyakit atau kondisi medis dengan membandingkan gejala pasien dengan data pasien lain yang sudah terdiagnosis.

KNN

3. Klasifikasi Gambar
Algoritma K-Nearest Neighbors dapat digunakan untuk mengklasifikasikan gambar dalam tugas seperti pengenalan wajah, deteksi objek, maupun klasifikasi hewan dan tumbuhan berdasarkan gambar.

KNN

4. Deteksi Intrusi (Intrusion Detection)
Algoritma K-Nearest Neighbors dapat digunakan dalam keamanan jaringan untuk mendeteksi aktivitas yang mencurigakan atau serangan siber maupun aktivitas yang mencurigakan pada jaringan komputer.

KNN

Tutorial Algoritma KNN dengan R

Nah setelah mengetahui tentang apa itu algoritma K-Nearest Neighbors berikutnya, kita akan melakukan tutorial K-Nearest Neighbors dengan menggunakan software R.

Studi Kasus

Studi kasus yang akan kita gunakan dalam hal ini menggunakan data sampel terkait Lung Cancer (Kanker Paru-Paru) yang didapatkan dari situs kaggle.com, dimana data di-publish oleh Ms. Nancy Al Aswad.
* Tidak terdapat missing value pada data.
* Data terdiri atas 309 observasi.

KNN

Data terdiri atas 16 variabel yaitu:

VariabelKeterangan VariabelSkala Data
GenderM = Male
F = Female
Kategorik
AgeNumerik
Smoking1 = No
2 = Yes
Kategorik
Yellow Finger1 = No
2 = Yes
Kategorik
Anxiety1 = No
2 = Yes
Kategorik
Peer Pressure1 = No
2 = Yes
Kategorik
Chronic Disease1 = No
2 = Yes
Kategorik
Fatigue1 = No
2 = Yes
Kategorik
Allergy1 = No
2 = Yes
Kategorik
Wheezing1 = No
2 = Yes
Kategorik
Alcohol1 = No
2 = Yes
Kategorik
Coughing1 = No
2 = Yes
Kategorik
Shortness of Breath1 = No
2 = Yes
Kategorik
Swallowing Difficulty1 = No
2 = Yes
Kategorik
Chest Pain1 = No
2 = Yes
Kategorik
Lung Cancer1 = No
2 = Yes
Kategorik
Tabel 1. Data

Pada Tabel 1. variabel Lung Cancer berperan sebagai variabel Dependen, sedangkan lainnya merupakan variabel Independen.

Load Library

Tahapan paling awal sebelum running syntax di software R yaitu melakukan load library R. Adapun library yang diperlukan untuk K-Nearest Neighbors yaitu caret. Adapun syntax R yang digunakan adalah sebagai berikut.

library(caret)

Load Data

Kemudian melakukan input data ke R. Data yang diinput diberi nama sebagai data. Perlu diperhatikan untuk jenis file data yang diinput ke R, untuk tutorial kali ini jenis file data yang digunakan yaitu dalam format CSV. Syntax yang digunakan untuk load data adalah sebagai berikut.

data<-read.csv(file.choose(),header=TRUE,sep=",")

Pre-Processing

Data yang telah kita load selanjutnya di-split menjadi data training testing 70/30. Artinya dari data yang ada, 70% dari data kita jadikan sebagai data training dan 30% data kita jadikan data testing.

##Membuat data training dan data testing (training 70, testing 30)
n_train <- round(nrow(data) * 0.7)
idx_train <- sample(seq_len(n_train))

data_train <- data[idx_train, ]
data_test <- data[-idx_train, ]

#Menyimpan data hasil training dan testing dalam format csv
write.csv(data_train,"training.csv")
write.csv(data_test,"testing.csv")

#Membuka file hasil training dan testing
data_train=read.csv(file.choose(),header=TRUE,sep=",")
data_test=read.csv(file.choose(),header=TRUE,sep=",")

Selanjutnya mengacu pada Tabel 1. variabel dengan skala data “kategorik” baik pada data training dan data testing, kita pastikan tipe data menjadi “factor” di R.

#Mengubah tipe data
##Data Train
data_train$GENDER=as.factor(data_train$GENDER)
data_train$SMOKING=as.factor(data_train$SMOKING)
data_train$YELLOW_FINGERS=as.factor(data_train$YELLOW_FINGERS)
data_train$ANXIETY=as.factor(data_train$ANXIETY)
data_train$PEER_PRESSURE=as.factor(data_train$PEER_PRESSURE)
data_train$CHRONIC.DISEASE=as.factor(data_train$CHRONIC.DISEASE)
data_train$FATIGUE=as.factor(data_train$FATIGUE)
data_train$ALLERGY=as.factor(data_train$FATIGUE)
data_train$WHEEZING=as.factor(data_train$WHEEZING)
data_train$ALCOHOL.CONSUMING=as.factor(data_train$ALCOHOL.CONSUMING)
data_train$COUGHING=as.factor(data_train$COUGHING)
data_train$SHORTNESS.OF.BREATH=as.factor(data_train$SHORTNESS.OF.BREATH)
data_train$SWALLOWING.DIFFICULTY=as.factor(data_train$SWALLOWING.DIFFICULTY)
data_train$CHEST.PAIN=as.factor(data_train$CHEST.PAIN)
data_train$LUNG_CANCER=as.factor(data_train$LUNG_CANCER)

##Data Test
data_test$GENDER=as.factor(data_test$GENDER)
data_test$SMOKING=as.factor(data_test$SMOKING)
data_test$YELLOW_FINGERS=as.factor(data_test$YELLOW_FINGERS)
data_test$ANXIETY=as.factor(data_test$ANXIETY)
data_test$PEER_PRESSURE=as.factor(data_test$PEER_PRESSURE)
data_test$CHRONIC.DISEASE=as.factor(data_test$CHRONIC.DISEASE)
data_test$FATIGUE=as.factor(data_test$FATIGUE)
data_test$ALLERGY=as.factor(data_test$FATIGUE)
data_test$WHEEZING=as.factor(data_test$WHEEZING)
data_test$ALCOHOL.CONSUMING=as.factor(data_test$ALCOHOL.CONSUMING)
data_test$COUGHING=as.factor(data_test$COUGHING)
data_test$SHORTNESS.OF.BREATH=as.factor(data_test$SHORTNESS.OF.BREATH)
data_test$SWALLOWING.DIFFICULTY=as.factor(data_test$SWALLOWING.DIFFICULTY)
data_test$CHEST.PAIN=as.factor(data_test$CHEST.PAIN)
data_test$LUNG_CANCER=as.factor(data_test$LUNG_CANCER)
SVM
Gambar 1. Struktur Data Training dan Data Testing

Berikutnya, kita perhatikan kembali data training dan testing, kita hilangkan kolom yang tidak perlu, dalam hal ini kolom pertama (x) yang hanya menunjukkan urutan observasi.

#Removing Kolom "Nomor urut di awal data train & test"
data_train=data_train[,-1]
data_test=data_test[,-1]
SVM
Gambar 2. Data TrainingBefore dan After Removing Kolom Urutan Observasi

Pemodelan

Setelah melakukan Pre-Processing, tahapan berikutnya melakukan pemodelan K-Nearest Neighbors. Pemodelan K-Nearest Neighbors mula-mula dilakukan pada data training. Dalam hal ini ditentukan pula nilai k tetangga terdekat (neighbor) optimal dengan syntax sebagai berikut.

#Choosing K Value
# Run algorithms using 10-fold cross validation
trainControl <- trainControl(method="repeatedcv", number=10, repeats=10)
metric <- "Accuracy"

#Pemodelan KNN
set.seed(1)
fit.knn <- train(LUNG_CANCER~., data=data_train, method="knn",
                 metric=metric ,trControl=trainControl)
knn.k1 <- fit.knn$bestTune # keep this Initial k for testing with knn() function in next section
print(fit.knn)
knn
Gambar 3. Hasil Pemodelan Data Training pada K- Nearest Neighbors

Tahapan berikutnya, melakukan prediksi data Testing pada algoritma K-Nearest Neighbors dengan syntax R sebagai berikut.

#Hasil Prediksi KNN
set.seed(1)
prediction <- predict(fit.knn, newdata = data_test)

Setelah melakukan running syntax R untuk prediksi hasil algoritma K-Nearest Neighbors pada data testing, berikutnya menentukan confusion matrix dengan syntax sebagai berikut.

#Confusion Matrix
cm.testing_knn=table(data_test$LUNG_CANCER, prediction)
confusionMatrix(cm.testing_knn)
knn
Gambar 4. Hasil Confusion Matrix pada Algoritma K- Nearest Neighbors

Apabila kita perhatikan pada Gambar.4, dari hasil confusion matrix, terlihat bahwa nilai accuracy sudah cukup tinggi yaitu sebesar 0,871 atau 87,1%. Meskipun accuracy dari model ini sudah cukup tinggi, namun sayangnya untuk sensitivity bernilai NA dan Kappa bernilai 0. Sehingga dapat dikatakan hasil pemodelan KNN ini, masih belum baik.

Maka dari itu, untuk pengoptimalan model dapat dilakukan dengan memeriksa kembali data khususnya pada bagian data training dan data tesing, lalu kita dapat mencoba dan running ulang model dengan nilai K hasil cross validation yang berbeda, untuk mendapatkan hasil pemodelan KNN yang lebih baik lagi.

Referensi

Han, J., Kamber, M., & Pei, J. (2012). Data Mining Concept and Techniques Third Edition. Elsevier Inc.

Aisyah, S., & Fithriasari, K. (2016). Klasifikasi Berita Online Menggunakan Metode Support Vector Machine dan K- Nearest Neighbor. Jurnal Sains dan Seni ITS Vol. 5, No.2.

Sampai disini dulu yaa penjelasan terkait Algoritma KNN (K-Nearest Neighbor). Apabila masih ada yang dibingungkan bisa langsung saja ramaikan kolom komentar atau hubungi admin melalui tombol bantuan di kanan bawah. Stay tuned di website https://exsight.id/blog/ agar tidak ketinggalan artikel-artikel menarik lainnya.

Sstt...
Mau Kiriman Artikel Terbaru Exsight
Tanpa Biaya Langganan? ????

Nama Kamu

Email Kamu

Dapatkan Akses Informasi Terupdate Seputar Dunia Data dan Statistika 🙂

Exsight ADS

Leave a Comment

Hubungi Admin
Halo, selamat datang di Exsight! 👋

Hari ini kita ada DISKON 20% untuk semua transaksi. Klaim sekarang!