Lewati ke konten utama

Klasifikasi K-Nearest Neighbors (KNN) dengan Tutorial R

Dalami klasifikasi K-Nearest Neighbors (KNN) dengan R. Pelajari cara menggunakan paket R 'class' dan 'caret', menyetel hyperparameter, dan mengevaluasi kinerja model.
Diperbarui 28 Sep 2026  · 11 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

image2.png

R adalah alat yang kuat untuk mengimplementasikan klasifikasi KNN, dan umumnya digunakan oleh data scientist serta ahli statistik untuk berbagai aplikasi machine learning.

Dalam tutorial ini, kita akan mempelajari K-Nearest Neighbors, cara kerjanya, serta meninjau beberapa kelebihan dan kekurangannya. Selanjutnya, kita akan menggunakan Paket R 'class' dan 'caret' untuk dengan mudah mengimplementasikan model klasifikasi KNN.

Apa itu K-Nearest Neighbors?

K-Nearest Neighbors (KNN) adalah model machine learning terawasi yang dapat digunakan untuk tugas regresi maupun klasifikasi. Algoritma ini bersifat non-parametrik, yang berarti tidak membuat asumsi apa pun tentang distribusi data yang mendasarinya.

Algoritma KNN memprediksi label dataset uji dengan melihat label tetangga terdekatnya dalam ruang fitur dari dataset latih. “K” adalah hyperparameter terpenting yang dapat disetel untuk mengoptimalkan kinerja model.

KNN adalah algoritma yang sederhana dan intuitif yang memberikan hasil baik untuk beragam masalah klasifikasi. Mudah diimplementasikan dan dipahami, serta berlaku untuk dataset kecil maupun besar. Namun, ada juga beberapa kekurangannya; kelemahan utama adalah kebutuhan komputasi yang mahal untuk dataset besar atau ruang fitur berdimensi tinggi.

Algoritma KNN digunakan dalam mesin rekomendasi e-commerce, pengenalan gambar, deteksi kecurangan, klasifikasi teks, deteksi anomali, dan banyak lagi. Dalam tutorial ini, kita akan menggunakan algoritma KNN untuk sistem persetujuan pinjaman.

Jika Anda bingung dan tidak tahu bagaimana memulai perjalanan data science Anda, ikuti jalur karier Data Scientist Professional with R dan persiapkan diri untuk karier sukses di bidang data science. Skill track ini akan membantu Anda menguasai pemrograman R, pengambilan data, pembersihan data, manipulasi data, visualisasi data, machine learning, uji hipotesis, desain eksperimen, SQL, dan Git.

Bagaimana Cara Kerja Klasifikasi K-Nearest Neighbors?

Algoritma klasifikasi KNN bekerja dengan mencari K tetangga (titik data terdekat) dalam dataset latih terhadap suatu titik data baru. Lalu, algoritma menetapkan label kelas mayoritas di antara tetangga tersebut ke titik data baru.

Mari kita uraikan algoritmanya menjadi beberapa bagian.

Pertama, algoritma menghitung jarak antara titik data baru dan semua titik data lain dalam set latih, lalu memilih K titik terdekat. Metode yang digunakan untuk menghitung jarak dapat bervariasi tergantung masalahnya. Metode yang paling umum digunakan adalah jarak Euclidean.

Setelah mengidentifikasi K tetangga terdekat, algoritma menetapkan label kelas mayoritas di antara tetangga tersebut ke titik data baru. Misalnya, jika dua label adalah “biru” dan satu label “merah”, algoritma akan menetapkan label “biru” ke titik data baru.

Gif from eunsukim.me

Gif dari eunsukim.me

Ringkasan:

  1. Kita akan memilih nilai K, yaitu jumlah tetangga terdekat yang akan digunakan untuk membuat prediksi.
  2. Hitung jarak antara titik tersebut dan semua titik dalam set latih.
  3. Pilih K tetangga terdekat berdasarkan jarak yang dihitung.
  4. Tetapkan label kelas mayoritas ke titik data baru.
  5. Ulangi langkah 2 hingga 4 untuk semua titik data dalam set uji.
  6. Evaluasi akurasi algoritma.

