Perkembangan teknologi informasi menyebabkan meningkatnya kebutuhan terhadap metode analisis data yang mampu mengidentifikasi pola serta menghasilkan prediksi secara akurat. Salah satu metode machine learning yang dapat digunakan adalah K-Nearest Neighbor (KNN). KNN merupakan metode pembelajaran terawasi (supervised learning) yang bekerja berdasarkan kedekatan jarak antara suatu objek dengan sejumlah tetangga terdekatnya. Metode ini menentukan hasil prediksi berdasarkan karakteristik data yang memiliki jarak terdekat dengan objek yang dianalisis. Salah satu ukuran jarak yang umum digunakan dalam metode KNN adalah Euclidean Distance untuk mengukur kedekatan antarobjek berdasarkan atribut yang dimiliki.
KNN dapat diterapkan dalam permasalahan klasifikasi, yaitu proses pengelompokan data ke dalam kelas atau kategori berdasarkan karakteristik tertentu. Proses klasifikasi menggunakan KNN dilakukan dengan menghitung jarak antara data yang akan diklasifikasikan dengan seluruh data pelatihan (training data). Selanjutnya, dipilih sejumlah K tetangga dengan jarak terdekat untuk menentukan kelas dari data baru berdasarkan mayoritas kelas tetangga tersebut. Pemilihan nilai K menjadi salah satu aspek penting karena dapat memengaruhi hasil klasifikasi yang diperoleh (Purwani dkk., 2022).
Selain digunakan untuk klasifikasi, KNN juga dapat diterapkan dalam permasalahan regresi, yaitu proses memprediksi nilai numerik berdasarkan nilai respons dari sejumlah tetangga terdekat. Prediksi dilakukan dengan menghitung rata-rata nilai respons dari tetangga terdekat yang telah dipilih. Kemampuan KNN dalam menangani data dengan target kategorik maupun numerik menjadikan metode ini dapat digunakan untuk menyelesaikan berbagai permasalahan analisis data.
Praktikum kali ini dilakukan penerapan metode K-Nearest Neighbor (KNN) untuk memahami konsep dasar, proses pembentukan model, serta mekanisme penentuan tetangga terdekat dalam menghasilkan prediksi. Praktikum ini juga bertujuan untuk mengetahui pengaruh pemilihan nilai K terhadap hasil pemodelan serta mengevaluasi kinerja model KNN dalam melakukan klasifikasi maupun regresi berdasarkan ukuran evaluasi yang sesuai.
Berdasarkan latar belakang, rumusan masalah yang disimpulkan adalah:
Bagaimana konsep fundamental, formulasi matematis, dan prinsip kerja algoritma 𝑘-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning?
Bagaimana pentingnya penskalaan fitur (feature scalling) dalam kompitasi berbasis metrik jarak (distance metrics?
bagaimana cara mengimplementasikan algoritma 𝑘-NN secara terstruktur dan mandiri menggunakan bahasa pemrograman R dengan pustaka class dan caret?
bagaimana cara mengevaluasi performa model klasifikasi menggunakan Confusion Matrix, Akurasi (Accuracy), Sensitivitas (Sensitivity), Spesifisitas (Specificity), dan Positive Predictive Value?
Bagaimana cara melakukan eksplorasi optimasi hiperparameter nilai 𝑘 (hiperpaarameter tuning) serta memvisualisasikan kurva performanya menggunakan paket ggplot2?
Berdasarkan rumusan masalah, tujuan yang dapat disimpulkan adalah:
Memahami konsep fundamental, formulasi matematis, dan prinsip kerja algoritma KNearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning.
Memahami pentingnya penskalaan fitur (feature scaling) dalam komputasi berbasis metrik jarak (distance metrics).
Mengimplementasikan algoritma 𝑘-NN secara terstruktur dan mandiri menggunakan bahasa pemrograman R dengan pustaka class dan caret.
Mengevaluasi performa model klasifikasi menggunakan Confusion Matrix, Akurasi (Accuracy), Sensitivitas (Sensitivity), Spesifisitas (Specificity), dan Positive Predictive Value.
Melakukan eksplorasi optimasi hiperparameter nilai 𝑘 (hyperparameter tuning) serta memvisualisasikan kurva performanya menggunakan paket ggplot2.
Adapun manfaat pada penelitian ini, yaitu:
Bagi penulis
Bagi pembaca
Menambah ilmu pengetahuan dan pemahaman yang berkaitan tentang 𝑘-NN (𝑘-Nearest Neighbor).
Lakukan pemodelan klasifikasi terhadap data medis riil Wisconsin Breast Cancer Database yang dimuat melalui paket mlbench. Tujuan pemodelan adalah mendeteksi secara akurat apakah tumor payudara tergolong jinak (benign) atau ganas (malignant).
Machine learning merupakan salah satu cabang kecerdasan buatan yang memungkinkan komputer mempelajari pola dan hubungan dari sekumpulan data untuk menghasilkan prediksi atau keputusan berdasarkan informasi yang tersedia. Berdasarkan proses pembelajarannya, machine learning dibedakan menjadi supervised learning dan unsupervised learning. Supervised learning menggunakan data yang telah memiliki label atau kelas, sedangkan unsupervised learning menggunakan data tanpa label untuk menemukan pola atau kelompok tertentu (Triase dkk., 2024).
Salah satu penerapan supervised learning adalah klasifikasi, yaitu proses pengelompokan suatu data ke dalam kelas yang telah ditentukan berdasarkan karakteristik atau atributnya. Beberapa algoritma yang dapat digunakan untuk klasifikasi antara lain K-Nearest Neighbor, Naïve Bayes, Decision Tree, dan Support Vector Machine (Gulo dkk., 2022).
𝑘-Nearest Neighbor (𝑘-NN) merupakan algoritma supervised learning non-parametrik yang digunakan untuk klasifikasi dengan menentukan kelas suatu objek berdasarkan mayoritas kelas dari sejumlah k tetangga terdekat. Algoritma ini bekerja dengan menghitung jarak antara data uji dan data latih, kemudian menentukan kelas berdasarkan tetangga yang memiliki jarak paling dekat (Daulay, 2024). Salah satu ukuran jarak yang umum digunakan dalam algoritma 𝑘-NN adalah Euclidean Distance, yaitu metode pengukuran jarak berdasarkan perbedaan nilai atribut antara dua objek (Aziza dkk., 2024).
Berbeda dengan algoritma parametrik (seperti Linear Discriminant Analysis atau Regresi Logistik) yang mengasumsikan bentuk distribusi data apriori tertentu, 𝑘-NN termasuk ke dalam kelompok instance-based learning atau lazy learning. Model ini tidak membentuk fungsi perantara (explicit hypothesis model) pada tahap pelatihan, melainkan menyimpan seluruh data pelatihan dan menunda komputasi hingga terdapat data baru (query point) yang hendak diprediksi (Fransiska, 2026).
Proses klasifikasi K-NN dilakukan melalui beberapa tahapan, yaitu menentukan nilai 𝑘, menghitung jarak antara data uji dan seluruh data latih, mengurutkan jarak dari yang terkecil, memilih sejumlah k tetangga terdekat, kemudian menentukan kelas berdasarkan suara mayoritas dari tetangga tersebut (Daulay, 2024).
Jenis data yang digunakan di dalam penelitian ini berupa data kuantitatif. Data kuantitatif merupakan data atau informasi yang didapatkan dalam bentuk angka atau numerik. Data yang digunakan merupakan data sekunder berupa dataset Wisconsin Breast Cancer Database yang tersedia pada package mlbench dalam program RStudio. Dataset ini terdiri atas 699 observasi dan 11 variabel. Sebelum dilakukan analisis, data melalui tahap preprocessing dengan menghapus variabel identitas dan 16 observasi yang memiliki missing value, sehingga diperoleh 683 observasi yang digunakan dalam pemodelan. Dalam penelitian ini, metode K-Nearest Neighbor (K-NN) diterapkan dengan menggunakan variasi jumlah tetangga terdekat (k), yaitu 3, 5, 7, 9, dan 11, untuk mengklasifikasikan tumor ke dalam kategori jinak dan ganas.
Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada penelitian ini terdapat sembilan variabel prediktor dan satu variabel respon. Variabel prediktor terdiri atas Cl.thickness (ketebalan gumpalan sel), Cell.size (ukuran sel), Cell.shape (bentuk sel), Marg.adhesion (adhesi marginal), Epith.c.size (ukuran sel epitel), Bare.nuclei (inti sel tanpa sitoplasma), Bl.cromatin (kromatin), Normal.nucleoli (nukleolus normal), dan Mitoses (jumlah mitosis). Sementara itu, variabel respon adalah Class yang menunjukkan kategori tumor, yaitu benign (tumor jinak) dan malignant (tumor ganas).
Berikut adalah algoritma untuk menyelesaiankan batasan masalah:
Memanggil package yang diperlukan dan memuat dataset Wisconsin Breast Cancer Database.
Melakukan eksplorasi dan analisis deskriptif terhadap data.
Melakukan preprocessing data, meliputi pembersihan data, penanganan missing value, dan normalisasi.
Membagi data menjadi data training dan testing dengan proporsi 70% dan 30%.
Membentuk model klasifikasi menggunakan metode K-Nearest Neighbor (K-NN) dengan beberapa variasi nilai (k).
Melakukan prediksi dan evaluasi model menggunakan confusion matrix.
Menentukan nilai (k) optimal berdasarkan hasil evaluasi model.
Membandingkan performa model melalui visualisasi hasil klasifikasi.
Menarik kesimpulan berdasarkan hasil analisis.
# 1. MEMANGGIL LIBRARY
library(class) # Menyediakan fitur K-NN
library(caret) # Confusion Matrix dan pembagian data## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2) # Menampilkan plot
library(mlbench) # Menyediakan dataset BreastCancer
data(BreastCancer, package = "mlbench")
str(BreastCancer) ## '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 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
##
## benign malignant
## 458 241
##
## benign malignant
## 0.6552217 0.3447783
Data yang digunakan dalam penelitian ini merupakan Wisconsin Breast Cancer Database yang memiliki 699 observasi dan 11 variabel, terdiri atas satu variabel identitas, sembilan variabel prediktor, serta satu variabel respons (Class). Variabel respons terbagi menjadi dua kategori, yaitu benign (tumor jinak) sebanyak 458 observasi (65,52%) dan malignant (tumor ganas) sebanyak 241 observasi (34,48%). Berdasarkan jumlah tersebut, dapat diketahui bahwa data tumor jinak memiliki proporsi yang lebih besar dibandingkan dengan data tumor ganas.
Hasil analisis menunjukkan bahwa kesembilan variabel prediktor memiliki rentang nilai antara 1 hingga 10 yang merepresentasikan karakteristik sel tumor. Distribusi variabel respons memperlihatkan bahwa kategori benign mendominasi data dengan persentase sebesar 65,52%, sedangkan kategori malignant memiliki persentase sebesar 34,48%. Selain itu, terdapat 16 data hilang (missing values) pada variabel Bare.nuclei. Temuan tersebut menjadi informasi awal yang perlu diperhatikan dalam proses prapemrosesan data sebelum dilakukan pemodelan menggunakan metode K-Nearest Neighbor (KNN).
# 2. PRA-PEMROSESAN DATA
# Menghapus variabel Id
bc_data <- BreastCancer[, -1]
# Menentukan variabel prediktor
prediktor <- names(bc_data)[names(bc_data) != "Class"]
# Mengubah prediktor menjadi numerik
bc_data[prediktor] <- lapply(
bc_data[prediktor],
function(x) as.numeric(as.character(x)))
# Mengubah variabel target menjadi factor
bc_data$Class <- factor(
bc_data$Class,
levels = c("benign", "malignant"))
# Memeriksa missing value
colSums(is.na(bc_data))## 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
bc_data <- na.omit(bc_data)
# Memeriksa hasil preprocessing
str(bc_data)## '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 Epith.c.size Bare.nuclei
## 1 5 1 1 1 2 1
## 2 5 4 4 5 7 10
## 3 3 1 1 1 2 2
## 4 6 8 8 1 3 4
## 5 4 1 1 3 2 1
## 6 8 10 10 8 7 10
## Bl.cromatin Normal.nucleoli Mitoses Class
## 1 3 1 1 benign
## 2 3 2 1 benign
## 3 3 1 1 benign
## 4 3 7 1 benign
## 5 3 1 1 benign
## 6 9 7 1 malignant
##
## benign malignant
## 444 239
## 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
# 3. MEMBAGI DATA LATIH DAN DATA UJI
set.seed(12315)
# Pembagian 70% data latih dan 30% data uji
train_indices <- createDataPartition(
bc_data$Class,
p = 0.70,
list = FALSE)
# Memisahkan data latih dan data uji
train_data <- bc_data[train_indices, ]
test_data <- bc_data[-train_indices, ]
# Memisahkan fitur prediktor
train_raw <- train_data[, prediktor]
test_raw <- test_data[, prediktor]
# Memisahkan label kelas
train_y <- train_data$Class
test_y <- test_data$Class
# 4. NORMALISASI DATA MIN-MAX
# Mendefinisikan fungsi normalisasi Min-Max
min_max_norm <- function(x, min_val, max_val) {
if (max_val == min_val) {
return(rep(0, length(x)))
}
return((x - min_val) / (max_val - min_val))}
# Menghitung nilai minimum dan maksimum data latih
nilai_min <- sapply(train_raw, min)
nilai_max <- sapply(train_raw, max)
# Normalisasi data latih
train_x <- as.data.frame(
Map(
function(x, mn, mx) min_max_norm(x, mn, mx),
train_raw, nilai_min, nilai_max))
# Normalisasi data uji menggunakan parameter data latih
test_x <- as.data.frame(
Map(function(x, mn, mx) min_max_norm(x, mn, mx),
test_raw, nilai_min, nilai_max))
# Menampilkan dimensi data
cat("Dimensi Data Latih:",
nrow(train_x), "baris,",
ncol(train_x), "fitur\n")## Dimensi Data Latih: 479 baris, 9 fitur
## Dimensi Data Uji: 204 baris, 9 fitur
## Cl.thickness Cell.size Cell.shape Marg.adhesion
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1111 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.3333 Median :0.0000 Median :0.0000 Median :0.0000
## Mean :0.3820 Mean :0.2412 Mean :0.2482 Mean :0.1990
## 3rd Qu.:0.5556 3rd Qu.:0.4444 3rd Qu.:0.4444 3rd Qu.:0.3333
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1111 1st Qu.:0.0000 1st Qu.:0.1111 1st Qu.:0.0000
## Median :0.1111 Median :0.0000 Median :0.2222 Median :0.0000
## Mean :0.2482 Mean :0.2811 Mean :0.2675 Mean :0.2039
## 3rd Qu.:0.3333 3rd Qu.:0.6667 3rd Qu.:0.3889 3rd Qu.:0.2222
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Mitoses
## Min. :0.00000
## 1st Qu.:0.00000
## Median :0.00000
## Mean :0.07655
## 3rd Qu.:0.00000
## Max. :1.00000
## Cl.thickness Cell.size Cell.shape Marg.adhesion
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1111 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.3333 Median :0.0000 Median :0.1111 Median :0.0000
## Mean :0.3834 Mean :0.2337 Mean :0.2413 Mean :0.2135
## 3rd Qu.:0.5556 3rd Qu.:0.3611 3rd Qu.:0.4444 3rd Qu.:0.3333
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.1111 1st Qu.:0.0000 1st Qu.:0.1111 1st Qu.:0.0000
## Median :0.1111 Median :0.0000 Median :0.2222 Median :0.0000
## Mean :0.2484 Mean :0.2865 Mean :0.2816 Mean :0.2168
## 3rd Qu.:0.3333 3rd Qu.:0.4444 3rd Qu.:0.4444 3rd Qu.:0.3333
## Max. :1.0000 Max. :1.0000 Max. :1.0000 Max. :1.0000
## Mitoses
## Min. :0.00000
## 1st Qu.:0.00000
## Median :0.00000
## Mean :0.04466
## 3rd Qu.:0.00000
## Max. :1.00000
ada tahap prapemrosesan, variabel Id dihapus karena hanya berfungsi sebagai identitas observasi dan tidak digunakan sebagai variabel prediktor. Selanjutnya, seluruh variabel prediktor dikonversi ke dalam tipe data numerik, sedangkan variabel Class diubah menjadi faktor karena merupakan variabel target yang memiliki dua kategori, yaitu benign dan malignant. Observasi yang mengandung nilai hilang (missing values) dihapus sehingga jumlah data yang semula 699 observasi menjadi 683 observasi, yang terdiri atas 444 data benign dan 239 data malignant.
Setelah proses pembersihan data selesai, dilakukan pembagian data menggunakan metode stratified sampling dengan proporsi 70% sebagai data latih (training data) dan 30% sebagai data uji (testing data). Pembagian ini bertujuan mempertahankan proporsi masing-masing kelas pada kedua kelompok data. Selanjutnya, dilakukan normalisasi menggunakan metode Min-Max agar seluruh variabel prediktor berada pada rentang nilai 0 hingga 1. Normalisasi bertujuan menyamakan skala antarvariabel sehingga tidak terdapat variabel dengan rentang nilai lebih besar yang mendominasi perhitungan jarak dalam metode K-Nearest Neighbor (KNN).
# 5. PEMODELAN K-NN UNTUK k = 3, 5, 7, 9, 11
# Menentukan nilai k yang diuji
k_values <- c(3, 5, 7, 9, 11)
# Menyimpan hasil prediksi
hasil_prediksi <- list()
# Melakukan klasifikasi K-NN
for (k_val in k_values) {
set.seed(12310)
prediksi <- knn(
train = train_x,
test = test_x,
cl = train_y,
k = k_val)
hasil_prediksi[[as.character(k_val)]] <- prediksi
cat("\nHasil Prediksi K-NN dengan k =", k_val, "\n")
print(head(prediksi, 10))}##
## Hasil Prediksi K-NN dengan k = 3
## [1] malignant benign benign benign benign benign malignant
## [8] benign malignant malignant
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 5
## [1] malignant benign benign benign benign benign malignant
## [8] benign malignant malignant
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 7
## [1] malignant benign benign benign benign benign malignant
## [8] benign malignant malignant
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 9
## [1] malignant benign benign benign benign benign malignant
## [8] benign malignant malignant
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 11
## [1] malignant benign benign benign benign benign malignant
## [8] benign malignant malignant
## Levels: benign malignant
Pembentukan model klasifikasi dilakukan menggunakan metode K-Nearest Neighbor (KNN) dengan menguji lima variasi jumlah tetangga terdekat (k), yaitu 3, 5, 7, 9, dan 11. Proses klasifikasi dilakukan dengan menghitung jarak antara setiap data uji dan seluruh data latih, kemudian menentukan kelas berdasarkan mayoritas kategori dari sejumlah tetangga terdekat. Kelas yang digunakan dalam pemodelan terdiri atas benign (tumor jinak) dan malignant (tumor ganas).
Berdasarkan hasil prediksi terhadap 10 observasi pertama pada data uji, kelima variasi nilai k menghasilkan klasifikasi yang sama. Urutan hasil prediksi menunjukkan bahwa observasi pertama diklasifikasikan sebagai malignant, sedangkan observasi kedua hingga keenam diklasifikasikan sebagai benign. Observasi ketujuh diklasifikasikan sebagai malignant, observasi kedelapan sebagai benign, serta observasi kesembilan dan kesepuluh sebagai malignant. Kesamaan hasil tersebut menunjukkan bahwa perubahan jumlah tetangga terdekat dari k=3 hingga k=11 belum mengubah hasil prediksi pada 10 observasi pertama yang ditampilkan. Selanjutnya, hasil prediksi dari masing-masing nilai k digunakan untuk mengevaluasi kinerja model dalam mengklasifikasikan tumor jinak dan tumor ganas.
# 6. EVALUASI MODEL DENGAN CONFUSION MATRIX
# Menyiapkan tabel hasil evaluasi
hasil_evaluasi <- data.frame(
k = integer(),
Accuracy = numeric(),
Sensitivity = numeric(),
Specificity = numeric(),
False_Negative = integer())
# Evaluasi setiap nilai k
for (k_val in k_values) {
prediksi <- hasil_prediksi[[as.character(k_val)]]
evaluasi <- confusionMatrix(
data = prediksi,
reference = test_y,
positive = "malignant")
cat("\n====================================\n")
cat("CONFUSION MATRIX UNTUK k =", k_val, "\n")
cat("====================================\n")
print(evaluasi)
# Mengambil metrik evaluasi
akurasi <- evaluasi$overall["Accuracy"]
sensitivitas <- evaluasi$byClass["Sensitivity"]
spesifisitas <- evaluasi$byClass["Specificity"]
# Menghitung False Negative
fn <- evaluasi$table["benign", "malignant"]
# Menyimpan hasil evaluasi
hasil_evaluasi <- rbind(
hasil_evaluasi,
data.frame(
k = k_val,
Accuracy = as.numeric(akurasi),
Sensitivity = as.numeric(sensitivitas),
Specificity = as.numeric(spesifisitas),
False_Negative = as.integer(fn)))}##
## ====================================
## CONFUSION MATRIX UNTUK k = 3
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 129 6
## malignant 4 65
##
## Accuracy : 0.951
## 95% CI : (0.9117, 0.9762)
## No Information Rate : 0.652
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8913
##
## Mcnemar's Test P-Value : 0.7518
##
## Sensitivity : 0.9155
## Specificity : 0.9699
## Pos Pred Value : 0.9420
## Neg Pred Value : 0.9556
## Prevalence : 0.3480
## Detection Rate : 0.3186
## Detection Prevalence : 0.3382
## Balanced Accuracy : 0.9427
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 5
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 129 7
## malignant 4 64
##
## Accuracy : 0.9461
## 95% CI : (0.9056, 0.9728)
## No Information Rate : 0.652
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.88
##
## Mcnemar's Test P-Value : 0.5465
##
## Sensitivity : 0.9014
## Specificity : 0.9699
## Pos Pred Value : 0.9412
## Neg Pred Value : 0.9485
## Prevalence : 0.3480
## Detection Rate : 0.3137
## Detection Prevalence : 0.3333
## Balanced Accuracy : 0.9357
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 7
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 129 7
## malignant 4 64
##
## Accuracy : 0.9461
## 95% CI : (0.9056, 0.9728)
## No Information Rate : 0.652
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.88
##
## Mcnemar's Test P-Value : 0.5465
##
## Sensitivity : 0.9014
## Specificity : 0.9699
## Pos Pred Value : 0.9412
## Neg Pred Value : 0.9485
## Prevalence : 0.3480
## Detection Rate : 0.3137
## Detection Prevalence : 0.3333
## Balanced Accuracy : 0.9357
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 9
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 129 8
## malignant 4 63
##
## Accuracy : 0.9412
## 95% CI : (0.8995, 0.9692)
## No Information Rate : 0.652
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8687
##
## Mcnemar's Test P-Value : 0.3865
##
## Sensitivity : 0.8873
## Specificity : 0.9699
## Pos Pred Value : 0.9403
## Neg Pred Value : 0.9416
## Prevalence : 0.3480
## Detection Rate : 0.3088
## Detection Prevalence : 0.3284
## Balanced Accuracy : 0.9286
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 11
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 129 6
## malignant 4 65
##
## Accuracy : 0.951
## 95% CI : (0.9117, 0.9762)
## No Information Rate : 0.652
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8913
##
## Mcnemar's Test P-Value : 0.7518
##
## Sensitivity : 0.9155
## Specificity : 0.9699
## Pos Pred Value : 0.9420
## Neg Pred Value : 0.9556
## Prevalence : 0.3480
## Detection Rate : 0.3186
## Detection Prevalence : 0.3382
## Balanced Accuracy : 0.9427
##
## 'Positive' Class : malignant
##
##
## TABEL PERBANDINGAN HASIL EVALUASI
## k Accuracy Sensitivity Specificity False_Negative
## 1 3 0.9509804 0.9154930 0.9699248 6
## 2 5 0.9460784 0.9014085 0.9699248 7
## 3 7 0.9460784 0.9014085 0.9699248 7
## 4 9 0.9411765 0.8873239 0.9699248 8
## 5 11 0.9509804 0.9154930 0.9699248 6
Evaluasi model klasifikasi K-Nearest Neighbor dilakukan menggunakan confusion matrix untuk mengetahui kemampuan model dalam mengklasifikasikan data ke dalam kategori benign (tumor jinak) dan malignant (tumor ganas). Evaluasi dilakukan terhadap lima variasi nilai k, yaitu 3, 5, 7, 9, dan 11, dengan menggunakan ukuran evaluasi berupa accuracy, sensitivity, specificity, dan false negative. Berdasarkan hasil evaluasi, model dengan k=3 dan k=11 memperoleh nilai accuracy tertinggi sebesar 95,10%, sensitivity sebesar 91,55%, dan specificity sebesar 96,99%. Sementara itu, model dengan k=5 dan k=7 menghasilkan accuracy sebesar 94,61%, sedangkan model dengan k=9 memperoleh nilai terendah sebesar 94,12%.
Berdasarkan perbandingan hasil evaluasi, model dengan k=3 dan k=11 menunjukkan kinerja terbaik karena memiliki nilai accuracy dan sensitivity tertinggi serta jumlah false negative paling sedikit, yaitu sebanyak 6 observasi. Sementara itu, model dengan k=5, k=7, dan k=9 masing-masing menghasilkan false negative sebanyak 7, 7, dan 8 observasi. Nilai specificity pada seluruh variasi k menunjukkan hasil yang sama, yaitu 96,99%. Dengan demikian, nilai k=3 dan k=11 dapat dipertimbangkan sebagai model terbaik karena mampu memberikan hasil klasifikasi yang lebih baik dalam mengidentifikasi tumor jinak maupun tumor ganas berdasarkan data yang diuji.
# 7. MENENTUKAN NILAI k OPTIMAL
hasil_urut <- hasil_evaluasi[
order(
-hasil_evaluasi$Sensitivity,
hasil_evaluasi$False_Negative,
-hasil_evaluasi$Accuracy,
-hasil_evaluasi$Specificity),]
# Menentukan nilai k optimal
k_optimal <- hasil_urut$k[1]
cat("\n====================================\n")##
## ====================================
## NILAI k OPTIMAL = 3
## ====================================
# Menampilkan hasil model optimal
hasil_optimal <- hasil_evaluasi[
hasil_evaluasi$k == k_optimal,]
print(hasil_optimal)## k Accuracy Sensitivity Specificity False_Negative
## 1 3 0.9509804 0.915493 0.9699248 6
Penentuan nilai k optimal dilakukan dengan mengurutkan hasil evaluasi model berdasarkan nilai sensitivity tertinggi, jumlah false negative terendah, accuracy tertinggi, dan specificity tertinggi. Berdasarkan hasil pengurutan tersebut, diperoleh nilai k optimal sebesar 3. Model KNN dengan k=3 menghasilkan nilai accuracy sebesar 95,10%, sensitivity sebesar 91,55%, dan specificity sebesar 96,99%, dengan jumlah false negative sebanyak 6 observasi. Hasil tersebut menunjukkan bahwa penggunaan k=3 merupakan pilihan optimal berdasarkan kriteria evaluasi yang telah ditentukan. Model ini mampu mengklasifikasikan data tumor jinak dan tumor ganas dengan tingkat ketepatan yang tinggi serta menghasilkan jumlah kesalahan false negative paling sedikit. Dengan demikian, model KNN dengan k=3 dipilih sebagai model terbaik untuk mengklasifikasikan data Wisconsin Breast Cancer Database.
# 8. PERBANDINGAN PERFORMA MODEL
# Mengubah data menjadi format panjang
data_plot <- data.frame(
k = rep(hasil_evaluasi$k, 3),
Metrik = factor(
rep(
c("Accuracy", "Sensitivity", "Specificity"),
each = nrow(hasil_evaluasi)),
levels = c("Accuracy", "Sensitivity", "Specificity")),
Nilai = c(
hasil_evaluasi$Accuracy,
hasil_evaluasi$Sensitivity,
hasil_evaluasi$Specificity))
# Membuat grafik perbandingan
ggplot(
data_plot,
aes(x = k, y = Nilai, color = Metrik, group = Metrik)) +geom_line(linewidth = 1.1) +
geom_point(size = 2.8) +
scale_x_continuous(breaks = k_values) +
scale_y_continuous(labels = scales::percent_format(accuracy = 0.1),limits = c(0, 1)) +
labs(title = "Perbandingan Performa Klasifikasi K-NN",
subtitle = "Wisconsin Breast Cancer Database",
x = "Jumlah Tetangga Terdekat (k)",
y = "Nilai Evaluasi",
color = "Metrik Evaluasi") +
theme_minimal(base_size = 11) +
theme(plot.title = element_text(face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
panel.grid.minor = element_blank(),
legend.position = "bottom")k memengaruhi nilai accuracy dan sensitivity, sedangkan nilai specificity cenderung tetap pada seluruh variasi k. Nilai accuracy tertinggi diperoleh pada k=3 dan k=11, yaitu sebesar 95,10%, sedangkan nilai terendah terdapat pada k=9, yaitu 94,12%. Nilai sensitivity juga menunjukkan pola yang serupa, dengan nilai tertinggi sebesar 91,55% pada k=3 dan k=11, kemudian menurun hingga 88,73% pada k=9. Sementara itu, nilai specificity tetap sebesar 96,99% pada seluruh variasi nilai k.
Grafik tersebut menunjukkan bahwa peningkatan nilai k dari 3 hingga 9 cenderung menurunkan performa model, terutama pada aspek sensitivity dan accuracy. Namun, ketika nilai k meningkat menjadi 11, kedua metrik tersebut kembali mengalami peningkatan. Berdasarkan pola tersebut, nilai k=3 dan k=11 memberikan performa klasifikasi terbaik dibandingkan variasi lainnya. Meskipun demikian, nilai k=3 dipilih sebagai nilai k optimal berdasarkan kriteria evaluasi yang telah ditentukan sebelumnya, yaitu dengan mempertimbangkan sensitivity tertinggi, jumlah false negative terendah, serta nilai accuracy dan specificity.
# 9. JUMLAH FALSE NEGATIVE
ggplot(
hasil_evaluasi,
aes(x = factor(k), y = False_Negative)) +
geom_col(fill = "#2b5c8f", width = 0.6) +
geom_text(
aes(label = False_Negative),
vjust = -0.5,
size = 4) +
labs(title = "Perbandingan False Negative K-NN",
subtitle = "Kesalahan Prediksi Tumor Ganas sebagai Tumor Jinak",
x = "Jumlah Tetangga Terdekat (k)",
y = "Jumlah False Negative") +
theme_minimal(base_size = 11) +theme(
plot.title = element_text(face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))Berdasarkan grafik perbandingan jumlah false negative pada model K-Nearest Neighbor (KNN), terlihat bahwa jumlah kesalahan klasifikasi berbeda pada setiap variasi nilai k. Model dengan k=3 dan k=11 menghasilkan jumlah false negative paling sedikit, yaitu sebanyak 6 observasi. Selanjutnya, model dengan k=5 dan k=7 menghasilkan masing-masing 7 observasi, sedangkan jumlah false negative tertinggi diperoleh pada k=9, yaitu sebanyak 8 observasi.
Grafik tersebut menunjukkan bahwa nilai k memengaruhi jumlah kesalahan model dalam mengklasifikasikan tumor ganas (malignant) sebagai tumor jinak (benign). Semakin sedikit jumlah false negative, semakin baik kemampuan model dalam mengidentifikasi kasus tumor ganas. Berdasarkan hasil tersebut, nilai k=3 dan k=11 memiliki performa terbaik karena menghasilkan kesalahan false negative paling sedikit. Namun, nilai k=3 dipilih sebagai nilai optimal karena memenuhi kriteria evaluasi yang telah ditentukan sebelumnya.
Algoritma K-Nearest Neighbors (K-NN) merupakan metode supervised learning non-parametrik yang digunakan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Metode ini bekerja dengan menentukan sejumlah k tetangga terdekat berdasarkan jarak antara data yang akan diprediksi dengan data pelatihan. Salah satu ukuran jarak yang umum digunakan adalah Euclidean Distance. Dalam permasalahan klasifikasi, kelas suatu data ditentukan berdasarkan mayoritas kelas dari k tetangga terdekat. Sementara itu, dalam regresi, nilai prediksi diperoleh melalui rata-rata nilai respons dari tetangga terdekat. Metode ini disebut non-parametrik karena tidak mengasumsikan bentuk distribusi atau persamaan tertentu dalam membentuk model.
Penskalaan fitur merupakan tahapan penting dalam algoritma K-NN karena metode ini menggunakan perhitungan jarak untuk menentukan kedekatan antarobservasi. Variabel yang memiliki rentang nilai lebih besar dapat mendominasi perhitungan jarak dibandingkan variabel dengan rentang nilai lebih kecil sehingga menghasilkan klasifikasi yang kurang optimal. Salah satu metode penskalaan yang dapat digunakan adalah Min-Max Normalization, yaitu proses mengubah nilai setiap variabel ke dalam rentang 0 hingga 1. Melalui proses normalisasi, seluruh variabel prediktor memiliki skala yang sebanding sehingga kontribusi masing-masing variabel dalam perhitungan jarak menjadi lebih proporsional.
Implementasi algoritma K-NN menggunakan bahasa pemrograman R dapat dilakukan melalui beberapa tahapan, yaitu mempersiapkan data, melakukan pembersihan data, mengubah tipe variabel sesuai kebutuhan, membagi data menjadi data latih dan data uji, serta melakukan normalisasi terhadap variabel prediktor. Pustaka class digunakan untuk membentuk model klasifikasi menggunakan fungsi knn() dengan menentukan data latih, data uji, kelas target, dan jumlah tetangga terdekat (k). Sementara itu, pustaka caret digunakan untuk membantu proses pembagian data secara terstratifikasi melalui fungsi createDataPartition() serta mengevaluasi hasil klasifikasi menggunakan fungsi confusionMatrix(). Implementasi dilakukan dengan menguji beberapa variasi nilai k sehingga dapat diketahui perbedaan hasil klasifikasi berdasarkan masing-masing parameter yang digunakan.
Evaluasi performa model klasifikasi dilakukan menggunakan Confusion Matrix yang menyajikan perbandingan antara hasil prediksi model dan kelas aktual melalui empat komponen, yaitu True Positive (TP), True Negative (TN), False Positive (FP), dan False Negative (FN). Kinerja model dapat diukur menggunakan beberapa metrik, yaitu Accuracy, Sensitivity, Specificity, dan Positive Predictive Value (PPV). Akurasi mengukur ketepatan prediksi secara keseluruhan, sensitivitas mengukur kemampuan model mengenali kelas positif, spesifisitas mengukur kemampuan mengenali kelas negatif, sedangkan PPV menunjukkan proporsi prediksi positif yang benar-benar positif. Keempat metrik tersebut digunakan untuk mengetahui kelebihan dan kekurangan model dalam melakukan klasifikasi.
Optimasi hiperparameter nilai k dilakukan dengan menguji beberapa alternatif jumlah tetangga terdekat untuk memperoleh model dengan performa klasifikasi terbaik. Proses ini dilakukan dengan membentuk model K-NN menggunakan setiap nilai k, kemudian mengevaluasi hasil prediksinya berdasarkan metrik seperti accuracy, sensitivity, specificity, dan jumlah false negative. Hasil evaluasi selanjutnya disusun dalam sebuah tabel perbandingan dan divisualisasikan menggunakan paket ggplot2 melalui grafik garis untuk memperlihatkan perubahan nilai metrik evaluasi terhadap variasi k, serta grafik batang untuk membandingkan jumlah false negative. Nilai k optimal ditentukan berdasarkan kriteria evaluasi yang telah ditetapkan sehingga diperoleh model yang memberikan performa klasifikasi terbaik.
Berdasarkan hasil praktikum yang telah dilakukan, metode K-Nearest Neighbor (KNN) dapat diterapkan untuk mengklasifikasikan data Wisconsin Breast Cancer Database ke dalam dua kategori, yaitu benign (tumor jinak) dan malignant (tumor ganas). Proses pemodelan diawali dengan prapemrosesan data, pembagian data menjadi 70% data latih dan 30% data uji, serta normalisasi menggunakan metode Min-Max untuk menyamakan skala variabel prediktor. Pembentukan model dilakukan dengan menguji lima variasi jumlah tetangga terdekat, yaitu k = 3, 5, 7, 9, dan 11 menggunakan bahasa pemrograman R. Hasil evaluasi menunjukkan bahwa setiap variasi nilai k menghasilkan performa klasifikasi yang berbeda. Model dengan k = 3 terpilih sebagai model optimal berdasarkan kriteria evaluasi yang digunakan, dengan nilai accuracy sebesar 95,10%, sensitivity sebesar 91,55%, dan specificity sebesar 96,99%, serta menghasilkan 6 kesalahan false negative. Hasil visualisasi juga memperlihatkan bahwa perubahan nilai k memengaruhi performa klasifikasi dan jumlah kesalahan prediksi. Dengan demikian, pemilihan nilai k yang tepat menjadi salah satu faktor penting dalam memperoleh model KNN yang mampu mengklasifikasikan data dengan baik.
Aziza, L. N., Astuti, R. Y., Maulana, B. A., & Hidayati, N. (2024). Penerapan algoritma K-Nearest Neighbor untuk klasifikasi ketahanan pangan di Provinsi Jawa Tengah. MALCOM: Indonesian Journal of Machine Learning and Computer Science, 4(2), 404–412.
Daulay, R. S. A. (2024). Analisis kritis dan pengembangan algoritma K-Nearest Neighbor (KNN): Sebuah tinjauan literatur. Jurnal Pendidikan Sains dan Komputer, 4(2).
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.
Purwani, F., Wahyudi, R. T., dan Jaya, I. D. (2022). Penerapan algoritma K-Nearest Neighbour dengan Euclidean Distance untuk menentukan kelompok uang kuliah tunggal mahasiswa. Jurnal Pendidikan Informatika, 6(2), 344–353.