K-Nearest Neighbor (K-NN) merupakan salah satu metode machine learning yang digunakan untuk melakukan klasifikasi berdasarkan tingkat kedekatan atau kemiripan antarobservasi. Metode K-NN bekerja dengan menentukan kelas suatu data baru berdasarkan mayoritas kelas dari sejumlah k tetangga terdekat. Pengukuran jarak antarobservasi dapat dilakukan menggunakan Euclidean Distance untuk mengetahui tingkat kedekatan antara data latih dan data uji. Metode ini termasuk dalam kategori lazy learning karena tidak memerlukan proses pembentukan model yang kompleks. Pemilihan nilai k menjadi salah satu faktor penting dalam menentukan hasil klasifikasi karena perbedaan jumlah tetangga dapat memengaruhi tingkat akurasi model (Danestiara, 2023).
Metode K-NN dapat diterapkan dalam berbagai bidang, seperti pendidikan, kesehatan, ekonomi, dan industri untuk mengelompokkan data berdasarkan karakteristik tertentu. Proses klasifikasi menggunakan K-NN melibatkan beberapa tahapan, yaitu prapemrosesan data, pembagian data menjadi data latih dan data uji, pengukuran jarak antarobservasi, serta penentuan kelas berdasarkan jumlah tetangga terdekat. Kinerja metode ini dipengaruhi oleh pemilihan nilai k, ukuran jarak, serta karakteristik data yang digunakan. Penerapan K-NN dalam klasifikasi penyakit kanker payudara menunjukkan bahwa metode ini dapat digunakan untuk mengenali pola data dan menghasilkan klasifikasi berdasarkan karakteristik variabel prediktor (Rihastuti dkk., 2024).
Penerapan metode K-NN memerlukan evaluasi untuk mengetahui kemampuan model dalam menghasilkan klasifikasi yang sesuai dengan kelas aktual. Evaluasi dapat dilakukan menggunakan confusion matrix melalui pengukuran Accuracy, Sensitivity, dan Specificity. Accuracy digunakan untuk mengukur ketepatan klasifikasi secara keseluruhan, Sensitivity menunjukkan kemampuan model dalam mengidentifikasi kelas positif, sedangkan Specificity menunjukkan kemampuan model dalam mengenali kelas negatif. Selain itu, False Negative digunakan untuk mengetahui jumlah data yang sebenarnya termasuk kelas positif, tetapi diklasifikasikan sebagai kelas negatif. Penelitian Yuliani dkk. (2023) menunjukkan penerapan metode K-NN yang dikombinasikan dengan Adaptive Boosting dan Synthetic Minority Oversampling Technique (SMOTE) untuk menyelesaikan permasalahan klasifikasi data tidak seimbang.
class dan
caret?ggplot2 untuk menentukan nilai k yang
optimal?class dan caret.ggplot2 untuk menentukan nilai k yang
optimal.Algoritma K-Nearest Neighbor (KNN) merupakan salah satu metode klasifikasi berbasis pembelajaran terarah (supervised learning) yang bekerja dengan prinsip sederhana, yaitu menentukan kelas dari suatu data baru berdasarkan mayoritas kelas dari sejumlah \(k\) tetangga terdekat dalam ruang fitur. Metode ini termasuk ke dalam kategori lazy learning, karena tidak melakukan proses pelatihan model secara eksplisit melainkan langsung menghitung jarak antara data uji dan data latih ketika proses klasifikasi dilakukan. KNN juga bersifat nonparametrik, artinya tidak mengasumsikan distribusi probabilistik tertentu pada data, sehingga dapat diterapkan pada berbagai jenis dataset, baik yang bersifat linier maupun nonlinier. Karakteristik inilah yang membuat KNN menjadi salah satu metode populer dalam berbagai aplikasi klasifikasi data di bidang kecerdasan buatan dan data mining (Setiawan dkk., 2024).
Secara operasional, algoritma KNN dimulai dengan menentukan jumlah tetangga terdekat \(k\) yang akan digunakan sebagai dasar pengambilan keputusan klasifikasi. Setelah itu, jarak antara data uji dan seluruh data latih dihitung menggunakan metrik jarak tertentu seperti Euclidean Distance, Manhattan Distance, atau Minkowski Distance. Nilai \(k\) yang terlalu kecil dapat membuat model menjadi sensitif terhadap data outlier dan noise, sedangkan nilai \(k\) yang terlalu besar dapat menyebabkan hasil klasifikasi menjadi bias karena mempertimbangkan terlalu banyak data dari kelas lain. Oleh karena itu, pemilihan nilai \(k\) yang optimal merupakan langkah penting untuk mencapai tingkat akurasi yang baik. Selain itu, proses normalisasi data sering dilakukan sebelum penerapan KNN agar skala antarfitur menjadi seimbang dan hasil perhitungan jarak tidak terdistorsi (Meriyana dkk., 2025).
Jarak antara dua titik observasi \(x=(x_1,x_2,\ldots,x_p)^\top\) dan \(y=(y_1,y_2,\ldots,y_p)^\top\) dalam ruang fitur dapat dihitung menggunakan beberapa formulasi metrik jarak berikut (Fransiska, 2026).
1. Jarak Euclidean (\(L_2\) Norm)
Jarak Euclidean merupakan metrik geometris yang paling umum digunakan untuk variabel numerik kontinu.
\[ d(x,y)=\sqrt{\sum_{i=1}^{p}(x_i-y_i)^2} \]
2. Jarak Manhattan (\(L_1\) Norm / City Block Distance)
Jarak Manhattan dihitung berdasarkan jumlah selisih mutlak setiap variabel dan dapat lebih tangguh terhadap pengaruh pencilan (outliers) dibandingkan jarak Euclidean pada kondisi tertentu.
\[ d(x,y)=\sum_{i=1}^{p}|x_i-y_i| \]
3. Jarak Minkowski (\(L_m\) Norm)
Jarak Minkowski merupakan generalisasi keluarga metrik \(L_m\), dengan parameter \(m=1\) menghasilkan jarak Manhattan dan \(m=2\) menghasilkan jarak Euclidean.
\[ d(x,y)=\left(\sum_{i=1}^{p}|x_i-y_i|^m\right)^{\frac{1}{m}},\qquad m\geq 1 \]
4. Jarak Mahalanobis
Jarak Mahalanobis memperhitungkan matriks kovarians \(\Sigma\) sehingga dapat mempertimbangkan korelasi antarvariabel dan perbedaan skalanya. Rumus ini memerlukan matriks kovarians yang dapat diinvers.
\[ d(x,y)=\sqrt{(x-y)^\top\Sigma^{-1}(x-y)} \]
5. Jarak Hamming
Jarak Hamming digunakan untuk mengukur ketidaksamaan pada data biner atau kategorik. Dalam bentuk ternormalisasi, jarak ini merupakan proporsi atribut yang memiliki nilai berbeda.
\[ d(x,y)=\frac{1}{p}\sum_{i=1}^{p}I(x_i\neq y_i) \]
Dengan \(I(x_i\neq y_i)\) merupakan fungsi indikator yang bernilai 1 jika \(x_i\) berbeda dengan \(y_i\), dan 0 jika keduanya sama.
Data yang digunakan dalam penelitian ini merupakan data sekunder yang
diperoleh dari dataset Wisconsin Breast Cancer yang tersedia
dalam paket mlbench pada perangkat lunak R.
Dataset tersebut terdiri atas 699 observasi dengan sembilan
variabel prediktor, satu variabel respons, dan satu variabel identitas.
Variabel respons berupa klasifikasi tumor payudara yang terbagi menjadi
dua kategori, yaitu tumor jinak (benign) sebanyak 458 observasi
dan tumor ganas (malignant) sebanyak 241 observasi.
Variabel yang digunakan dalam penelitian ini terdiri atas sembilan
variabel prediktor dan satu variabel respons. Variabel prediktor
meliputi Cl.thickness yang menunjukkan ketebalan gumpalan
sel, Cell.size yang menunjukkan keseragaman ukuran sel,
Cell.shape yang menunjukkan keseragaman bentuk sel,
Marg.adhesion yang menunjukkan tingkat perlekatan antarsel,
Epith.c.size yang menunjukkan ukuran sel epitel tunggal,
Bare.nuclei yang menunjukkan inti sel tanpa sitoplasma,
Bl.cromatin yang menunjukkan karakteristik kromatin sel,
Normal.nucleoli yang menunjukkan karakteristik nukleolus
sel, dan Mitoses yang menunjukkan tingkat aktivitas
pembelahan sel. Sementara itu, variabel respons yang digunakan adalah
Class, yaitu kategori tumor payudara yang terdiri atas
benign dan malignant. Kesembilan variabel prediktor
digunakan sebagai masukan dalam pembentukan model K-Nearest
Neighbor (K-NN), sedangkan variabel respons digunakan sebagai
target dalam proses klasifikasi.
Langkah-langkah analisis klasifikasi menggunakan metode K-Nearest Neighbor (KNN) pada dataset Wisconsin Breast Cancer adalah sebagai berikut:
Pada batasan masalah, diminta untuk melakukan analisis klasifikasi
menggunakan metode K-Nearest Neighbor (K-NN) pada dataset
Wisconsin Breast Cancer dengan variasi nilai k sebesar 3,
5, 7, 9, dan 11, serta proporsi pembagian data sebesar 70% data
training dan 30% data testing menggunakan
set.seed(12343). Selanjutnya, dilakukan evaluasi kinerja
model menggunakan confusion matrix, accuracy,
sensitivity, specificity, dan Positive Predictive
Value (PPV) untuk mengetahui kemampuan K-NN dalam
mengklasifikasikan tumor payudara menjadi kategori jinak
(benign) dan ganas (malignant), serta menentukan nilai
k optimal dengan mempertimbangkan kesalahan False
Negative.
Tahap persiapan data dilakukan dengan memanggil paket
mlbench, class, caret, dan
ggplot2, kemudian memuat dataset Wisconsin Breast
Cancer yang tersedia dalam paket mlbench. Selanjutnya,
dilakukan pemeriksaan struktur data, ringkasan data, jumlah observasi
dan variabel, serta distribusi variabel respons untuk mengetahui jumlah
pengamatan pada setiap kategori tumor, yaitu benign dan
malignant.
Sintaks yang digunakan adalah sebagai berikut:
# PERSIAPAN DATA
# Library
library(mlbench)
library(class)
library(caret)
library(ggplot2)
# Memanggil dataset
data(BreastCancer, package = "mlbench")
head(BreastCancer)## Id Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 1 1000025 5 1 1 1 2
## 2 1002945 5 4 4 5 7
## 3 1015425 3 1 1 1 2
## 4 1016277 6 8 8 1 3
## 5 1017023 4 1 1 3 2
## 6 1017122 8 10 10 8 7
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 1 1 3 1 1 benign
## 2 10 3 2 1 benign
## 3 2 3 1 1 benign
## 4 4 3 7 1 benign
## 5 1 3 1 1 benign
## 6 10 9 7 1 malignant
## 'data.frame': 699 obs. of 11 variables:
## $ Id : chr "1000025" "1002945" "1015425" "1016277" ...
## $ Cl.thickness : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
## $ Cell.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
## $ Cell.shape : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
## $ Marg.adhesion : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
## $ Epith.c.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
## $ Bare.nuclei : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
## $ Bl.cromatin : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
## $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
## $ Mitoses : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
## $ Class : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
## Id Cl.thickness Cell.size Cell.shape Marg.adhesion
## Length :699 1 :145 1 :384 1 :353 1 :407
## N.unique :645 5 :130 10 : 67 2 : 59 2 : 58
## N.blank : 0 3 :108 3 : 52 10 : 58 3 : 58
## Min.nchar: 5 4 : 80 2 : 45 3 : 56 10 : 55
## Max.nchar: 8 10 : 69 4 : 40 4 : 44 4 : 33
## 2 : 50 5 : 30 5 : 34 8 : 25
## (Other):117 (Other): 81 (Other): 95 (Other): 63
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses
## 2 :386 1 :402 2 :166 1 :443 1 :579
## 3 : 72 10 :132 3 :165 10 : 61 2 : 35
## 4 : 48 2 : 30 1 :152 3 : 44 3 : 33
## 1 : 47 5 : 30 7 : 73 2 : 36 10 : 14
## 6 : 41 3 : 28 4 : 40 8 : 24 4 : 12
## 5 : 39 (Other): 61 5 : 34 6 : 22 7 : 9
## (Other): 66 NAs : 16 (Other): 69 (Other): 69 (Other): 17
## Class
## benign :458
## malignant:241
##
##
##
##
##
Berdasarkan hasil diatas, dataset Wisconsin Breast Cancer
terdiri atas 699 observasi dan 11 variabel, yang meliputi 9 variabel
prediktor, 1 variabel respons, dan 1 variabel identitas. Variabel
prediktor memiliki tipe data faktor berurutan (ordered factor)
dan faktor (factor), sedangkan variabel Id bertipe karakter.
Variabel respons Class terdiri atas dua kategori, yaitu
tumor jinak (benign) sebanyak 458 observasi dan tumor ganas
(malignant) sebanyak 241. observasi.
Tahap preprocessing data dilakukan dengan menghapus variabel identitas, menangani nilai hilang (missing values), serta mengubah variabel prediktor menjadi numerik agar sesuai untuk pemodelan K-Nearest Neighbor (K-NN).
Sintaks yang digunakan adalah sebagai berikut:
# PREPROCESSING DATA
# Menghapus variabel identitas
data_knn <- BreastCancer[, -1]
# Memeriksa missing value
colSums(is.na(data_knn))## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 0 0 0 0 0
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 16 0 0 0 0
# Menghapus observasi dengan missing value
data_knn <- na.omit(data_knn)
# Menentukan variabel prediktor
prediktor <- setdiff(names(data_knn), "Class")
# Mengubah prediktor menjadi numerik
data_knn[prediktor] <- lapply(
data_knn[prediktor],
function(x) as.numeric(as.character(x))
)
# Menentukan kelas respons
data_knn$Class <- factor(
data_knn$Class,
levels = c("benign", "malignant")
)
# Memeriksa data setelah preprocessing
str(data_knn)## 'data.frame': 683 obs. of 10 variables:
## $ Cl.thickness : num 5 5 3 6 4 8 1 2 2 4 ...
## $ Cell.size : num 1 4 1 8 1 10 1 1 1 2 ...
## $ Cell.shape : num 1 4 1 8 1 10 1 2 1 1 ...
## $ Marg.adhesion : num 1 5 1 1 3 8 1 1 1 1 ...
## $ Epith.c.size : num 2 7 2 3 2 7 2 2 2 2 ...
## $ Bare.nuclei : num 1 10 2 4 1 10 10 1 1 1 ...
## $ Bl.cromatin : num 3 3 3 3 3 9 3 3 1 2 ...
## $ Normal.nucleoli: num 1 2 1 7 1 7 1 1 1 1 ...
## $ Mitoses : num 1 1 1 1 1 1 1 1 5 1 ...
## $ Class : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
## - attr(*, "na.action")= 'omit' Named int [1:16] 24 41 140 146 159 165 236 250 276 293 ...
## ..- attr(*, "names")= chr [1:16] "24" "41" "140" "146" ...
## Cl.thickness Cell.size Cell.shape Marg.adhesion
## Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.00
## 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 1.000 1st Qu.: 1.00
## Median : 4.000 Median : 1.000 Median : 1.000 Median : 1.00
## Mean : 4.442 Mean : 3.151 Mean : 3.215 Mean : 2.83
## 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 5.000 3rd Qu.: 4.00
## Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.00
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli
## Min. : 1.000 Min. : 1.000 Min. : 1.000 Min. : 1.00
## 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.: 1.00
## Median : 2.000 Median : 1.000 Median : 3.000 Median : 1.00
## Mean : 3.234 Mean : 3.545 Mean : 3.445 Mean : 2.87
## 3rd Qu.: 4.000 3rd Qu.: 6.000 3rd Qu.: 5.000 3rd Qu.: 4.00
## Max. :10.000 Max. :10.000 Max. :10.000 Max. :10.00
## Mitoses Class
## Min. : 1.000 benign :444
## 1st Qu.: 1.000 malignant:239
## Median : 1.000
## Mean : 1.603
## 3rd Qu.: 1.000
## Max. :10.000
## [1] 683 10
##
## benign malignant
## 444 239
Berdasarkan hasil, terdapat 16 nilai hilang (missing values)
pada variabel Bare.nuclei, sedangkan variabel lainnya tidak
memiliki nilai hilang. Setelah dilakukan preprocessing, jumlah
observasi berkurang dari 699 menjadi 683 dengan 10 variabel, yang
terdiri atas 9 variabel prediktor dan 1 variabel respons. Seluruh
variabel prediktor telah diubah menjadi tipe numerik, sedangkan variabel
respons Class tetap bertipe faktor dengan dua kategori,
yaitu tumor jinak (benign) sebanyak 444 observasi dan tumor
ganas (malignant) sebanyak 239 observasi.
Pembagian data dilakukan untuk memisahkan pengamatan yang digunakan
dalam proses pelatihan dan pengujian model K-Nearest Neighbor
(K-NN). Analisis ini menggunakan proporsi pembagian data sebesar 70%
untuk data training dan 30% untuk data testing. Proses
pengambilan sampel dilakukan secara acak menggunakan
set.seed(12343) sesuai dengan dua digit terakhir NPM, yaitu
43.
Sintaks yang digunakan adalah sebagai berikut:
# PEMBAGIAN DATA TRAINING DAN TESTING
set.seed(12343)
n <- nrow(data_knn)
n_training <- floor(0.70 * n)
indeks <- sample(1:n, n_training)
# Pembagian data
data_training <- data_knn[indeks, ]
data_testing <- data_knn[-indeks, ]
# Menampilkan jumlah data
cat("Jumlah data training:", nrow(data_training), "\n")## Jumlah data training: 478
## Jumlah data testing : 205
Berdasarkan hasil pembagian data, diperoleh sebanyak 478 observasi sebagai data training (70%) dan 205 observasi sebagai data testing (30%) dari total 683 observasi. Data training digunakan sebagai acuan dalam menentukan tetangga terdekat, sedangkan data testing digunakan untuk mengevaluasi kemampuan model K-Nearest Neighbor (K-NN) dalam mengklasifikasikan data baru.
Tahap standardisasi data dilakukan menggunakan metode Z-score untuk menyamakan skala antarvariabel prediktor. Standardisasi diterapkan pada data training dan testing dengan menggunakan rata-rata dan simpangan baku dari data training agar perhitungan jarak pada metode K-Nearest Neighbor (K-NN) lebih seimbang.
Sintaks yang digunakan adalah sebagai berikut:
# STANDARDISASI DATA
# Standardisasi data training
x_training <- scale(
data_training[, prediktor]
)
# Standardisasi data testing
# Menggunakan parameter data training
x_testing <- scale(
data_testing[, prediktor],
center = attr(x_training, "scaled:center"),
scale = attr(x_training, "scaled:scale")
)
# Variabel respons
y_training <- data_training$Class
y_testing <- data_testing$Class
# Memeriksa hasil standardisasi
head(x_training)## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size Bare.nuclei
## 596 0.2256049 -0.6897987 -0.72880697 -0.6302376 -0.5446600 -0.6870003
## 83 0.2256049 -0.3639847 -0.72880697 -0.6302376 -0.5446600 -0.6870003
## 45 1.9819426 2.2425274 2.21792948 0.4355180 2.1579090 -0.6870003
## 239 1.2794075 2.2425274 2.21792948 1.8565254 1.2570526 1.5150861
## 46 -1.1794653 -0.6897987 -0.72880697 -0.6302376 -0.5446600 -0.6870003
## 441 1.9819426 0.2876433 -0.07397665 2.5670292 0.3561963 1.7903469
## Bl.cromatin Normal.nucleoli Mitoses
## 596 -0.5590998 -0.596406 -0.3223262
## 83 -0.1485780 -0.596406 -0.3223262
## 45 1.9040313 2.422110 -0.3223262
## 239 -0.1485780 2.422110 5.0942650
## 46 -0.5590998 -0.596406 0.2795173
## 441 2.7250750 -0.596406 -0.3223262
## Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size Bare.nuclei
## 1 0.2256049 -0.6897987 -0.7288070 -0.6302376 -0.5446600 -0.6870003
## 2 0.2256049 0.2876433 0.2534385 0.7907698 1.7074808 1.7903469
## 7 -1.1794653 -0.6897987 -0.7288070 -0.6302376 -0.5446600 1.7903469
## 9 -0.8281977 -0.6897987 -0.7288070 -0.6302376 -0.5446600 -0.6870003
## 11 -1.1794653 -0.6897987 -0.7288070 -0.6302376 -0.9950881 -0.6870003
## 15 1.2794075 1.2650853 0.5808537 2.5670292 1.7074808 1.5150861
## Bl.cromatin Normal.nucleoli Mitoses
## 1 -0.1485780 -0.5964060 -0.3223262
## 2 -0.1485780 -0.2610153 -0.3223262
## 7 -0.1485780 -0.5964060 -0.3223262
## 9 -0.9696217 -0.5964060 2.0850477
## 11 -0.1485780 -0.5964060 -0.3223262
## 15 0.6724657 0.7451567 1.4832042
Berdasarkan hasil, standardisasi dilakukan pada 9 variabel prediktor menggunakan metode Z-score terhadap data training dan testing. Hasil standardisasi menunjukkan bahwa nilai variabel telah diubah ke skala yang sama, dengan rata-rata mendekati nol dan simpangan baku 1 pada data training. Nilai negatif menunjukkan pengamatan berada di bawah rata-rata data training, sedangkan nilai positif menunjukkan pengamatan berada di atas rata-rata.
Pembentukan model K-Nearest Neighbor (K-NN) dilakukan
menggunakan paket class dengan pendekatan klasifikasi
biner. Variabel Class digunakan sebagai respons, sedangkan
sembilan karakteristik sel tumor payudara digunakan sebagai variabel
prediktor.
Penelitian ini menggunakan lima variasi nilai k, yaitu 3, 5, 7, 9, dan 11, dengan proporsi pembagian data sebesar 70% data training dan 30% data testing. Kelima variasi tersebut menghasilkan lima model K-NN yang akan dibandingkan. Setiap model melakukan klasifikasi berdasarkan mayoritas kelas dari sejumlah k tetangga terdekat menggunakan jarak Euclidean.
# 5. PEMODELAN K-NEAREST NEIGHBOR
# Menentukan variasi nilai k
nilai_k <- c(3, 5, 7, 9, 11)
# Menyiapkan tabel hasil evaluasi
hasil_evaluasi <- data.frame()
# Menyimpan confusion matrix
daftar_cm <- list()
# Melakukan pemodelan untuk setiap nilai k
for (k in nilai_k) {
# Prediksi menggunakan metode K-NN
prediksi <- knn(
train = x_training,
test = x_testing,
cl = y_training,
k = k
)
# Confusion Matrix
cm <- confusionMatrix(
data = prediksi,
reference = y_testing,
positive = "malignant",
mode = "everything"
)
# Menyimpan Confusion Matrix
daftar_cm[[paste0("k=", k)]] <- cm
# Menghitung metrik evaluasi
accuracy <- as.numeric(cm$overall["Accuracy"])
sensitivity <- as.numeric(cm$byClass["Sensitivity"])
specificity <- as.numeric(cm$byClass["Specificity"])
ppv <- as.numeric(cm$byClass["Pos Pred Value"])
# Menghitung False Negative
FN <- sum(
y_testing == "malignant" &
prediksi == "benign"
)
# Menyimpan hasil evaluasi
hasil_evaluasi <- rbind(
hasil_evaluasi,
data.frame(
k = k,
Accuracy = round(accuracy * 100, 2),
Sensitivity = round(sensitivity * 100, 2),
Specificity = round(specificity * 100, 2),
PPV = round(ppv * 100, 2),
FalseNegative = FN
)
)
}
# 6. HASIL EVALUASI MODEL
# Menampilkan tabel perbandingan
print(hasil_evaluasi)## k Accuracy Sensitivity Specificity PPV FalseNegative
## 1 3 95.12 94.87 95.28 92.50 4
## 2 5 96.59 97.44 96.06 93.83 2
## 3 7 96.59 96.15 96.85 94.94 3
## 4 9 96.59 96.15 96.85 94.94 3
## 5 11 97.07 96.15 97.64 96.15 3
# Menampilkan Confusion Matrix setiap nilai k
for (nama in names(daftar_cm)) {
cat("\n============================\n")
cat("Confusion Matrix", nama, "\n")
cat("============================\n")
print(daftar_cm[[nama]])
}##
## ============================
## Confusion Matrix k=3
## ============================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 121 4
## malignant 6 74
##
## Accuracy : 0.9512
## 95% CI : (0.9121, 0.9764)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.897
##
## Mcnemar's Test P-Value : 0.7518
##
## Sensitivity : 0.9487
## Specificity : 0.9528
## Pos Pred Value : 0.9250
## Neg Pred Value : 0.9680
## Precision : 0.9250
## Recall : 0.9487
## F1 : 0.9367
## Prevalence : 0.3805
## Detection Rate : 0.3610
## Detection Prevalence : 0.3902
## Balanced Accuracy : 0.9507
##
## 'Positive' Class : malignant
##
##
## ============================
## Confusion Matrix k=5
## ============================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 2
## malignant 5 76
##
## Accuracy : 0.9659
## 95% CI : (0.9309, 0.9862)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9281
##
## Mcnemar's Test P-Value : 0.4497
##
## Sensitivity : 0.9744
## Specificity : 0.9606
## Pos Pred Value : 0.9383
## Neg Pred Value : 0.9839
## Precision : 0.9383
## Recall : 0.9744
## F1 : 0.9560
## Prevalence : 0.3805
## Detection Rate : 0.3707
## Detection Prevalence : 0.3951
## Balanced Accuracy : 0.9675
##
## 'Positive' Class : malignant
##
##
## ============================
## Confusion Matrix k=7
## ============================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 123 3
## malignant 4 75
##
## Accuracy : 0.9659
## 95% CI : (0.9309, 0.9862)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9277
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9615
## Specificity : 0.9685
## Pos Pred Value : 0.9494
## Neg Pred Value : 0.9762
## Precision : 0.9494
## Recall : 0.9615
## F1 : 0.9554
## Prevalence : 0.3805
## Detection Rate : 0.3659
## Detection Prevalence : 0.3854
## Balanced Accuracy : 0.9650
##
## 'Positive' Class : malignant
##
##
## ============================
## Confusion Matrix k=9
## ============================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 123 3
## malignant 4 75
##
## Accuracy : 0.9659
## 95% CI : (0.9309, 0.9862)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9277
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9615
## Specificity : 0.9685
## Pos Pred Value : 0.9494
## Neg Pred Value : 0.9762
## Precision : 0.9494
## Recall : 0.9615
## F1 : 0.9554
## Prevalence : 0.3805
## Detection Rate : 0.3659
## Detection Prevalence : 0.3854
## Balanced Accuracy : 0.9650
##
## 'Positive' Class : malignant
##
##
## ============================
## Confusion Matrix k=11
## ============================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 124 3
## malignant 3 75
##
## Accuracy : 0.9707
## 95% CI : (0.9374, 0.9892)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9379
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9615
## Specificity : 0.9764
## Pos Pred Value : 0.9615
## Neg Pred Value : 0.9764
## Precision : 0.9615
## Recall : 0.9615
## F1 : 0.9615
## Prevalence : 0.3805
## Detection Rate : 0.3659
## Detection Prevalence : 0.3805
## Balanced Accuracy : 0.9690
##
## 'Positive' Class : malignant
##
Evaluasi kinerja model K-Nearest Neighbor (K-NN) dilakukan untuk mengetahui kemampuan model dalam mengklasifikasikan tumor payudara berdasarkan variasi nilai k, yaitu 3, 5, 7, 9, dan 11. Evaluasi dilakukan menggunakan confusion matrix dengan menghitung nilai Accuracy, Sensitivity, Specificity, Positive Predictive Value (PPV), dan jumlah False Negative. Hasil evaluasi dari setiap nilai k disajikan pada Tabel 4.1.
Tabel 4.1 Hasil Evaluasi Model K-NN
| Nilai k | Accuracy (%) | Sensitivity (%) | Specificity (%) | PPV (%) | False Negative |
|---|---|---|---|---|---|
| 3 | 95,12 | 94,87 | 95,28 | 92,50 | 4 |
| 5 | 96,59 | 97,44 | 96,06 | 93,83 | 2 |
| 7 | 96,59 | 96,15 | 96,85 | 94,94 | 3 |
| 9 | 96,59 | 96,15 | 96,85 | 94,94 | 3 |
| 11 | 97,07 | 96,15 | 97,64 | 96,15 | 3 |
Berdasarkan Tabel 4.1, nilai Accuracy tertinggi diperoleh pada k = 11 sebesar 97,07%, sedangkan nilai terendah terdapat pada k = 3 sebesar 95,12%. Nilai Sensitivity tertinggi diperoleh pada k = 5 sebesar 97,44%, dengan jumlah False Negative paling sedikit, yaitu 2 observasi. Sementara itu, nilai Specificity dan PPV tertinggi diperoleh pada k = 11, masing-masing sebesar 97,64% dan 96,15%. Hasil tersebut menunjukkan bahwa variasi nilai k memengaruhi kinerja klasifikasi model K-NN.
Selanjutnya, hasil klasifikasi pada setiap nilai k disajikan melalui confusion matrix. Confusion matrix digunakan untuk mengetahui jumlah observasi yang berhasil maupun gagal diklasifikasikan oleh model K-NN. Pada penelitian ini, kategori malignant ditetapkan sebagai kelas positif, sedangkan kategori benign sebagai kelas negatif. Hasil confusion matrix untuk setiap nilai k disajikan pada Tabel 4.2.
Tabel 4.2 Hasil Confusion Matrix Model K-NN
| Nilai k | TP | TN | FP | FN |
|---|---|---|---|---|
| 3 | 74 | 121 | 6 | 4 |
| 5 | 76 | 122 | 5 | 2 |
| 7 | 75 | 123 | 4 | 3 |
| 9 | 75 | 123 | 4 | 3 |
| 11 | 75 | 124 | 3 | 3 |
Berdasarkan Tabel 4.2, pada nilai k = 3 terdapat 74 observasi tumor ganas dan 121 observasi tumor jinak yang berhasil diklasifikasikan dengan benar, sedangkan 10 observasi mengalami kesalahan klasifikasi. Pada nilai k = 5, model berhasil mengklasifikasikan 76 observasi tumor ganas dan 122 observasi tumor jinak dengan benar, serta menghasilkan 2 kesalahan False Negative dan 5 kesalahan False Positive. Sementara itu, nilai k = 7 dan k = 9 menghasilkan klasifikasi yang sama, yaitu 75 observasi tumor ganas dan 123 observasi tumor jinak yang benar. Pada nilai k = 11, model menghasilkan 75 klasifikasi tumor ganas dan 124 klasifikasi tumor jinak yang benar dengan total 6 kesalahan. Berdasarkan hasil tersebut, nilai k = 5 menghasilkan jumlah False Negative paling sedikit dibandingkan nilai k lainnya.
Visualisasi hasil klasifikasi K-NN dilakukan dengan menampilkan grafik perbandingan kinerja model berdasarkan variasi nilai k, yaitu 3, 5, 7, 9, dan 11. Metrik evaluasi yang digunakan meliputi accuracy, sensitivity, specificity, dan Positive Predictive Value (PPV). Visualisasi ini bertujuan untuk mengetahui pengaruh perubahan nilai k terhadap kinerja klasifikasi serta membantu menentukan model yang optimal.
Sintaks yang digunakan adalah sebagai berikut:
# 7. VISUALISASI HASIL KLASIFIKASI
# Menyiapkan data grafik
data_grafik <- data.frame(
k = rep(hasil_evaluasi$k, times = 4),
Metrik = rep(
c("Accuracy", "Sensitivity",
"Specificity", "PPV"),
each = nrow(hasil_evaluasi)
),
Nilai = c(
hasil_evaluasi$Accuracy,
hasil_evaluasi$Sensitivity,
hasil_evaluasi$Specificity,
hasil_evaluasi$PPV
)
)
# Grafik perbandingan metrik evaluasi
ggplot(
data_grafik,
aes(x = k, y = Nilai,
color = Metrik, group = Metrik)
) +
geom_line(linewidth = 1) +
geom_point(size = 3) +
scale_x_continuous(breaks = nilai_k) +
labs(
title = "Perbandingan Kinerja Model K-NN",
x = "Nilai k",
y = "Persentase (%)",
color = "Metrik Evaluasi"
) +
theme_minimal()Berdasarkan grafik perbandingan kinerja model K-Nearest Neighbor (K-NN), terlihat bahwa variasi nilai k memengaruhi hasil evaluasi klasifikasi. Nilai accuracy tertinggi diperoleh pada k = 11 sebesar 97,07%, sedangkan sensitivity tertinggi terdapat pada k = 5 sebesar 97,44%. Sementara itu, nilai specificity dan Positive Predictive Value (PPV) tertinggi diperoleh pada k = 11, masing-masing sebesar 97,64% dan 96,15%. Hasil tersebut menunjukkan bahwa setiap nilai k menghasilkan kinerja klasifikasi yang berbeda. Namun, nilai k = 5 lebih diutamakan karena memiliki kemampuan terbaik dalam mendeteksi tumor ganas dengan jumlah False Negative paling sedikit, yaitu 2 observasi.
# 8. GRAFIK PENGARUH NILAI k TERHADAP AKURASI
ggplot(
hasil_evaluasi,
aes(x = k, y = Accuracy)
) +
geom_line(color = "blue", linewidth = 1) +
geom_point(color = "red", size = 3) +
scale_x_continuous(breaks = nilai_k) +
labs(
title = "Pengaruh Nilai k terhadap Akurasi K-NN",
x = "Nilai k",
y = "Accuracy (%)"
) +
theme_minimal()Berdasarkan grafik pengaruh nilai k terhadap akurasi K-NN, akurasi klasifikasi metode K-Nearest Neighbor (K-NN) mengalami peningkatan seiring perubahan nilai k. Pada k = 3, akurasi yang diperoleh sebesar 95,12%, kemudian meningkat menjadi 96,59% pada k = 5 dan tetap konstan hingga k = 9. Akurasi tertinggi diperoleh pada k = 11 sebesar 97,07%. Hasil ini menunjukkan bahwa pemilihan nilai k memengaruhi tingkat ketepatan klasifikasi, dengan nilai k = 11 menghasilkan akurasi terbaik pada data pengujian yang digunakan.
Sintaks yang digunakan adalah sebagai berikut:
# 9. MENENTUKAN NILAI k OPTIMAL
hasil_urut <- hasil_evaluasi[
order(
hasil_evaluasi$FalseNegative,
-hasil_evaluasi$Sensitivity,
-hasil_evaluasi$Accuracy,
-hasil_evaluasi$PPV
),
]
# Mengambil model terbaik
model_terbaik <- hasil_urut[1, ]
cat("\nMODEL K-NN TERBAIK\n")##
## MODEL K-NN TERBAIK
## k Accuracy Sensitivity Specificity PPV FalseNegative
## 2 5 96.59 97.44 96.06 93.83 2
##
## CONFUSION MATRIX MODEL TERBAIK
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 122 2
## malignant 5 76
##
## Accuracy : 0.9659
## 95% CI : (0.9309, 0.9862)
## No Information Rate : 0.6195
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9281
##
## Mcnemar's Test P-Value : 0.4497
##
## Sensitivity : 0.9744
## Specificity : 0.9606
## Pos Pred Value : 0.9383
## Neg Pred Value : 0.9839
## Precision : 0.9383
## Recall : 0.9744
## F1 : 0.9560
## Prevalence : 0.3805
## Detection Rate : 0.3707
## Detection Prevalence : 0.3951
## Balanced Accuracy : 0.9675
##
## 'Positive' Class : malignant
##
Berdasarkan hasil diatas, model K-Nearest Neighbor (K-NN) terbaik diperoleh pada nilai k = 5 dengan accuracy sebesar 96,59%, sensitivity sebesar 97,44%, specificity sebesar 96,06%, dan Positive Predictive Value (PPV) sebesar 93,83%. Hasil confusion matrix menunjukkan bahwa model berhasil mengklasifikasikan 122 observasi tumor jinak (benign) dan 76 observasi tumor ganas (malignant) dengan benar. Sementara itu, terdapat 5 observasi tumor jinak yang salah diklasifikasikan sebagai tumor ganas (False Positive) dan 2 observasi tumor ganas yang salah diklasifikasikan sebagai tumor jinak (False Negative). Dengan demikian, nilai k = 5 dipilih sebagai model optimal karena menghasilkan jumlah False Negative paling sedikit dibandingkan variasi nilai k lainnya, sehingga lebih baik dalam meminimalkan kesalahan identifikasi tumor ganas pada data pengujian.
Berdasarkan materi yang telah dipelajari, diperoleh kesimpulan sebagai berikut.
Metode K-Nearest Neighbor (K-NN) merupakan salah satu metode klasifikasi supervised learning nonparametrik yang bekerja berdasarkan kedekatan antarobservasi. Proses klasifikasi dilakukan dengan menghitung jarak antara data uji dan data latih menggunakan metrik tertentu, seperti Euclidean Distance, Manhattan Distance, dan Minkowski Distance. Kelas suatu data baru ditentukan berdasarkan mayoritas kelas dari sejumlah k tetangga terdekat.
Penskalaan fitur (feature scaling) merupakan tahapan penting dalam metode K-NN karena perbedaan skala antarvariabel dapat memengaruhi hasil perhitungan jarak. Penskalaan dapat dilakukan menggunakan normalisasi Min-Max atau standardisasi Z-score agar setiap variabel memiliki skala yang sebanding dan tidak ada variabel yang mendominasi perhitungan jarak.
Penerapan algoritma K-NN menggunakan perangkat lunak RStudio dapat
dilakukan dengan bantuan paket class dan
caret. Paket class menyediakan fungsi
knn() untuk melakukan klasifikasi berdasarkan tetangga
terdekat, sedangkan paket caret dapat digunakan untuk
mendukung prapemrosesan, pelatihan, dan evaluasi model. Tahapan
pemodelan meliputi persiapan data, pembagian data latih dan data uji,
standardisasi, pembentukan model, serta prediksi klasifikasi.
Evaluasi kinerja model K-NN dapat dilakukan menggunakan Confusion Matrix, Accuracy, Sensitivity, Specificity, dan Positive Predictive Value (PPV). Accuracy digunakan untuk mengukur ketepatan klasifikasi secara keseluruhan, Sensitivity untuk mengukur kemampuan mengenali kelas positif, Specificity untuk mengukur kemampuan mengenali kelas negatif, sedangkan PPV menunjukkan ketepatan prediksi pada kelas positif. Selain itu, False Negative perlu diperhatikan karena menunjukkan kesalahan ketika data dari kelas positif diklasifikasikan sebagai kelas negatif.
Pemilihan nilai k merupakan salah satu faktor yang
memengaruhi kinerja klasifikasi K-NN. Nilai k yang terlalu
kecil dapat menyebabkan model sensitif terhadap pencilan
(outlier) dan gangguan data (noise), sedangkan nilai
k yang terlalu besar dapat mengurangi kemampuan model dalam
mengenali pola lokal. Oleh karena itu, diperlukan optimasi
hiperparameter (hyperparameter tuning) dengan membandingkan
beberapa nilai k. Hasil perbandingan dapat divisualisasikan
menggunakan paket ggplot2 untuk membantu menentukan nilai
k yang optimal berdasarkan metrik evaluasi yang digunakan.
Berdasarkan hasil analisis klasifikasi menggunakan metode K-Nearest Neighbor (K-NN) pada dataset Wisconsin Breast Cancer dengan variasi nilai k sebesar 3, 5, 7, 9, dan 11 serta proporsi pembagian data training dan testing sebesar 70%:30%, diperoleh tingkat akurasi yang berkisar antara 95,12% hingga 97,07%. Akurasi tertinggi diperoleh pada nilai k = 11 sebesar 97,07%, sedangkan nilai k = 5 menghasilkan sensitivity tertinggi sebesar 97,44% dengan jumlah False Negative paling sedikit, yaitu 2 observasi. Pada nilai k = 5, model menghasilkan accuracy sebesar 96,59%, specificity sebesar 96,06%, dan PPV sebesar 93,83%. Berdasarkan confusion matrix, sebanyak 198 dari 205 data uji berhasil diklasifikasikan dengan benar, sedangkan 7 observasi mengalami kesalahan klasifikasi. Dengan demikian, nilai k = 5 dipilih sebagai model optimal karena mampu meminimalkan kesalahan False Negative dengan tetap mempertahankan tingkat akurasi yang tinggi. Secara keseluruhan, metode K-NN menunjukkan kinerja klasifikasi yang baik pada dataset Wisconsin Breast Cancer, serta memperlihatkan bahwa peningkatan nilai k tidak selalu menghasilkan kemampuan deteksi tumor ganas yang lebih baik.
Danestiara, V. R. (2023). Algoritma k-Nearest Neighbor Classifier untuk prediksi curah hujan di Kabupaten Bandung. SISINFO: Jurnal Sistem Informasi dan Informatika, 5(1), 7–15. https://doi.org/10.37278/sisinfo.v5i01.566
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.
Meriyana, P., Pratama, A. R., Nurlaelasari, E., dan Juwita, A. R. 2025. Penerapan Algoritma KNN dan Naïve Bayes untuk Klasifikasi Stunting pada Balita di Desa Pasirjengkol. Jurnal PETISI (Pendidikan Teknologi Informasi), 6(2), 82–94.
Rihastuti, S., Rosyidi, A., & Handoko. (2024). Implementasi K-Nearest Neighbours dengan Google Collab untuk klasifikasi penyakit kanker payudara. Jurnal Teknologi Informasi, 10(2). https://doi.org/10.52643/jti.v10i2.5223
Setiawan, A., Waleska, R. F., Purnama, M. A., Rahmaddeni, dan Efrizoni, L. 2024. Komparasi Algoritma K-Nearest Neighbor (K-NN), Support Vector Machine (SVM) dan Decision Tree dalam Klasifikasi Penyakit Stroke. Jurnal Informatika dan Rekayasa Elektronik, 7(1), 107–114.
Yuliani, R. S., Rusgiyono, A., & Santoso, R. (2023). K-Nearest Neighbor dengan Adaptive Boosting dan Synthetic Minority Oversampling Technique untuk klasifikasi data tidak seimbang. Jurnal Gaussian, 12(2), 231–241. https://doi.org/10.14710/j.gauss.12.2.231-241