Nilai “K” ditentukan oleh pengguna, dan dapat digunakan untuk mengoptimalkan kinerja algoritma. Nilai K yang terlalu kecil dapat menyebabkan overfitting, sedangkan nilai yang terlalu besar dapat menyebabkan underfitting. Jadi, penting untuk menemukan nilai optimal yang memberikan stabilitas dan kecocokan terbaik.

Implementasi KNN di R

Pada bagian ini, kita akan menggunakan Loan Data dan melatih klasifikasi KNN menggunakan paket class. Dataset terdiri dari 10.000 pinjaman, dan kita akan mencari tahu apakah sebuah pinjaman akan dilunasi berdasarkan data pelanggan.

Memuat Data

Kita akan mengimpor pustaka tidyverse untuk mengakses paket R penting guna pemuatan, manipulasi, dan visualisasi data. Fungsi suppressPackageStartupMessages akan menekan peringatan sehingga keluaran menjadi bersih.

Setelah itu, kita akan menggunakan read_csv untuk memuat dataset, menghapus kolom “purpose” dari dataframe menggunakan fungsi subset, dan menampilkan 3 sampel teratas.

suppressPackageStartupMessages(library(tidyverse))

data <- read_csv('data/loans.csv.gz', show_col_types = FALSE)
data <- subset(data, select = -c(purpose))
head(data,3)

image4.png

Pembagian Train dan Test

Kita bisa membagi dataset secara manual, tetapi menggunakan pustaka caTools jauh lebih rapi.

  • Tetapkan seed untuk reprodusibilitas.
  • Gunakan sample.split untuk membuat indeks dataset latih dan uji dengan rasio 75:25.
  • Gunakan subset untuk membuat dataset latih dan uji seperti di bawah ini.
library(caTools)
set.seed(255)

split = sample.split(data$not_fully_paid, 
                     SplitRatio = 0.75)
train = subset(data, 
                      split == TRUE)
test = subset(data, 
                  split == FALSE)

Skalering Fitur

Sekarang kita akan melakukan penskalaan pada set latih dan uji. Di belakang layar, fungsi ini menggunakan (x - mean(x)) / sd(x). Kita hanya menskalakan fitur dan menghapus label target dari set uji maupun latih.

train_scaled = scale(train[-13])
test_scaled = scale(test[-13])

Melatih Klasifier KNN dan Memprediksi

Pustaka class cukup populer untuk melatih klasifikasi KNN. Sederhana dan cepat. Kita akan memberikan dataset latih dan uji yang telah diskalakan, kolom target, dan hyperparameter “k”.

library(class)
test_pred <- knn(
                 train = train_scaled, 
                 test = test_scaled,
                 cl = train$not_fully_paid, 
                 k=10
                 )

Evaluasi Model

Untuk mengevaluasi hasil model, kita akan menampilkan confusion matrix menggunakan fungsi table. Kita memberikan label aktual (target uji) dan prediksi ke fungsi table, dan seperti yang terlihat, hasilnya cukup baik untuk kelas mayoritas.

Algoritma KNN kurang baik dalam menangani data yang tidak seimbang, itulah sebabnya kita melihat performa buruk pada kelas minoritas.

actual <- test$not_fully_paid

cm <- table(actual,test_pred)
cm
     test_pred
actual    0    1
     0 1988   23
     1  373   10

Kita dapat menghitung akurasi dengan menjumlahkan nilai true positive pada confusion matrix dan membaginya dengan total panjang kolom target.

Seperti yang terlihat, kita mendapatkan akurasi yang baik pada model standar. Akurasi ini dapat ditingkatkan dengan menyetel hyperparameter “K” dan menyeimbangkan dataset.

accuracy <- sum(diag(cm))/length(actual)
sprintf("Accuracy: %.2f%%", accuracy*100)
'Accuracy: 83.46%'

Klasifikasi KNN di R menggunakan caret

Pada bagian ini, kita akan menggunakan caret untuk semuanya. caret adalah paket R untuk membangun dan mengevaluasi model machine learning. Paket ini menyediakan antarmuka untuk algoritma machine learning utama.

