Perkembangan teknologi informasi menyebabkan meningkatnya jumlah data yang dapat dimanfaatkan untuk memperoleh informasi dan mendukung pengambilan keputusan. Salah satu teknologi yang digunakan untuk mengolah dan menganalisis data adalah machine learning, yaitu metode pembelajaran komputer yang memanfaatkan data untuk mengenali pola dan menghasilkan prediksi atau klasifikasi. Salah satu penerapan machine learning adalah klasifikasi, yaitu proses mengelompokkan data ke dalam kategori tertentu berdasarkan karakteristik yang dimiliki (Triase dkk., 2024).
Salah satu algoritma yang dapat digunakan dalam proses klasifikasi adalah K-Nearest Neighbor (K-NN). K-NN merupakan algoritma supervised learning non-parametrik yang menentukan kelas suatu data berdasarkan mayoritas kelas dari sejumlah tetangga terdekatnya. Algoritma ini menggunakan perhitungan jarak antara data yang akan diklasifikasikan dengan data latih untuk menentukan kelas yang paling sesuai (Daulay, 2024).
Dalam penerapannya, algoritma K-NN sangat dipengaruhi oleh skala variabel karena proses klasifikasi didasarkan pada perhitungan jarak. Oleh karena itu, diperlukan penskalaan fitur (feature scaling) agar setiap variabel memiliki rentang nilai yang sebanding dan tidak didominasi oleh variabel dengan skala lebih besar (Allorerung et al., 2024). Selain itu, pemilihan nilai k juga perlu diperhatikan karena jumlah tetangga yang digunakan dapat memengaruhi hasil klasifikasi (Daulay, 2024).
Berdasarkan hal tersebut, praktikum ini dilakukan untuk memahami konsep dan mengimplementasikan algoritma K-NN menggunakan bahasa pemrograman R dengan bantuan class dan caret. Performa model dievaluasi menggunakan confusion matrix melalui nilai akurasi, sensitivitas, spesifisitas, dan Positive Predictive Value (PPV). Selanjutnya, dilakukan pengujian beberapa nilai k untuk memperoleh parameter yang memberikan performa klasifikasi terbaik serta memvisualisasikan hasilnya menggunakan paket ggplot2.
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah:
Bagaimana cara memahami konsep fundamental, formulasi matematis, dan prinsip kerja algoritma KNearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning?
Bagaimana cara memahami pentingnya penskalaan fitur (feature scaling) dalam komputasi 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 𝑘 (hyperparameter 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:
Adapun batasan masalah pada laporan praktikum pertemuan ini adalah 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).
Instruksi Pengerjaan
Muat dataset dengan perintah: data(BreastCancer, package = “mlbench”).
Lakukan tahapan pra-pemrosesan data.
Bagi data menjadi 80% data latih dan 20% data uji dengan inisialisasi set.seed(12310).
Lakukan pemodelan klasifikasi 𝑘-NN untuk nilai 𝑘 ∈ {3,5,7,9,11}.
Susun tabel perbandingan metrik evaluasi (Accuracy, Sensitivity, Specificity) dan simpulkan nilai 𝑘 paling optimal, dengan mempertimbangkan pentingnya meminimalkan kesalahan diagnosis sel kanker ganas (False Negative).
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN Bab I terdiri dari latar belakang, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA Bab tinjauan pustaka ini meliputi landasan teori yang berisi tentang pembahasan teori yang digunakan dalam penelitian.
BAB III METODE PENELITIAN Bab ini terdiri dari analisis jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alur.
BAB IV HASIL DAN PEMBAHASAN Bab ini merupakan tahapan pencapaian hasil yang diperoleh dari analisis data yang dilakukan serta penjelasan dari hasil tersebut di bagian pembahasan.
BAB V KESIMPULAN DAN SARAN Bab ini merupakan bagian penutup dalam laporan ini berupa penarikan kesimpulan mengenai hasil analisis dari penelitian serta penyampaian saran oleh penulis.
DAFTAR PUSTAKA
LAMPIRAN
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).
K-Nearest Neighbor (K-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 K-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 k, 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). Daftar Pustaka
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 80% dan 20%.
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
# 2. MEMUAT DAN EKSPLORASI DATA
data(BreastCancer, package = "mlbench")
str(BreastCancer) # Struktur variabel## '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 adalah Wisconsin Breast Cancer Database yang terdiri dari 699 observasi dan 11 variabel, yaitu satu variabel identitas, sembilan variabel prediktor, dan satu variabel target (Class). Variabel target terdiri atas dua kategori, yaitu benign (tumor jinak) sebanyak 458 observasi (65,52%) dan malignant (tumor ganas) sebanyak 241 observasi (34,48%). Hal ini menunjukkan bahwa jumlah data tumor jinak lebih banyak dibandingkan tumor ganas.
Berdasarkan hasil statistik deskriptif, variabel prediktor memiliki kategori nilai 1 sampai 10, yang menggambarkan karakteristik sel tumor. Distribusi kelas menunjukkan bahwa terdapat 458 observasi (65,52%) tumor jinak (benign) dan 241 observasi (34,48%) tumor ganas (malignant). Selain itu, ditemukan 16 nilai hilang pada variabel Bare.nuclei. Informasi tersebut digunakan sebagai dasar untuk melakukan prapemrosesan sebelum data digunakan dalam pemodelan K-NN.
# 3. 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
# 4. MEMBAGI DATA LATIH DAN DATA UJI
set.seed(12310)
# Pembagian 80% data latih dan 20% data uji
train_indices <- createDataPartition(
bc_data$Class,
p = 0.80,
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
# 5. 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: 548 baris, 9 fitur
## Dimensi Data Uji: 135 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.3836 Mean :0.2382 Mean :0.2482 Mean :0.2062
## 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.2470 Mean :0.2833 Mean :0.2711 Mean :0.2119
## 3rd Qu.:0.3333 3rd Qu.:0.5556 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.07137
## 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.3778 Mean :0.2420 Mean :0.2379 Mean :0.1918
## 3rd Qu.:0.5556 3rd Qu.:0.4444 3rd Qu.:0.4444 3rd Qu.:0.2222
## 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.2535 Mean :0.2807 Mean :0.2741 Mean :0.1909
## 3rd Qu.:0.3333 3rd Qu.:0.6111 3rd Qu.:0.3333 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.04938
## 3rd Qu.:0.00000
## Max. :1.00000
Pada tahap prapemrosesan, variabel Id dihapus karena hanya merupakan identitas observasi. Selanjutnya, variabel prediktor dikonversi menjadi numerik, sedangkan variabel Class diubah menjadi faktor. Observasi yang memiliki nilai hilang dihapus sehingga dari 699 observasi awal diperoleh 683 observasi, terdiri atas 444 data benign dan 239 data malignant.
Setelah data dibersihkan, dilakukan pembagian data menggunakan metode stratified sampling dengan proporsi 80% data latih dan 20% data uji. Hasil pembagian menghasilkan 548 observasi data latih dan 135 observasi data uji. Selanjutnya, dilakukan normalisasi menggunakan metode Min-Max agar seluruh variabel prediktor berada pada rentang nilai 0 hingga 1. Normalisasi ini bertujuan menyamakan skala antarvariabel sehingga tidak ada variabel dengan rentang nilai lebih besar yang mendominasi perhitungan jarak pada metode K-NN.
# 6. 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] benign malignant benign benign benign benign malignant
## [8] benign malignant benign
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 5
## [1] benign malignant benign benign benign benign malignant
## [8] benign malignant benign
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 7
## [1] benign malignant benign benign benign benign malignant
## [8] benign malignant benign
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 9
## [1] benign malignant benign benign benign benign malignant
## [8] benign malignant benign
## Levels: benign malignant
##
## Hasil Prediksi K-NN dengan k = 11
## [1] benign malignant benign benign benign benign malignant
## [8] benign malignant benign
## Levels: benign malignant
Pembentukan model klasifikasi dilakukan menggunakan metode K-Nearest Neighbor dengan menguji lima variasi jumlah tetangga terdekat (k), yaitu 3, 5, 7, 9, dan 11. Proses klasifikasi dilakukan dengan menghitung jarak antara data uji dan data latih, kemudian menentukan kelas berdasarkan mayoritas kategori dari tetangga terdekat.
Berdasarkan hasil prediksi, kelima variasi nilai k menghasilkan pola klasifikasi yang sama. Hal ini menunjukkan bahwa perubahan jumlah tetangga terdekat pada rentang nilai yang diuji belum memberikan perubahan terhadap hasil prediksi kelas pada data uji. Selanjutnya, hasil prediksi dari setiap nilai k digunakan untuk mengevaluasi kemampuan model dalam mengklasifikasikan tumor jinak dan tumor ganas.
# 7. 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 86 1
## malignant 2 46
##
## Accuracy : 0.9778
## 95% CI : (0.9364, 0.9954)
## No Information Rate : 0.6519
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9513
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9787
## Specificity : 0.9773
## Pos Pred Value : 0.9583
## Neg Pred Value : 0.9885
## Prevalence : 0.3481
## Detection Rate : 0.3407
## Detection Prevalence : 0.3556
## Balanced Accuracy : 0.9780
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 5
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 86 1
## malignant 2 46
##
## Accuracy : 0.9778
## 95% CI : (0.9364, 0.9954)
## No Information Rate : 0.6519
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9513
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9787
## Specificity : 0.9773
## Pos Pred Value : 0.9583
## Neg Pred Value : 0.9885
## Prevalence : 0.3481
## Detection Rate : 0.3407
## Detection Prevalence : 0.3556
## Balanced Accuracy : 0.9780
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 7
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 86 1
## malignant 2 46
##
## Accuracy : 0.9778
## 95% CI : (0.9364, 0.9954)
## No Information Rate : 0.6519
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9513
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9787
## Specificity : 0.9773
## Pos Pred Value : 0.9583
## Neg Pred Value : 0.9885
## Prevalence : 0.3481
## Detection Rate : 0.3407
## Detection Prevalence : 0.3556
## Balanced Accuracy : 0.9780
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 9
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 86 1
## malignant 2 46
##
## Accuracy : 0.9778
## 95% CI : (0.9364, 0.9954)
## No Information Rate : 0.6519
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9513
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9787
## Specificity : 0.9773
## Pos Pred Value : 0.9583
## Neg Pred Value : 0.9885
## Prevalence : 0.3481
## Detection Rate : 0.3407
## Detection Prevalence : 0.3556
## Balanced Accuracy : 0.9780
##
## 'Positive' Class : malignant
##
##
## ====================================
## CONFUSION MATRIX UNTUK k = 11
## ====================================
## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 86 1
## malignant 2 46
##
## Accuracy : 0.9778
## 95% CI : (0.9364, 0.9954)
## No Information Rate : 0.6519
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9513
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9787
## Specificity : 0.9773
## Pos Pred Value : 0.9583
## Neg Pred Value : 0.9885
## Prevalence : 0.3481
## Detection Rate : 0.3407
## Detection Prevalence : 0.3556
## Balanced Accuracy : 0.9780
##
## 'Positive' Class : malignant
##
##
## TABEL PERBANDINGAN HASIL EVALUASI
## k Accuracy Sensitivity Specificity False_Negative
## 1 3 0.9777778 0.9787234 0.9772727 1
## 2 5 0.9777778 0.9787234 0.9772727 1
## 3 7 0.9777778 0.9787234 0.9772727 1
## 4 9 0.9777778 0.9787234 0.9772727 1
## 5 11 0.9777778 0.9787234 0.9772727 1
Evaluasi performa model dilakukan menggunakan confusion matrix dengan menetapkan kelas malignant sebagai kelas positif. Berdasarkan hasil evaluasi, untuk setiap nilai k diperoleh 86 data tumor jinak yang diklasifikasikan dengan benar dan 46 data tumor ganas yang diklasifikasikan dengan benar. Selain itu, terdapat dua data tumor jinak yang diprediksi sebagai tumor ganas dan satu data tumor ganas yang diprediksi sebagai tumor jinak.
Hasil evaluasi menunjukkan nilai akurasi sebesar 97,78%, sensitivitas sebesar 97,87%, dan spesifisitas sebesar 97,73%. Nilai akurasi menunjukkan bahwa model mampu mengklasifikasikan sebagian besar data uji dengan benar. Sensitivitas yang tinggi menunjukkan kemampuan model dalam mengenali tumor ganas secara tepat, sedangkan spesifisitas menunjukkan kemampuan model dalam mengenali tumor jinak. Meskipun demikian, masih terdapat satu kasus false negative, yaitu tumor ganas yang salah diklasifikasikan sebagai tumor jinak.
# 8. 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.9777778 0.9787234 0.9772727 1
Berdasarkan hasil pengurutan, diperoleh nilai k optimal sebesar 3. Pada nilai tersebut, model menghasilkan akurasi sebesar 97,78%, sensitivitas sebesar 97,87%, spesifisitas sebesar 97,73%, dan jumlah false negative sebanyak 1 kasus. Namun, seluruh variasi nilai k memberikan hasil evaluasi yang identik. Dengan demikian, nilai k = 3 dipilih sebagai nilai optimal berdasarkan urutan kriteria yang digunakan, bukan karena memiliki performa numerik yang lebih tinggi dibandingkan nilai k lainnya.
# 9. 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"
)Berdasarkan plot perbandingan performa klasifikasi K-NN, terlihat bahwa nilai accuracy, sensitivity, dan specificity cenderung konstan pada seluruh variasi nilai k yang diuji. Nilai akurasi berada pada 97,78%, sensitivitas 97,87%, dan spesifisitas 97,73%. Ketiga garis pada plot terlihat hampir berhimpitan karena memiliki nilai yang sangat berdekatan. Hal ini menunjukkan bahwa perubahan jumlah tetangga terdekat dari 3 hingga 11 tidak memberikan perubahan terhadap performa klasifikasi. Dengan demikian, model K-NN menunjukkan hasil evaluasi yang stabil pada seluruh variasi nilai k yang digunakan.
# 10. 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 plot perbandingan jumlah false negative, terlihat bahwa seluruh variasi nilai k menghasilkan jumlah kesalahan yang sama, yaitu sebanyak 1 kasus. False negative merupakan kondisi ketika data tumor ganas (malignant) salah diklasifikasikan sebagai tumor jinak (benign). Hasil tersebut menunjukkan bahwa perubahan jumlah tetangga terdekat belum mampu mengurangi kesalahan klasifikasi pada kelas tumor ganas. Kondisi ini perlu diperhatikan karena kesalahan dalam mengidentifikasi tumor ganas dapat menyebabkan kasus tersebut tidak terdeteksi oleh model. Oleh karena itu, selain mempertimbangkan akurasi, sensitivitas dan jumlah false negative juga menjadi aspek penting dalam mengevaluasi performa model klasifikasi ini.
Berdasarkan hasil dapat disimpulkan bahwa analisis klasifikasi menggunakan metode K-Nearest Neighbor (K-NN) pada Wisconsin Breast Cancer Database, dapat disimpulkan bahwa metode K-NN mampu mengklasifikasikan tumor jinak (benign) dan tumor ganas (malignant) dengan performa yang sangat baik. Pengujian menggunakan lima variasi nilai k, yaitu 3, 5, 7, 9, dan 11, menghasilkan nilai evaluasi yang sama pada setiap variasi. Nilai k optimal yang dipilih adalah 3 dengan akurasi sebesar 97,78%, sensitivitas 97,87%, dan spesifisitas 97,73%. Selain itu, diperoleh satu kasus false negative, yaitu tumor ganas yang diklasifikasikan sebagai tumor jinak. Hasil ini menunjukkan bahwa model K-NN memiliki performa klasifikasi yang stabil dan tingkat ketepatan yang tinggi, meskipun masih terdapat kesalahan klasifikasi yang perlu diperhatikan.
Allorerung, P. P., Erna, A., Bagussahrir, M., & Alam, S. (2024). Analisis performa normalisasi data untuk klasifikasi K-Nearest Neighbor pada dataset penyakit. JISKA (Jurnal Informatika Sunan Kalijaga), 9(3), 178–191.
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.
Gulo, E. S., Christnatalis, Gulo, Y. R., & Marbun, S. F. (2022). Perbandingan efektivitas algoritma Decision Tree, Naïve Bayes, K-Nearest Neighbor dan Support Vector Machine dalam melakukan klasifikasi. Jurnal Teknologi dan Ilmu Komputer Prima, 5(2), 54–59.
Triase, Sriani, & Khairuna. (2024). Tinjauan sistematis mengenai paradigma supervised learning dan unsupervised learning. Jurnal Ilmu Komputer dan Informatika, 4(1), 61–72.