Machine learning merupakan cabang dari artificial intelligence yang memungkinkan komputer mempelajari pola dari data tanpa diprogram secara eksplisit untuk setiap aturan keputusan. Salah satu pendekatan yang paling banyak digunakan adalah supervised learning, yaitu proses pembelajaran model menggunakan data yang sudah memiliki label atau kelas yang diketahui. Melalui data tersebut, model mempelajari hubungan antara variabel prediktor dan variabel respons sehingga mampu memprediksi kelas pada observasi baru. Dalam konteks ini, algoritma klasifikasi berperan penting karena menjadi dasar dalam mengelompokkan data ke dalam kategori tertentu secara akurat dan konsisten (Farhan, Puspasari, & Gasim, 2025).
\(k\)-Nearest Neighbors (\(k\)-NN) merupakan salah satu algoritma klasifikasi yang bersifat nonparametrik, artinya algoritma ini tidak mengasumsikan bentuk distribusi tertentu pada data. Prinsip dasarnya adalah menentukan kelas suatu observasi baru berdasarkan kedekatan jaraknya dengan \(k\) observasi terdekat pada data training (Daulay, 2024). Kedekatan tersebut diukur menggunakan distance metric, lalu kelas prediksi ditentukan melalui majority voting dari nearest neighbors. Karakteristiknya yang sederhana, mudah dipahami, dan tidak memerlukan proses pembentukan model yang rumit menjadikan \(k\)-NN sering digunakan sebagai metode dasar dalam klasifikasi (Kelilauw dkk., 2025).
Kinerja \(k\)-NN sangat bergantung pada beberapa aspek penting dalam penerapannya. Karena perhitungan didasarkan pada jarak, perbedaan skala antarfitur dapat membuat fitur berskala besar mendominasi hasil perhitungan sehingga feature scaling menjadi tahap yang perlu diperhatikan. Pemilihan nilai \(k\) yang kurang tepat juga dapat membuat model terlalu sensitif terhadap noise atau justru terlalu umum dalam membedakan kelas (Fransiska, 2026). Oleh sebab itu, evaluasi performa model diperlukan untuk memastikan hasil klasifikasi yang baik dan dapat dipertanggungjawabkan.
Berdasarkan latar belakang di atas, adapun rumusan masalah yang dapat disimpulkan sebagai berikut:
class dan caret?ggplot2?Adapun tujuan penelitian ini yaitu:
class dan caret.ggplot2.Adapun manfaat penelitian ini yaitu sebagai berikut:
Adapun batasan masalah pada penelitian ini yaitu lakukan pemodelan
klasifikasi terhadap data medis riil Wisconsin Breast Cancer Database
yang dimuat melalui package mlbench. Tujuan
pemodelan adalah mendeteksi secara akurat apakah tumor payudara
tergolong jinak (benign) atau ganas (malignant).
Machine learning merupakan cabang kecerdasan buatan yang berfokus pada pengembangan algoritma dan model yang memungkinkan komputer untuk belajar dari data, mengenali pola, serta membuat prediksi atau keputusan tanpa pemrograman langsung (Farhan, Puspasari, & Gasim, 2025). Secara umum, algoritma machine learning dikategorikan ke dalam supervised learning, unsupervised learning, dan reinforcement learning, dengan supervised learning sebagai pendekatan utama untuk tugas klasifikasi dan regresi karena menggunakan data berlabel. Dalam konteks supervised learning, tujuan utamanya adalah memodelkan fungsi yang mendasari hubungan statistik antara variabel fitur dan variabel target, seperti yang diformulasikan pada Persamaan (2.1) (Rashidi dkk., 2023).
\[ Y = f(X) + \varepsilon \tag{2.1} \]
Pada Persamaan (2.1), \(Y\) menyatakan variabel target, \(X = (x_1, \ldots, x_p)\) merupakan vektor fitur berdimensi \(p\), \(f\) adalah fungsi matematis yang memetakan \(X\) ke \(Y\), dan \(\varepsilon\) adalah galat acak yang independen terhadap \(X\). Fungsi \(f\) yang sebenarnya umumnya tidak diketahui dan hanya dapat diestimasi atau didekati dari data sampel. Proses estimasi \(f\) dilakukan dengan meminimalkan suatu fungsi kerugian, seperti quadratic loss untuk regresi dan cross-entropy loss untuk klasifikasi (Rashidi dkk., 2023).
Pendekatan supervised machine learning menekankan pada kemampuan model untuk memprediksi observasi baru yang belum pernah dilihat, sehingga evaluasi performa harus dilakukan pada data di luar data pelatihan. Model prediktif dibedakan berdasarkan tingkat fleksibilitas dan interpretabilitasnya, di mana model yang lebih fleksibel mampu menangkap hubungan nonlinier dan interaksi antarfitur, tetapi umumnya lebih sulit diinterpretasikan (Pargent, Schoedel, & Stachl, 2023). Keseimbangan antara bias dan varians menjadi pertimbangan utama dalam memilih tingkat fleksibilitas model agar diperoleh performa prediksi yang optimal (Rashidi dkk., 2023).
\(k\)-Nearest Neighbors (\(k\)-NN) merupakan salah satu algoritma klasifikasi yang paling banyak digunakan dalam metode machine learning karena sifatnya yang sederhana dan mudah diimplementasikan. \(k\)-NN juga lazim dijadikan sebagai pengklasifikasi dasar dalam berbagai masalah klasifikasi pola (Firdaus & Sirodj, 2022). Algoritma ini tergolong dalam kategori supervised learning yang beroperasi dengan memanfaatkan data yang telah dilabeli untuk melakukan prediksi terhadap data baru (Ardiyansyah & Oktafiani, 2024). Proses klasifikasi dalam \(k\)-NN dilakukan dengan mengidentifikasi sejumlah tetangga terdekat dari suatu titik data uji berdasarkan ukuran jarak tertentu, kemudian menentukan kelas berdasarkan mayoritas kelas dari tetangga-tetangga tersebut (Yusran dkk., 2025).
\(k\)-NN merupakan metode nonparametrik, yang berarti model ini tidak mengasumsikan bentuk distribusi tertentu terhadap data yang dianalisis (Daulay, 2024). Karakteristik nonparametrik tersebut memberikan keleluasaan bagi model untuk membentuk batas keputusan yang sangat fleksibel dan nonlinier (Henderi, Wahyuningsih, & Rahwanto, 2021). \(k\)-NN juga termasuk dalam kelompok instance-based learning atau lazy learning, di mana model tidak membentuk fungsi perantara pada tahap pelatihan, melainkan menyimpan seluruh data pelatihan dan menunda komputasi hingga terdapat data baru yang hendak diprediksi. Sifat lazy learning ini menjadikan \(k\)-NN tidak memerlukan proses pelatihan yang berat, tetapi konsekuensinya seluruh data pelatihan harus tersimpan dalam memori (Fransiska, 2026).
Prinsip kerja \(k\)-NN dapat diuraikan menjadi tiga tahapan utama, yaitu perhitungan jarak, pemilihan \(k\) tetangga terdekat, dan penentuan kelas melalui majority voting. Pada tahap pertama, algoritma menghitung jarak antara data uji dengan seluruh data latih menggunakan metrik jarak yang telah ditentukan. Tahap kedua, algoritma mengidentifikasi sejumlah \(k\) data training yang memiliki jarak terdekat dengan data uji tersebut. Tahap ketiga, kelas dari data testing ditentukan berdasarkan kelas yang paling banyak muncul di antara \(k\) tetangga terdekatnya (Yusran dkk., 2025).
Secara formal, estimasi probabilitas posterior bahwa suatu data testing \(x_0\) tergolong ke dalam kelas \(j\) diformulasikan sebagai proporsi kelas \(j\) di antara tetangga terdekatnya (Fransiska, 2026):
\[ \hat{P}(Y = j \mid X = x_0) = \frac{1}{k} \sum_{i \in N_k(x_0)} I(y_i = j) \tag{2.2} \]
dengan \(N_k(x_0)\) merupakan himpunan yang memuat \(k\) buah tetangga terdekat dari \(x_0\), \(y_i\) adalah label kelas dari data ke-\(i\), dan \(I(\cdot)\) merupakan fungsi indikator yang bernilai 1 jika \(y_i = j\) dan bernilai 0 jika \(y_i \neq j\). Keputusan klasifikasi final \(\hat{G}(x_0)\) diambil berdasarkan prinsip majority voting sebagai berikut:
\[ \hat{G}(x_0) = \underset{j \in \{1, 2, \ldots, C\}}{\arg\max} \; \hat{P}(Y = j \mid X = x_0) \tag{2.3} \]
dengan \(C\) adalah jumlah kelas yang ada dalam klasifikasi. Pada implementasi \(k\)-NN untuk klasifikasi biner, nilai \(k\) umumnya dipilih dalam bilangan ganjil untuk menghindari hasil voting yang seimbang (Yusran dkk., 2025).
Metrik jarak memegang peranan penting dalam \(k\)-NN karena menentukan bagaimana kemiripan antara dua titik data diukur. Beberapa metrik jarak yang lazim digunakan dalam \(k\)-NN diuraikan sebagai berikut (Firdaus & Sirodj, 2022; Kelilauw dkk., 2025):
Jarak Euclidean (\(L_2\) Norm)
Jarak Euclidean merupakan metrik geometris paling umum untuk variabel bertipe numerik kontinu. Formula jarak Euclidean antara dua titik \(x\) dan \(y\) dalam ruang berdimensi \(p\) adalah:
\[ d(x, y) = \sqrt{\sum_{i=1}^{p} (x_i - y_i)^2} \tag{2.4} \]
dengan \(x_i\) dan \(y_i\) merupakan koordinat titik \(x\) dan \(y\) pada dimensi ke-\(i\), serta \(p\) adalah jumlah fitur.
Jarak Manhattan (\(L_1\) Norm atau City Block Distance)
Jarak Manhattan didefinisikan sebagai jumlah dari nilai absolut perbedaan koordinat antara dua titik pada setiap dimensi. Formula jarak Manhattan adalah:
\[ d(x, y) = \sum_{i=1}^{p} |x_i - y_i| \tag{2.5} \]
Metrik ini dikenal lebih tangguh terhadap keberadaan pencilan (outliers) dibandingkan jarak Euclidean.
Jarak Minkowski (\(L_m\) Norm)
Jarak Minkowski merupakan generalisasi dari keluarga metrik \(L_m\), di mana \(m = 1\) menghasilkan jarak Manhattan dan \(m = 2\) menghasilkan jarak Euclidean. Formula jarak Minkowski adalah:
\[ d(x, y) = \left( \sum_{i=1}^{p} |x_i - y_i|^m \right)^{1/m}, \quad m \geq 1 \tag{2.6} \]
Jarak Mahalanobis
Jarak Mahalanobis merupakan metrik jarak yang menginkorporasikan matriks kovarians \(\Sigma\) sehingga mampu mengoreksi korelasi antarvariabel serta mengatasi perbedaan skala. Formula jarak Mahalanobis adalah:
\[ d(x, y) = \sqrt{(x - y)^{\top} \Sigma^{-1} (x - y)} \tag{2.7} \]
dengan \(\Sigma^{-1}\) merupakan invers dari matriks kovarians.
Jarak Hamming
Jarak Hamming merupakan ukuran ketidaksamaan yang dikhususkan untuk data bertipe biner atau kategorik kualitatif. Formula jarak Hamming adalah:
\[ d(x, y) = \frac{1}{p} \sum_{i=1}^{p} I(x_i \neq y_i) \tag{2.8} \]
dengan \(I(\cdot)\) merupakan fungsi indikator yang bernilai 1 jika \(x_i \neq y_i\) dan bernilai 0 jika sebaliknya.
\(k\)-NN memiliki beberapa kelebihan yang membuatnya tetap relevan dalam berbagai aplikasi klasifikasi. Algoritma ini efektif terhadap data yang mengandung noise dan efektif ketika data training berukuran besar (Firdaus & Sirodj, 2022). \(k\)-NN juga tidak memerlukan asumsi mengenai distribusi data yang mendasarinya, sehingga dapat menjadi pilihan yang baik untuk studi klasifikasi yang melibatkan sedikit atau tanpa pengetahuan sebelumnya tentang distribusi data (Daulay, 2024). Kesederhanaan konsep dan kemudahan implementasi menjadi keunggulan tersendiri yang membuat \(k\)-NN banyak digunakan (Kelilauw dkk., 2025).
Keterbatasan utama \(k\)-NN terletak pada sensitivitasnya terhadap pemilihan parameter, terutama jumlah tetangga (\(k\)) dan metrik jarak yang digunakan. K-NN juga sangat sensitif terhadap perbedaan skala fitur karena perhitungan jarak, terutama Euclidean, sangat bergantung pada skala data (Pratama & Salam, 2025). Keterbatasan lain adalah sifatnya sebagai lazy learning yang menyimpan seluruh data pelatihan, sehingga dapat menjadi mahal secara komputasi terutama untuk dataset berukuran besar. K-NN juga dapat mengalami kesulitan dalam menangani data berdimensi tinggi (Fransiska, 2026).
Feature scaling merupakan tahap preprocessing data yang bertujuan untuk menyelaraskan skala fitur sehingga setiap fitur memiliki kontribusi yang seimbang dalam perhitungan jarak. Transformasi ini penting karena metrik jarak menghitung selisih numerik secara langsung, sehingga variabel dengan rentang nilai skala yang besar akan mendominasi perhitungan jarak. Tanpa penskalaan yang tepat, fitur dengan nilai numerik besar dapat membiaskan struktur ketetanggaan dan menurunkan kinerja klasifikasi. Oleh karena itu, feature scaling menjadi langkah wajib dalam pipeline \(k\)-NN untuk memastikan bahwa tidak ada satu fitur pun yang secara tidak proporsional mempengaruhi perhitungan jarak (Vikri, Pajri, & Liana, 2026).
Normalisasi Min-Max merupakan metode normalisasi dengan melakukan transformasi linier terhadap data asli sehingga menghasilkan keseimbangan perbandingan nilai antara data sebelum dan sesudah proses. Metode ini mentransformasikan nilai variabel ke dalam interval \([0, 1]\). Formula normalisasi Min-Max adalah (Fransiska, 2026):
\[ x_{scaled} = \frac{x - x_{min}}{x_{max} - x_{min}} \tag{2.9} \]
dengan \(x\) merupakan nilai asli variabel, \(x_{min}\) adalah nilai minimum variabel dalam dataset, dan \(x_{max}\) adalah nilai maksimum variabel dalam dataset. Normalisasi Min-Max efektif digunakan ketika distribusi fitur terbatas dan ketika mempertahankan hubungan proporsional antarnilai menjadi penting (Henderi, Wahyuningsih, & Rahwanto, 2021).
Standardisasi \(z\)-score merupakan metode normalisasi yang didasarkan pada nilai rata-rata (mean) dan simpangan baku (standard deviation) dari data. Metode ini mentransformasikan data agar memiliki rata-rata \(\mu = 0\) dan simpangan baku \(\sigma = 1\). Formulasi standardisasi \(z\)-score adalah (Vikri, Pajri, & Liana, 2026):
\[ z = \frac{x - \mu}{\sigma} \tag{2.10} \]
dengan \(x\) adalah nilai asli, \(\mu\) adalah rata-rata populasi, dan \(\sigma\) adalah simpangan baku populasi. Standardisasi \(z\)-score sangat berguna ketika nilai minimum dan maksimum aktual dari data tidak diketahui. Metode ini juga mampu mengurangi pengaruh fitur dengan varians besar dan sesuai untuk dataset yang atributnya mengikuti distribusi statistik yang berbeda (Vikri, Pajri, & Liana, 2026).
Confusion matrix merupakan tabel yang menunjukkan jumlah hasil pengujian yang diklasifikasikan dengan benar dan jumlah yang salah. Matriks ini menjadi dasar untuk menghitung berbagai metrik evaluasi kinerja model klasifikasi. Komponen utama confusion matrix untuk klasifikasi biner terdiri atas empat elemen sebagai berikut (Sathyanarayanan & Tantri, 2024):
Accuracy merupakan proporsi prediksi yang benar dari keseluruhan prediksi. Metrik ini mengukur sejauh mana model dapat melakukan klasifikasi yang benar dibandingkan dengan total klasifikasi. Formula accuracy adalah (Pratama & Salam, 2025):
\[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \tag{2.11} \]
Accuracy sangat berguna ketika kelas dalam dataset seimbang, tetapi memiliki keterbatasan ketika berhadapan dengan dataset yang tidak seimbang. Pada dataset yang tidak seimbang, model dapat mencapai akurasi tinggi dengan hanya memprediksi kelas mayoritas, sementara kinerjanya pada kelas minoritas mungkin buruk (Sathyanarayanan & Tantri, 2024).
Sensitivity, yang juga dikenal sebagai recall atau true positive rate (TPR), merupakan proporsi sampel positif yang diklasifikasikan dengan benar. Metrik ini mengukur kemampuan model dalam menemukan semua kasus positif yang sebenarnya. Formula sensitivity adalah (Sathyanarayanan & Tantri, 2024):
\[ Sensitivity = \frac{TP}{TP + FN} \tag{2.12} \]
Sensitivity sangat penting ketika kesalahan negatif (Kesalahan Tipe II) perlu diminimalkan, misalnya dalam konteks diagnosis medis untuk menghindari terlewatnya kasus positif yang kritis.
Specificity merupakan proporsi sampel negatif yang diklasifikasikan dengan benar. Metrik ini mengukur kemampuan model dalam mengidentifikasi data negatif dengan benar. Formula specificity adalah (Pratama & Salam, 2025):
\[ Specificity = \frac{TN}{TN + FP} \tag{2.13} \]
Specificity sangat penting ketika kesalahan positif (Kesalahan Tipe I) perlu diminimalkan, misalnya untuk menghindari intervensi atau perawatan yang tidak perlu pada individu yang sehat.
Positive Predictive Value (PPV), yang juga dikenal sebagai precision, merupakan proporsi sampel positif yang benar dari keseluruhan sampel yang diprediksi positif. Metrik ini mengukur akurasi klasifikasi positif yang dilakukan oleh model. Formula PPV adalah (Sathyanarayanan & Tantri, 2024):
\[ PPV = \frac{TP}{TP + FP} \tag{2.14} \]
Nilai PPV yang tinggi menunjukkan bahwa model memiliki tingkat kesalahan positif yang rendah, yang berarti model membuat prediksi positif yang akurat. Sebaliknya, nilai PPV yang rendah mengindikasikan banyaknya kesalahan positif, yang berarti model membuat lebih banyak prediksi positif yang salah.
Hyperparameter merupakan parameter yang nilainya ditetapkan sebelum proses pembelajaran dimulai dan tidak disesuaikan selama proses pelatihan. Berbeda dengan parameter model yang diturunkan dari data melalui pelatihan, hyperparameter mengatur bagaimana model terstruktur. Kinerja suatu model machine learning dapat berubah secara drastis tergantung pada pilihan dan nilai hyperparameter-nya. Oleh karena itu, penentuan hyperparameter harus dilakukan dengan cermat untuk memperoleh performa model yang optimal (Elgeldawi dkk., 2021).
Pada algoritma \(k\)-NN, jumlah tetangga terdekat (\(k\)) merupakan hyperparameter utama yang harus ditetapkan sebelum algoritma dijalankan. Nilai \(k\) menentukan jumlah tetangga terdekat yang akan dipertimbangkan dalam memprediksi label suatu observasi (Ardiyansyah & Oktafiani, 2024). Selain \(k\), metrik jarak dan jenis pembobotan juga merupakan hyperparameter yang mempengaruhi kinerja K-NN. Pemilihan nilai \(k\) yang tepat menjadi krusial karena nilai yang terlalu kecil dapat menyebabkan model terlalu sensitif terhadap data training, sedangkan nilai yang terlalu besar dapat menyebabkan model menjadi terlalu umum (Yusran dkk., 2025).
Pemilihan nilai \(k\) memegang peranan penting dalam mengendalikan keseimbangan antara bias dan varians. Nilai \(k\) yang kecil menghasilkan bias yang sangat rendah tetapi varians yang sangat tinggi, sehingga model menjadi sangat sensitif terhadap noise dan rentan mengalami overfitting. Sebaliknya, nilai \(k\) yang besar menghasilkan varians yang rendah tetapi bias yang tinggi, dan jika \(k\) terlalu besar, model berpotensi mengalami underfitting karena keputusan lokal akan terdistorsi oleh prevalensi kelas mayoritas secara global (Fransiska, 2026). Secara umum, nilai \(k\) yang ideal adalah bilangan ganjil, misalnya \(k = 1, 3, 5\), dan seterusnya (Firdaus & Sirodj, 2022).
Cross-validation merupakan teknik yang digunakan untuk mengevaluasi kemampuan generalisasi suatu model machine learning. Dalam \(k\)-fold cross-validation, dataset dibagi menjadi \(k\) lipatan (fold) yang berukuran kurang lebih sama, kemudian model dilatih pada \(k-1\) lipatan dan diuji pada lipatan yang tersisa. Proses ini diulang sebanyak \(k\) kali sehingga setiap lipatan berperan sebagai himpunan validasi tepat satu kali (Elgeldawi dkk., 2021). Rata-rata skor akurasi dari seluruh lipatan digunakan sebagai estimasi performa model. Dalam konteks penentuan nilai \(k\) optimal pada \(k\)-NN, cross-validation digunakan untuk mengevaluasi performa model pada berbagai nilai \(k\) dan memilih nilai yang memberikan akurasi validasi tertinggi (Pratama & Salam, 2025).
Kurva performa model terhadap variasi nilai \(k\) merupakan visualisasi yang menggambarkan hubungan antara nilai hyperparameter \(k\) dengan akurasi klasifikasi. Kurva ini digunakan untuk mengidentifikasi nilai \(k\) yang memberikan performa optimal dan untuk memahami perilaku model pada berbagai nilai \(k\) (Fransiska, 2026). Pada nilai \(k\) yang kecil, akurasi pelatihan cenderung sangat tinggi tetapi akurasi pengujian lebih rendah, yang mengindikasikan overfitting. Seiring bertambahnya nilai \(k\), akurasi pengujian meningkat dan mencapai nilai yang lebih stabil, sementara akurasi pelatihan sedikit menurun. Pemilihan nilai \(k\) yang optimal berperan penting dalam menghindari overfitting atau underfitting (Kelilauw dkk., 2025).
Program R tersebut memanfaatkan beberapa library dan fungsi
umum untuk mendukung alur kerja machine learning \(k\)-NN. Library class
menyediakan fungsi inti knn() untuk klasifikasi,
caret menyediakan confusionMatrix() untuk
evaluasi performa, ggplot2 digunakan untuk visualisasi
grafik, dan mlbench untuk memuat dataset. Fungsi
umum bawaan R seperti str(), head(), dan
table() digunakan untuk eksplorasi data,
lapply() untuk menerapkan normalisasi pada beberapa kolom
sekaligus, sample() untuk pembagian data acak, serta
data.frame() dan seq_len() untuk menyusun dan
mengindeks data (Fransiska, 2026).
Jenis data yang digunakan dalam penelitian ini adalah data kategorik, yaitu data yang menunjukkan pengelompokan objek berdasarkan kategori tertentu. Data yang digunakan berasal dari hasil pemeriksaan klinis sel kanker payudara yang disajikan dalam bentuk kategori.
Sumber data yang digunakan dalam penelitian ini adalah data sekunder.
Data sekunder merupakan data yang telah dikumpulkan oleh pihak lain dan
dapat dimanfaatkan kembali untuk keperluan penelitian. Dataset
BreastCancer diperoleh dari package
mlbench pada perangkat lunak R. Dataset tersebut
terdiri atas 699 observasi.
Variabel merupakan karakteristik atau atribut yang dapat diukur
maupun diamati dalam suatu penelitian. Penelitian ini menggunakan
sepuluh variabel, yaitu Cl.thickness,
Cell.size, Cell.shape,
Marg.adhesion, Epith.c.size,
Bare.nuclei, Bl.cromatin,
Normal.nucleoli, Mitoses, dan
Class. Variabel Class berperan sebagai
variabel respons yang bertipe kategorik dengan dua kelas, yaitu
benign (jinak) dan malignant (ganas). Sembilan
variabel lainnya berperan sebagai variabel prediktor yang bertipe
kategorik dengan skala 1 sampai 10.
Berikut merupakan algoritma penelitian pada batasan masalah:
Pada batasan masalah diminta untuk melakukan pemodelan klasifikasi \(k\)-NN pada data Wisconsin Breast Cancer Database dengan pembagian data 80% data training dan 20% data testing. Bab ini memuat sintaks, output, dan pembahasan pada setiap tahapan analisis.
# Memanggil library
library(class)
library(caret)
library(ggplot2)
library(mlbench)
# Memuat dataset Wisconsin Breast Cancer
data(BreastCancer, package = "mlbench")
# Menampilkan struktur variabel
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
Pada batasan masalah diminta untuk memuat dataset Wisconsin Breast
Cancer Database melalui package mlbench dengan
perintah data(BreastCancer, package = "mlbench").
Package class digunakan untuk menjalankan
algoritma \(k\)-NN, caret
untuk evaluasi model melalui confusion matrix,
ggplot2 untuk visualisasi, dan mlbench untuk
menyediakan dataset. Pemanggilan seluruh library di
awal memastikan fungsi yang dibutuhkan tersedia sepanjang proses
analisis.
Hasil fungsi str menunjukkan bahwa dataset
terdiri atas 699 observasi dan 11 variabel, yaitu satu variabel
identitas pasien (Id), sembilan variabel prediktor hasil
pengamatan sel, dan satu variabel respons (Class).
Kesembilan prediktor bernilai pada skala 1 sampai 10, tetapi tersimpan
bertipe factor, sedangkan Id bertipe karakter.
Tipe data tersebut perlu diubah karena perhitungan jarak pada \(k\)-NN hanya dapat dilakukan pada data
numerik. Enam observasi teratas pada fungsi head didominasi
nilai rendah dengan kelas benign, sedangkan observasi keenam
bernilai tinggi pada hampir seluruh variabel dan termasuk kelas
malignant.
Distribusi kelas pada Tabel 4.1 menunjukkan 458 observasi benign (65,52%) dan 241 observasi malignant (34,48%). Kelas benign lebih dominan, tetapi ketimpangannya tidak ekstrem sehingga data masih layak dimodelkan tanpa penyeimbangan kelas. Proporsi ini juga menegaskan bahwa accuracy saja tidak cukup, sehingga sensitivity terhadap kelas malignant perlu diperhatikan.
Tabel 4.1 Distribusi kelas pada data awal
| Kelas | Frekuensi | Persentase |
|---|---|---|
| Benign | 458 | 65,52% |
| Malignant | 241 | 34,48% |
| Total | 699 | 100,00% |
## Id Cl.thickness Cell.size Cell.shape Marg.adhesion
## 0 0 0 0 0
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses
## 0 16 0 0 0
## Class
## 0
# Menghapus variabel Id karena hanya berupa identitas pasien
bc <- BreastCancer[, -1]
# Mengubah variabel prediktor (kolom 1 sampai 9) dari factor ke numerik
bc[, 1:9] <- lapply(bc[, 1:9], function(x) as.numeric(as.character(x)))
# Menghapus observasi yang memiliki missing value
bc <- na.omit(bc)
# Memastikan variabel kelas bertipe factor dengan level yang jelas
bc$Class <- factor(bc$Class, levels = c("benign", "malignant"))
# Memeriksa dimensi dan persebaran kelas setelah pembersihan
cat("Dimensi data setelah pembersihan:", nrow(bc), "baris,", ncol(bc), "kolom\n")## Dimensi data setelah pembersihan: 683 baris, 10 kolom
##
## benign malignant
## 444 239
Pada batasan masalah diminta untuk melakukan tahapan pra-pemrosesan
data sebelum pemodelan. Tahapan ini diperlukan karena \(k\)-NN menghitung jarak langsung dari nilai
fitur, sehingga data harus lengkap, bertipe numerik, dan bebas dari
variabel yang tidak informatif. Pemeriksaan missing value
menunjukkan terdapat 16 data kosong, seluruhnya berada pada variabel
Bare.nuclei.
Variabel Id dihapus karena hanya berfungsi sebagai
pengenal pasien dan tidak memuat informasi untuk membedakan tumor jinak
dan ganas. Sembilan variabel prediktor dikonversi dari factor
ke numerik melalui as.numeric(as.character(x)) agar nilai
aslinya pada skala 1 sampai 10 tetap terjaga. Konversi langsung dengan
as.numeric pada factor akan menghasilkan kode
level, bukan nilai pengamatan yang sebenarnya. Variabel
Class dipastikan bertipe factor dengan urutan
level benign lalu malignant agar konsisten pada tahap
evaluasi.
Observasi yang memuat missing value dihapus dengan
na.omit, sehingga 16 observasi (2,29% dari data awal)
tereliminasi dan tersisa 683 observasi. Penghapusan ini terdiri atas 14
observasi benign dan 2 observasi malignant,
sebagaimana tampak pada Tabel 4.2. Proporsi kelas setelah pembersihan
nyaris tidak berubah, yaitu 65,01% benign dan 34,99%
malignant, sehingga informasi yang hilang relatif kecil.
Tabel 4.2 Jumlah observasi sebelum dan sesudah penghapusan missing value
| Kelas | Sebelum | Sesudah | Persentase Sesudah |
|---|---|---|---|
| Benign | 458 | 444 | 65,01% |
| Malignant | 241 | 239 | 34,99% |
| Total | 699 | 683 | 100,00% |
# Mendefinisikan fungsi normalisasi Min-Max
min_max_norm <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}
# Menerapkan normalisasi pada 9 variabel prediktor (kolom 1 sampai 9)
bc_norm <- as.data.frame(lapply(bc[, 1:9], min_max_norm))
# Menggabungkan kembali label kelas
bc_norm$Class <- bc$ClassPada batasan masalah diminta tahapan pra-pemrosesan data, dan penskalaan fitur dilakukan dengan normalisasi Min-Max, yaitu \(x' = \frac{x - \min}{\max - \min}\). Metode ini mengubah setiap prediktor ke rentang 0 sampai 1 sehingga seluruh variabel memberi kontribusi yang setara pada perhitungan jarak. Penskalaan menjadi penting karena jarak Euclidean sensitif terhadap perbedaan skala, sehingga variabel dengan rentang besar akan mendominasi penentuan tetangga terdekat.
Fungsi min_max_norm didefinisikan sekali, lalu
diterapkan pada sembilan variabel prediktor melalui lapply.
Variabel Class tidak dinormalisasi karena bersifat
kategorik, sehingga label kelas digabungkan kembali ke data hasil
normalisasi. Transformasi ini bersifat linear sehingga urutan nilai dan
proporsi jarak relatif antarobservasi pada tiap variabel tetap
terjaga.
## 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.3825 Mean :0.2390 Mean :0.2461 Mean :0.2034
## 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.2483 Mean :0.2827 Mean :0.2717 Mean :0.2077
## 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 Class
## Min. :0.00000 benign :444
## 1st Qu.:0.00000 malignant:239
## Median :0.00000
## Mean :0.06702
## 3rd Qu.:0.00000
## Max. :1.00000
Pada batasan masalah diminta tahapan pra-pemrosesan data, sehingga
ringkasan statistik deskriptif ditampilkan untuk memeriksa hasil
normalisasi. Statistik deskriptif adalah ringkasan numerik yang
menggambarkan karakteristik data, seperti nilai minimum, kuartil
pertama, median, rata-rata, kuartil ketiga, dan maksimum. Untuk variabel
kategorik seperti Class, ringkasan berupa frekuensi tiap
kategori. Ringkasan ini dibutuhkan untuk memeriksa rentang nilai dan
mengenali kecenderungan sebaran data sebelum dimodelkan.
Tabel 4.3 memperlihatkan bahwa seluruh variabel bernilai minimum 0
dan maksimum 1, sehingga normalisasi berhasil diterapkan. Rata-rata
lebih besar daripada median pada kesembilan variabel, yang
mengindikasikan sebaran miring ke kanan karena sebagian besar pasien
bernilai rendah. Variabel Cell.size,
Cell.shape, Marg.adhesion,
Bare.nuclei, dan Normal.nucleoli memiliki
median 0, artinya lebih dari separuh observasi berada pada nilai
terendah.
Variabel Mitoses memiliki rata-rata terendah (0,0670)
dengan median dan kuartil ketiga sama dengan 0, sehingga hampir seluruh
observasi bernilai minimum. Variabel Cl.thickness memiliki
rata-rata tertinggi (0,3825) dengan median 0,3333, yang menunjukkan
sebarannya paling merata di antara variabel lainnya. Variabel respons
Class terdiri atas 444 observasi benign dan 239
observasi malignant.
Tabel 4.3 Statistik deskriptif variabel prediktor setelah normalisasi
| Variabel | Minimum | Kuartil 1 | Median | Rata-rata | Kuartil 3 | Maksimum |
|---|---|---|---|---|---|---|
Cl.thickness |
0,0000 | 0,1111 | 0,3333 | 0,3825 | 0,5556 | 1,0000 |
Cell.size |
0,0000 | 0,0000 | 0,0000 | 0,2390 | 0,4444 | 1,0000 |
Cell.shape |
0,0000 | 0,0000 | 0,0000 | 0,2461 | 0,4444 | 1,0000 |
Marg.adhesion |
0,0000 | 0,0000 | 0,0000 | 0,2034 | 0,3333 | 1,0000 |
Epith.c.size |
0,0000 | 0,1111 | 0,1111 | 0,2483 | 0,3333 | 1,0000 |
Bare.nuclei |
0,0000 | 0,0000 | 0,0000 | 0,2827 | 0,5556 | 1,0000 |
Bl.cromatin |
0,0000 | 0,1111 | 0,2222 | 0,2717 | 0,4444 | 1,0000 |
Normal.nucleoli |
0,0000 | 0,0000 | 0,0000 | 0,2077 | 0,3333 | 1,0000 |
Mitoses |
0,0000 | 0,0000 | 0,0000 | 0,0670 | 0,0000 | 1,0000 |
# Menetapkan seed sesuai NPM genap
set.seed(12346)
# Mengambil indeks sampel acak sebesar 80% dari total data
train_indices <- sample(
seq_len(nrow(bc_norm)),
size = 0.80 * nrow(bc_norm)
)
# Memisahkan matriks fitur prediktor
train_x <- bc_norm[train_indices, 1:9]
test_x <- bc_norm[-train_indices, 1:9]
# Memisahkan vektor label kelas
train_y <- bc_norm[train_indices, 10]
test_y <- bc_norm[-train_indices, 10]
cat("Dimensi Data Training:", nrow(train_x), "baris,", ncol(train_x), "fitur\n")## Dimensi Data Training: 546 baris, 9 fitur
## Dimensi Data Testing : 137 baris, 9 fitur
Pada batasan masalah diminta pembagian data menjadi 80% data
training dan 20% data testing dengan inisialisasi
set.seed(123XY) untuk NPM genap. NPM praktikan berakhiran
46, sehingga seed yang digunakan adalah 12346. Fungsi
set.seed menjamin pengambilan sampel acak dapat
direproduksi, sehingga pembagian data yang sama diperoleh setiap kali
kode dijalankan ulang.
Hasil pembagian menghasilkan 546 observasi data training dan
137 observasi data testing, masing-masing dengan 9 fitur. Data
training berperan sebagai acuan pencarian tetangga terdekat,
sedangkan data testing digunakan untuk menilai kemampuan
generalisasi model pada observasi baru. Fitur dan label kelas dipisahkan
ke dalam objek tersendiri karena fungsi knn menerima
matriks fitur dan vektor kelas secara terpisah.
# Menyiapkan nilai k yang diuji
k_values <- c(3, 5, 7, 9, 11)
# Menyiapkan wadah untuk menyimpan hasil evaluasi
hasil_evaluasi <- data.frame(
k = k_values,
Accuracy = numeric(length(k_values)),
Sensitivity = numeric(length(k_values)),
Specificity = numeric(length(k_values)),
False_Negative = numeric(length(k_values))
)
# Pengujian iteratif untuk setiap nilai k
# Kelas positif ditetapkan "malignant" agar Sensitivity mengukur
# kemampuan model mendeteksi tumor ganas
for (i in seq_along(k_values)) {
k_val <- k_values[i]
pred_uji <- knn(
train = train_x,
test = test_x,
cl = train_y,
k = k_val
)
cm <- confusionMatrix(
data = pred_uji,
reference = test_y,
positive = "malignant"
)
hasil_evaluasi$Accuracy[i] <- cm$overall["Accuracy"]
hasil_evaluasi$Sensitivity[i] <- cm$byClass["Sensitivity"]
hasil_evaluasi$Specificity[i] <- cm$byClass["Specificity"]
# False Negative: prediksi benign, kenyataannya malignant
hasil_evaluasi$False_Negative[i] <- cm$table["benign", "malignant"]
}
# Menampilkan tabel perbandingan metrik evaluasi
print(hasil_evaluasi)## k Accuracy Sensitivity Specificity False_Negative
## 1 3 0.9854015 0.9807692 0.9882353 1
## 2 5 0.9854015 0.9807692 0.9882353 1
## 3 7 0.9854015 0.9807692 0.9882353 1
## 4 9 0.9854015 0.9807692 0.9882353 1
## 5 11 0.9854015 0.9807692 0.9882353 1
# Menampilkan tabel dengan pembulatan 4 desimal
tabel_perbandingan <- hasil_evaluasi
tabel_perbandingan[, 2:4] <- round(tabel_perbandingan[, 2:4], 4)
print(tabel_perbandingan)## k Accuracy Sensitivity Specificity False_Negative
## 1 3 0.9854 0.9808 0.9882 1
## 2 5 0.9854 0.9808 0.9882 1
## 3 7 0.9854 0.9808 0.9882 1
## 4 9 0.9854 0.9808 0.9882 1
## 5 11 0.9854 0.9808 0.9882 1
Pada batasan masalah diminta pemodelan klasifikasi \(k\)-NN untuk nilai \(k \in \{3, 5, 7, 9, 11\}\). Setiap nilai
\(k\) dijalankan menggunakan fungsi
knn dari package class, lalu hasil
prediksi dibandingkan dengan label aktual data testing melalui
confusionMatrix. Kelas malignant ditetapkan
sebagai kelas positif sehingga sensitivity mengukur kemampuan
model mendeteksi tumor ganas. Jumlah false negative menunjukkan
tumor ganas yang keliru diprediksi sebagai jinak.
Tabel 4.4 menunjukkan bahwa kelima nilai \(k\) menghasilkan accuracy sebesar 98,54%, sensitivity sebesar 98,08%, specificity sebesar 98,82%, dan jumlah false negative sebanyak 1 observasi. Nilai yang identik tersebut menandakan bahwa prediksi kelas tidak berubah ketika jumlah tetangga ditambah dari 3 hingga 11. Kondisi ini wajar terjadi karena kelas benign dan malignant pada data ini terpisah dengan baik di ruang fitur yang telah dinormalisasi.
Ukuran data testing yang hanya 137 observasi membuat satu kesalahan prediksi setara dengan penurunan accuracy sekitar 0,73%. Hanya terdapat dua kesalahan prediksi dari 137 observasi pada setiap nilai \(k\). Perbedaan kecil antarnilai \(k\) sulit terdeteksi pada ukuran data testing sekecil ini.
Tabel 4.4 Perbandingan metrik evaluasi \(k\)-NN pada berbagai nilai \(k\)
| \(k\) | Accuracy | Sensitivity | Specificity | False Negative |
|---|---|---|---|---|
| 3 | 0,9854 | 0,9808 | 0,9882 | 1 |
| 5 | 0,9854 | 0,9808 | 0,9882 | 1 |
| 7 | 0,9854 | 0,9808 | 0,9882 | 1 |
| 9 | 0,9854 | 0,9808 | 0,9882 | 1 |
| 11 | 0,9854 | 0,9808 | 0,9882 | 1 |
# Prioritas: Sensitivity tertinggi (False Negative minimum),
# kemudian Accuracy tertinggi, kemudian Specificity tertinggi
urutan <- order(
-hasil_evaluasi$Sensitivity,
hasil_evaluasi$False_Negative,
-hasil_evaluasi$Accuracy,
-hasil_evaluasi$Specificity
)
k_optimal <- hasil_evaluasi$k[urutan[1]]
cat("Nilai k paling optimal:", k_optimal, "\n")## Nilai k paling optimal: 3
# Menampilkan matriks konfusi lengkap untuk k optimal
pred_optimal <- knn(
train = train_x,
test = test_x,
cl = train_y,
k = k_optimal
)
evaluasi_optimal <- confusionMatrix(
data = pred_optimal,
reference = test_y,
positive = "malignant"
)
print(evaluasi_optimal)## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 84 1
## malignant 1 51
##
## Accuracy : 0.9854
## 95% CI : (0.9483, 0.9982)
## No Information Rate : 0.6204
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.969
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.9808
## Specificity : 0.9882
## Pos Pred Value : 0.9808
## Neg Pred Value : 0.9882
## Prevalence : 0.3796
## Detection Rate : 0.3723
## Detection Prevalence : 0.3796
## Balanced Accuracy : 0.9845
##
## 'Positive' Class : malignant
##
Pada batasan masalah diminta untuk menyimpulkan nilai \(k\) paling optimal dengan mempertimbangkan pentingnya meminimalkan false negative pada diagnosis sel kanker ganas. Kriteria pemilihan disusun secara berurutan, yaitu sensitivity tertinggi (jumlah false negative terendah), accuracy tertinggi, lalu specificity tertinggi. Kelima nilai \(k\) memiliki performa yang sama pada seluruh kriteria, sehingga \(k = 3\) dipilih sebagai nilai optimal karena merupakan nilai terkecil di antara kandidat setara dan memerlukan komputasi paling sederhana.
Matriks konfusi pada Tabel 4.5 menunjukkan 84 observasi benign dan 51 observasi malignant terklasifikasi dengan benar, sedangkan masing-masing 1 observasi mengalami kesalahan klasifikasi. Sensitivity sebesar 98,08% berasal dari 51 dari 52 tumor ganas yang terdeteksi, sedangkan specificity sebesar 98,82% berasal dari 84 dari 85 tumor jinak yang dikenali. Nilai positive predictive value sebesar 98,08% dan negative predictive value sebesar 98,82% menunjukkan bahwa hasil prediksi kedua kelas sama-sama dapat diandalkan. Accuracy sebesar 98,54% dengan selang kepercayaan 95% antara 94,83% dan 99,82% jauh melampaui No Information Rate sebesar 62,04% (p-value < 2e-16).
Hanya satu pasien dengan tumor ganas yang diprediksi jinak, dan kesalahan jenis ini paling berisiko dalam konteks diagnosis karena berpotensi menunda penanganan. Nilai Kappa sebesar 0,969 menunjukkan kesesuaian yang hampir sempurna antara prediksi dan kelas aktual. Balanced accuracy sebesar 98,45% menegaskan performa yang seimbang pada kedua kelas, sedangkan ukuran data testing yang relatif kecil membuat perbedaan antarnilai \(k\) tidak terdeteksi sehingga evaluasi dengan cross-validation disarankan untuk perbandingan yang lebih andal.
Tabel 4.5 Confusion matrix \(k\)-NN dengan \(k = 3\)
| Prediksi \ Aktual | Benign | Malignant |
|---|---|---|
| Benign | 84 (TN) | 1 (FN) |
| Malignant | 1 (FP) | 51 (TP) |
# Mengubah tabel ke format panjang untuk visualisasi
data_plot <- rbind(
data.frame(k = hasil_evaluasi$k, Metrik = "Accuracy",
Nilai = hasil_evaluasi$Accuracy),
data.frame(k = hasil_evaluasi$k, Metrik = "Sensitivity",
Nilai = hasil_evaluasi$Sensitivity),
data.frame(k = hasil_evaluasi$k, Metrik = "Specificity",
Nilai = hasil_evaluasi$Specificity)
)
ggplot(data_plot, aes(x = k, y = Nilai, color = 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)
) +
labs(
title = "Perbandingan Metrik Evaluasi k-NN pada Berbagai Nilai k",
subtitle = paste("Evaluasi pada Data Testing Breast Cancer (Ukuran Sampel Testing =",
nrow(test_x), ")"),
x = "Jumlah Tetangga Terdekat (k)",
y = "Nilai Metrik",
color = "Metrik"
) +
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()
)Gambar 4.1 Kurva perbandingan accuracy, sensitivity, dan specificity \(k\)-NN pada \(k\) = 3, 5, 7, 9, dan 11
Pada batasan masalah diminta penyusunan perbandingan metrik evaluasi antarnilai \(k\), yang selain disajikan dalam bentuk tabel juga divisualisasikan dalam bentuk kurva pada Gambar 4.1. Sumbu horizontal menyatakan jumlah tetangga terdekat, sedangkan sumbu vertikal menyatakan nilai metrik evaluasi dalam persen. Tiga kurva ditampilkan sekaligus agar ketiga metrik dapat dibandingkan secara langsung pada setiap nilai \(k\).
Ketiga kurva berbentuk garis horizontal yang datar, dengan accuracy di 98,54%, sensitivity di 98,08%, dan specificity di 98,82% pada seluruh nilai \(k\). Kurva specificity berada paling atas dan kurva sensitivity paling bawah, dengan selisih sebesar 0,74 poin persentase. Pola datar ini menegaskan bahwa performa \(k\)-NN pada data ini tidak berubah akibat perubahan nilai \(k\) dalam rentang 3 sampai 11.
\(k\)-Nearest Neighbors (K-NN) merupakan algoritma klasifikasi nonparametrik pada supervised learning yang tidak mengasumsikan bentuk distribusi tertentu pada data. Prinsip kerjanya terdiri atas perhitungan jarak, pemilihan \(k\) tetangga terdekat, dan penentuan kelas melalui majority voting. Secara formal, probabilitas posterior suatu kelas diestimasi dari proporsi kelas tersebut di antara \(k\) tetangga terdekat. Sifat lazy learning membuat K-NN tidak memerlukan tahap pelatihan yang berat, tetapi seluruh data training harus tersimpan dalam memori.
Penskalaan fitur penting karena metrik jarak menghitung selisih numerik secara langsung sehingga variabel berskala besar akan mendominasi perhitungan. Tanpa penskalaan, struktur ketetanggaan dapat bias dan kinerja klasifikasi menurun. Normalisasi Min-Max mentransformasikan nilai variabel ke interval \([0, 1]\), sedangkan standardisasi \(z\)-score menyamakan rata-rata dan simpangan baku variabel. Kedua metode ini membuat setiap fitur memberi kontribusi yang seimbang pada penentuan tetangga terdekat.
Algoritma \(k\)-NN pada R dijalankan
secara terstruktur melalui beberapa tahap, yaitu input data,
preprocessing, penskalaan fitur, pembagian data
training dan testing, lalu pemodelan. Library
class menyediakan fungsi knn() untuk membentuk
prediksi, sedangkan caret menyediakan fungsi
confusionMatrix() untuk evaluasi. Fungsi bawaan R seperti
str(), table(), lapply(), dan
sample() mendukung eksplorasi, transformasi, dan pembagian
data. Penggunaan set.seed() menjaga hasil pembagian data
tetap dapat direproduksi.
Performa model klasifikasi dievaluasi melalui confusion matrix yang memuat true positive, true negative, false positive, dan false negative. Dari matriks tersebut dihitung accuracy sebagai proporsi prediksi yang benar, sensitivity sebagai kemampuan mendeteksi kelas positif, dan specificity sebagai kemampuan mengenali kelas negatif. Positive predictive value menunjukkan ketepatan prediksi positif dari seluruh data yang diprediksi positif.
Optimasi hyperparameter dilakukan dengan menguji beberapa
nilai \(k\) dan membandingkan
performanya pada metrik evaluasi. Nilai \(k\) yang terlalu kecil membuat model
sensitif terhadap noise, sedangkan nilai yang terlalu besar
membuat model terlalu umum. Kurva performa terhadap nilai \(k\) yang divisualisasikan dengan
ggplot2 membantu mengidentifikasi nilai \(k\) yang optimal. Teknik
cross-validation dapat digunakan untuk menghasilkan penilaian
yang lebih stabil dalam pemilihan nilai \(k\).
Pada batasan masalah diminta pemodelan klasifikasi \(k\)-NN pada data Wisconsin Breast Cancer untuk nilai \(k \in \{3, 5, 7, 9, 11\}\) dengan pembagian data 80% data training dan 20% data testing. Seluruh nilai \(k\) menghasilkan performa yang identik, yaitu accuracy sebesar 98,54%, sensitivity sebesar 98,08%, dan specificity sebesar 98,82% dengan satu false negative. Karena tidak terdapat perbedaan antarnilai \(k\), \(k = 3\) ditetapkan sebagai nilai optimal berdasarkan kesederhanaan komputasi. Hasil ini menunjukkan bahwa \(k\)-NN mampu membedakan tumor payudara jinak dan ganas dengan sangat baik pada data yang telah dinormalisasi.
Penelitian selanjutnya disarankan menggunakan \(k\)-fold cross-validation dalam penentuan nilai \(k\) karena ukuran data testing yang kecil membuat perbedaan antarnilai \(k\) sulit terdeteksi. Perbandingan beberapa metrik jarak serta metode penskalaan lain juga dapat dilakukan untuk melihat pengaruhnya terhadap performa. Perbandingan dengan algoritma klasifikasi lain dapat memperkaya analisis mengenai metode yang paling sesuai untuk data ini.
Ardiyansyah, D., & Oktafiani, N. (2024). Perbandingan Metode Pengukuran Jarak pada K-Nearest Neighbour dalam Klasifikasi Data Teks Cardiovaskular. Journal of Information Systems Management and Digital Business (JISMDB), 1(2), 116–122.
Daulay, R. S. A. (2024). Analisis Kritis dan Pengembangan Algoritma K-Nearest Neighbor (KNN): Sebuah Tinjauan Literatur. Jurnal Pendidikan Sains dan Komputer, 4(2), 131–141. https://doi.org/10.47709/jpsk.v4i02.5055
Elgeldawi, E., Sayed, A., Galal, A. R., & Zaki, A. M. (2021). Hyperparameter Tuning for Machine Learning Algorithms Used for Arabic Sentiment Analysis. Informatics, 8(4), 79–99. https://doi.org/10.3390/informatics8040079
Farhan, M., Puspasari, S., & Gasim, G. (2025). Analisis Sentimen Supporter Sriwijaya FC Berbasis Manchine Learning. Jurnal Algoritme, 6(1), 37–49. https://doi.org/10.35957/algoritme.v6i1.11288
Firdaus, A., & Sirodj, D. A. N. (2022). Perbandingan Ukuran Jarak pada Algoritma K-Nearest Neighbor dalam Analisis Sentimen. STATMAT (Jurnal Statistika dan Matematika), 4(2), 166–177.
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Bengkulu: Laboratorium Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Bengkulu.
Henderi, Wahyuningsih, T., & Rahwanto, E. (2021). Comparison of Min-Max normalization and Z-Score Normalization in the K-nearest neighbor (kNN) Algorithm to Test the Accuracy of Types of Breast Cancer. International Journal of Informatics and Information System, 4(1), 13–20.
Kelilauw, S. R., Purnawansyah, Manga’, A. R., & Puspitasari, R. (2025). K-Nearest Neighbor dengan Jarak Euclidean, Manhattan, dan Minkowski pada Klasifikasi Sampah. LINIER: Literatur Informatika dan Komputer, 2(3), 294–301. https://doi.org/10.33096/linier.v2i3.3141
Pargent, F., Schoedel, R., & Stachl, C. (2023). Best Practices in Supervised Machine Learning: A Tutorial for Psychologists. Advances in Methods and Practices in Psychological Science, 6(3), 1–35. https://doi.org/10.1177/25152459231162559
Pratama, Y. D., & Salam, A. (2025). Comparison of Data Normalization Techniques on KNN Classification Performance for Pima Indians Diabetes Dataset. Journal of Applied Informatics and Computing (JAIC), 9(3), 693–706.
Rashidi, H. H., Albahra, S., Robertson, S., Tran, N. K., & Hu, B. (2023). Common statistical concepts in the supervised Machine Learning arena. Frontiers in Oncology, 13(1), 1–14. https://doi.org/10.3389/fonc.2023.1130229
Sathyanarayanan, S., & Tantri, B. R. (2024). Confusion Matrix-Based Performance Evaluation Metrics. African Journal of Biomedical Research, 27(4), 4023–4031. https://doi.org/10.53555/ajbr.v27i4s.4345
Vikri, M. J., Pajri, A. E., & Liana, P. (2026). Impact of Data Normalization on K-Nearest Neighbor Classification Performance: A Case Study on Date Fruit Dataset. Indonesian Applied Research Computing and Informatics, 1(2), 11–21. https://doi.org/10.64479/iarci.v1i2.61
Yusran, M., Sadik, K., Soleh, A. M., & Suhaeni, C. (2025). Effect of Feature Normalization and Distance Metrics on K-Nearest Neighbors Performance for Diabetes Disease Classification. Journal of Mathematics, Computations and Statistics, 8(2), 341–354. https://doi.org/10.35580/jmathcos.v8i2.8012