Kita akan menggunakannya untuk membagi dan melakukan prapemrosesan dataset, melakukan penyetelan hyperparameter, serta melatih dan mengevaluasi model.

Pembagian Train dan Test

Kita akan mengimpor Paket caret dan menetapkan seed untuk reprodusibilitas. Setelah itu, kita akan mengonversi variabel target dari integer menjadi factor. Terakhir, kita akan menggunakan createDataPartition untuk membagi dataset menjadi train dan test dengan rasio 80:20.

suppressPackageStartupMessages(library(caret))
set.seed(255)

data$not_fully_paid <- factor(data$not_fully_paid, levels = c(0, 1))

trainIndex <- createDataPartition(data$not_fully_paid, 
								  times=1, 
								  p = .8, 
								  list = FALSE)
train <- data[trainIndex, ]
test <- data[-trainIndex, ]

Prapemrosesan Data

Selanjutnya, kita akan melakukan penskalaan pada set latih dan uji menggunakan fungsi preProcess.

preProcValues <- preProcess(train, method = c("center", "scale"))
trainTransformed <- predict(preProcValues, train)
testTransformed <- predict(preProcValues, test)

Penyetelan Model

Sebelum melatih model KNN, kita harus menemukan nilai “K” yang optimal menggunakan fungsi train. Fungsi train memerlukan formula, dataset latih yang telah diskalakan, nama model, metode kontrol pelatihan (cross-validation), dan daftar hyperparameter. Kita akan memeriksa kinerja model ketika “K” bernilai 3, 5, dan 7.

knnModel <- train(
		     not_fully_paid ~ ., 
		     data = trainTransformed, 
	            method = "knn", 
		     trControl = trainControl(method = "cv"), 
		     tuneGrid = data.frame(k = c(3,5,7))
		    )

Melatih Model dengan Kinerja Terbaik

Setelah menemukan nilai “K” terbaik, kita akan melatih model klasifikasi KNN dengan dataset latih yang telah diskalakan.

best_model<- knn3(
                  not_fully_paid ~ .,
                  data = trainTransformed,
                  k = knnModel$bestTune$k
                 )

Evaluasi Model

caret menyediakan fungsi evaluasi model yang sederhana dan kuat. Untuk menampilkan hasil kinerja model, pertama-tama kita harus memprediksi label untuk dataset uji yang belum pernah dilihat. Setelah itu, kita akan menggunakan nilai prediksi dan aktual untuk mengevaluasi kinerja model menggunakan fungsi confusionMatrix.

predictions <- predict(best_model, testTransformed,type = "class")
# Calculate confusion matrix
cm <- confusionMatrix(predictions, testTransformed$not_fully_paid)
cm

Hasilnya, kita mendapatkan confusion matrix, akurasi model, P-Value, sensitivitas model, dan metrik penting lainnya yang membantu kita menentukan stabilitas dan kinerja model.

Seperti terlihat, model berkinerja cukup buruk pada “Neg Pred Value” yang merupakan kelas minoritas, dan balanced accuracy kita adalah 51 persen. Kita bisa mendapatkan hasil serupa dengan lempar koin.

Kita dapat meningkatkan hasil dengan menyeimbangkan kelas menggunakan metode oversampling dan undersampling. Kita juga dapat melakukan rekayasa fitur, membuat fitur baru, dan menghapus fitur yang sangat berkorelasi.

Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 1570  288
         1   39   18
                                          
               Accuracy : 0.8292          
                 95% CI : (0.8116, 0.8458)
    No Information Rate : 0.8402          
    P-Value [Acc > NIR] : 0.9091          
                                          
                  Kappa : 0.0516          
                                          
 Mcnemar's Test P-Value : <2e-16          
                                          
            Sensitivity : 0.97576         
            Specificity : 0.05882         
         Pos Pred Value : 0.84499         
         Neg Pred Value : 0.31579         
             Prevalence : 0.84021         
         Detection Rate : 0.81984         
   Detection Prevalence : 0.97023         
      Balanced Accuracy : 0.51729         
                                          
       'Positive' Class : 0

Kita juga dapat menyederhanakan hasil dengan menampilkannya sebagai data frame.

