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
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:
Kelebihan
- Sederhana
KNN merupakan algoritma yang relatif mudah dipahami dan diimplementasikan. - 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. - 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. - 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. - 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
- 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. - 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. - 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.
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.
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.
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.
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.
Data terdiri atas 16 variabel yaitu:
Variabel | Keterangan Variabel | Skala Data |
Gender | M = Male F = Female | Kategorik |
Age | Numerik | |
Smoking | 1 = No 2 = Yes | Kategorik |
Yellow Finger | 1 = No 2 = Yes | Kategorik |
Anxiety | 1 = No 2 = Yes | Kategorik |
Peer Pressure | 1 = No 2 = Yes | Kategorik |
Chronic Disease | 1 = No 2 = Yes | Kategorik |
Fatigue | 1 = No 2 = Yes | Kategorik |
Allergy | 1 = No 2 = Yes | Kategorik |
Wheezing | 1 = No 2 = Yes | Kategorik |
Alcohol | 1 = No 2 = Yes | Kategorik |
Coughing | 1 = No 2 = Yes | Kategorik |
Shortness of Breath | 1 = No 2 = Yes | Kategorik |
Swallowing Difficulty | 1 = No 2 = Yes | Kategorik |
Chest Pain | 1 = No 2 = Yes | Kategorik |
Lung Cancer | 1 = No 2 = Yes | Kategorik |
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)
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]
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)
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)
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
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.