data.frame(Accuracy = cm$overall["Accuracy"],
           Sensitivity = cm$byClass["Sensitivity"],
           Specificity = cm$byClass["Specificity"])

image3.png

Jika Anda pengguna Python dan ingin mempelajari cara melakukan klasifikasi KNN, baca tutorial kami K-Nearest Neighbors (KNN) Classification with scikit-learn untuk memahami konsep dan alur kerja KNN dengan contoh.

Kelebihan dan Kekurangan Menggunakan KNN

Kelebihan

  1. Algoritma yang sederhana untuk dipahami dan diimplementasikan.
  2. Fleksibel dan dapat digunakan untuk tugas regresi dan klasifikasi.
  3. Memberikan hasil yang dapat diinterpretasikan, dapat divisualisasikan dan dipahami karena kelas prediksi didasarkan pada label tetangga terdekat dalam data latih.
  4. KNN tidak membuat asumsi tentang batas keputusan antar kelas, sehingga memungkinkan menangkap hubungan nonlinier antar fitur.
  5. Algoritma tidak membuat asumsi tentang distribusi data, sehingga cocok untuk berbagai masalah.
  6. KNN tidak membangun model. Algoritma menyimpan data latih dan menggunakannya untuk prediksi.

Kekurangan

  1. Mahal secara komputasi dan memori untuk dataset yang besar dan kompleks.
  2. Kinerja KNN menurun pada data yang tidak seimbang. Algoritma cenderung bias terhadap kelas mayoritas, yang dapat menghasilkan performa buruk pada kelas minoritas.
  3. Tidak cocok untuk data yang bising. Tetangga terdekat dari suatu titik data mungkin tidak mewakili label kelas yang sebenarnya.
  4. Tidak cocok untuk data berdimensi tinggi, karena dimensi tinggi dapat menyebabkan jarak antar semua titik data menjadi mirip.
  5. Menemukan jumlah tetangga K yang optimal dapat memakan waktu.
  6. KNN sensitif terhadap outlier, karena memilih tetangga berdasarkan metrik jarak.
  7. Tidak baik dalam menangani nilai hilang pada dataset latih.

Kesimpulan

Dalam tutorial ini, kita telah mempelajari cara menggunakan klasifikasi K-Nearest Neighbors (KNN) dengan R. Kita telah membahas konsep dasar KNN dan cara kerjanya. Selain itu, kita mempelajari dua pustaka, class dan caret, untuk melatih dan mengevaluasi model klasifikasi KNN pada dataset nyata.

Ikuti kursus Supervised Learning in R: Classification untuk mempelajari algoritma machine learning terawasi lainnya dengan pemrograman R. Anda akan mempelajari Naive Bayes, Regresi Logistik, dan Classification Trees dengan contoh dan latihan kode.

Tutorial R ini mencakup langkah-langkah manipulasi, pembagian dan pemrosesan dataset, penyetelan hyperparameter, pelatihan model, serta evaluasi hasil. Karena dataset tidak seimbang, kita mendapatkan performa terburuk pada kelas minoritas.

Anda perlu memahami bahwa algoritma KNN tidak sempurna, ia juga memiliki beberapa kekurangan, dan kita harus mempertimbangkan banyak hal sebelum memilihnya sebagai model utama Anda.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sebagai data scientist tersertifikasi, saya bersemangat memanfaatkan teknologi mutakhir untuk menciptakan aplikasi machine learning yang inovatif. Dengan latar belakang kuat di pengenalan ucapan, analisis dan pelaporan data, MLOps, conversational AI, dan NLP, saya mengasah keterampilan dalam mengembangkan sistem cerdas yang berdampak nyata. Selain keahlian teknis, saya juga komunikator andal yang mampu menyederhanakan konsep kompleks menjadi bahasa yang jelas dan ringkas. Karena itu, saya menjadi blogger yang dicari di bidang data science, membagikan wawasan dan pengalaman kepada komunitas profesional data yang terus berkembang. Saat ini, saya berfokus pada pembuatan dan penyuntingan konten, bekerja dengan large language model untuk mengembangkan konten yang kuat dan menarik agar membantu bisnis dan individu memaksimalkan data mereka.

Topik
R
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya