Machine learning bukanlah konsep yang baru. Sejak akhir tahun 1950-an, para peneliti telah berupaya mengembangkan algoritma yang memungkinkan mesin untuk belajar dari data. Salah satu pionirnya adalah Arthur Samuel, yang mengembangkan program bermain catur yang dapat “belajar” dari permainan sebelumnya untuk menjadi lebih baik. Seiring waktu, machine learning berkembang pesat dengan meningkatnya kemampuan komputasi dan ketersediaan data dalam jumlah besar. Di era digital saat ini, machine learning telah menjadi salah satu bidang yang paling cepat berkembang di dunia teknologi. Dari pengenalan pola sederhana hingga sistem pembelajaran mendalam (deep learning) yang kompleks, machine learning telah menjadi fondasi dari banyak inovasi teknologi modern, seperti pengenalan wajah, kendaraan otonom, asisten virtual, dan sistem rekomendasi (Bintoro dkk., 2024).
Machine Learning terbagi menjadi 2 macam konsep pembelajaran, yaitu pertama Supervised Learning yang merupakan teknik machine learning yang membuat suatu fungsi berdasarkan data latihan yang sudah ada, dalam hal ini dapat dikatakan untuk teknik ini sudah tersedia data latihan secara detail dan terklasifikasi dengan baik yang akan dijadikan sebuah model data saat dilakukan proses uji coba dengan data tes yang baru dan menghasilkan hasil keluaran yang sesuai diharapkan sebelumnya berdasarkan data latihan yang ada. Kedua adalah Unsupervised Learning yang merupakan teknik machine learning yang berusaha untuk melakukan representasi pola sebuah input yang berasal dari data latihan dan salah satu yang menjadi perbedaan dengan Supervised Learning adalah tidak adanya pengklasifikasian dari input data. Dalam Machine Learning teknik Unsupervised Learning menjadi esensial karena sistem kerja yang diberikan sama dengan cara kerja otak manusia dimana dalam proses pembelajaran tidak ada role model atau informasi dan contoh yang tersedia untuk dijadikan sebagai model dalam melakukan proses uji coba untuk penyelesaian sebuah masalah dengan data yang baru (Fathurohman, 2021).
K-Nearest Neigbors (KNN) adalah sebuah algoritma klasifikasi popular yang sering digunakan dalam machine learning. KNN mengklasifikasikan objek berdasarkan data pembelajaran yang memiliki jarak terdekat dengan objek tertentu. Algoritma Nearest Neighbor hanya mempertimbangkan satu data pembelajaran terdekat sebagai basis klasifikasi. Walaupun KNN sederhana tapi kekuatan algoritma ini terletak pada kemampuannya menghasilkan prediksi yang cukup akurat dalam berbagai kasus aplikasi. Namun, kelemahan utama algoritma ini adalah sensitifitasnya terhadap parameter seperti jumlah tetangga (k) dan metrik jarak yang digunakan. KNN adalah algoritma nonparametric. Nonparametrik berarti tidak ada parameter atau jumlah parameter tetap terlepas dari ukuran data. Sebaliknya, parameter akan ditentukan oleh ukuran kumpulan data pelatihan, meskipun tidak ada asumsi yang perlu dibuat untuk distribusi data yang mendasarinya. Dengan demikian, KNN bisa menjadi pilihan terbaik untuk setiap studi klasifikasi yang melibatkan sedikit atau tanpa pengetahuan sebelumnya tentang distribusi data (Daulay, 2024).
Berdasarkan latar belakang tersebut, rumusan masalah yang dapat disimpulkan adalah:
1.Bagaimana memahami konsep fundamental, formulasi matematis, dan prinsip kerja algoritma K-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning.
2.Bagaimana memahami pentingnya penskalaan fitur (feature scaling) dalam komputasi berbasis metrik jarak (distance metrics).
3.Bagaimana mengimplementasikan algoritma 𝑘-NN secara terstruktur dan mandiri menggunakan bahasa pemrograman R dengan pustaka class dan caret.
4.Bagaimana mengevaluasi performa model klasifikasi menggunakan Confusion Matrix, Akurasi (Accuracy), Sensitivitas (Sensitivity), Spesifisitas (Specificity), dan Positive Predictive Value.
5.Bagaimana melakukan eksplorasi optimasi hiperparameter nilai 𝑘 (hyperparameter tuning) serta memvisualisasikan kurva performanya menggunakan paket ggplot2.
Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah:
1.Memahami konsep fundamental, formulasi matematis, dan prinsip kerja algoritma K-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning.
2.Memahami pentingnya penskalaan fitur (feature scaling) dalam komputasi berbasis metrik jarak (distance metrics).
3.Mengimplementasikan algoritma 𝑘-NN secara terstruktur dan mandiri menggunakan bahasa pemrograman R dengan pustaka class dan caret.
4.Mengevaluasi performa model klasifikasi menggunakan Confusion Matrix, Akurasi (Accuracy), Sensitivitas (Sensitivity), Spesifisitas (Specificity), dan Positive Predictive Value.
5.Melakukan eksplorasi optimasi hiperparameter nilai 𝑘 (hyperparameter tuning) serta memvisualisasikan kurva performanya menggunakan paket ggplot2.
Adapun manfaat pada penelitian ini yaitu:
1.Bagi Penulis
a.Memberikan informasi serta pengetahuan tentang konsep dan mengimplementasikan model K-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning.
b.Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh dalam bidang statistika, khususnya tentang konsep dan mengimplementasikan model K-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning dengan R-Studio.
2.Bagi Pembaca
Menambah ilmu pengetahuan dan pemahaman yang berkaitan dengan Mengevaluasi performa model K-Nearest Neighbors (𝑘-NN) sebagai metode non-parametrik supervised learning dengan R-Studio.
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).
Adapun sistematika penulisan dari praktikum ini adalah sebagai berikut.
BAB IPENDAHULUAN
Bab ini terdiri dari latar belakang, rumusan masalah, tujuan penelitian, manfaat penelitian, batasan masalah, dan sistematika penulisan.
BAB IITINJAUAN PUSTAKA
Bab ini berisi kajian pustaka yang terdiri dari jurnal, buku, dan informasi pendukung mengenai K-Nearest Neighbors (𝑘-NN) pada program R-Studio.
BAB IIIMETODE PENELITIAN
Bab ini terdiri dari jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alir.
BAB IVHASIL DAN PEMBAHASAN
Bab ini berisi hasil yang diperoleh dari analisis data beserta penjelasannya pada bagian pembahasan.
BAB VKESIMPULAN
Bab ini merupakan bagian penutup laporan yang berisi kesimpulan dari hasil analisis serta saran dari penulis.
DAFTAR PUSTAKA
LAMPIRAN
Machine Learning adalah studi tentang algoritma untuk mempelajari bagaimana melakukan tugas-tugas tertentu yang dilakukan secara otomatis oleh orang-orang. Di sini, belajar mengacu pada kemampuan untuk melakukan berbagai kegiatan yang sudah ada atau untuk mengekstrapolasi kesimpulan baru dengan benar dari berbagai pola yang diamati sebelumnya. Salah satu subbidang kecerdasan buatan, Machine Learning, dapat berdampak pada sejumlah bidang lain, termasuk statistik, matematika, dan banyak bidang teoretis ilmu komputer. Intinya, tujuan machine learning adalah untuk mengembangkan algoritma yang dapat mengeksekusi sistem pembelajaran otonom dengan sangat sedikit masukan dari orang-orang pada umumnya. Berikut beberapa contoh algoritma dari konsep pembelajaran Supervised Learning dan Unsupervised Learning (Fathurohman, 2021):
1.Supervised Learning
a.Logistic Regression: adalah strategi statistik yang dapat digunakan untuk memecahkan masalah dengan membuat prediksi variabel baru berdasarkan sejumlah variabel yang sudah ada dan yang ditentukan sebelumnya dan mencari korelasi antara variabel data input yang ditentukan sebelumnya dengan variabel prediksi baru.
b.K-Nearest Neighbors Algorithm (KNN): memerlukan pembentukan ruang fitur di mana item yang menjadi data pelatihan dan model data diberi nilai berbobot dan direpresentasikan dalam vektor n-dimensi untuk menyelesaikan masalah klasifikasi. Kesulitan tersebut kemudian diselesaikan dengan menentukan jarak dari item baru yang dapat ditentukan menggunakan model data dalam vektor n-dimensi, dan objek baru tersebut kemudian diberikan kategori.
2.Unsupervised Learning
a.Clustering: sebuah proses untuk membuat arketipe item yang digunakan dalam pembelajaran mesin untuk mengatasi tantangan seperti mengklasifikasikan atau mengkategorikan hal-hal ke dalam kelas atau kategori. Data yang digunakan sebagai model data belum membentuk kelompok data, sehingga tidak dapat mengidentifikasi klasifikasi suatu item. Akibatnya, pola dasar pertama-tama harus dibangun menggunakan sejumlah karakteristik yang diperlukan sebelum model data dan data pelatihan dapat digunakan. jika terjadi klasifikasi objek baru.
Algoritma K-Nearest Neighbors (𝑘-NN) pertama kali digagas oleh Fix & Hodges (1951) sebagai metode klasifikasi non-parametrik dalam laporan penelitian militer USAF School of Aviation Medicine. Landasan teoritis konvergensinya kemudian dibuktikan secara analitis dan dipublikasikan secara luas oleh Cover & Hart (1967) dalam jurnal bereputasi IEEE Transactions on Information Theory.
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 (Hastie, Tibshirani, & Friedman, 2009; Cunningham & Delany, 2021).
Diberikan himpunan data latih yang terdiri atas 𝑛 observasi berpasangan:
\[ D = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\} \]
di mana 𝑥𝑖 ∈ 𝑅𝑝 merupakan vektor fitur berdimensi 𝑝, dan 𝑦𝑖 ∈ {1,2, … , 𝐶} adalah label kelas diskret. Untuk suatu data uji baru dengan vektor fitur 𝑥0 ∈ 𝑅𝑝, algoritma mengidentifikasi himpunan 𝑁𝑘(𝑥0) yang memuat 𝑘 buah tetangga terdekat dari 𝑥0 berdasarkan ukuran kedekatan jarak tertentu.
Estimasi probabilitas posterior bahwa data 𝑥0 tergolong ke dalam kelas 𝑗 diformulasikan sebagai proporsi kelas 𝑗 di antara tetangga terdekatnya:
\[ \hat{P}(Y = j \mid X = x_0) = \frac{1}{k}\sum_{i \in N_k(x_0)} I(y_i = j) \]
di mana 𝐼(⋅) merepresentasikan fungsi indikator (indicator function) yang bernilai:
\[ I(y_i = j) = \begin{cases} 1, & \text{jika } y_i = j \\ 0, & \text{jika } y_i \neq j \end{cases} \]
Keputusan klasifikasi final 𝐺̂(𝑥0) diambil berdasarkan prinsip suara terbanyak (majority voting):
\[ \hat{G}(x_0) = \underset{j \in \{1, 2, \ldots, C\}}{\arg\max}\ \hat{P}(Y = j \mid X = x_0) \]
Cover dan Hart (1967) membuktikan bahwa ketika ukuran sampel data latih mendekati tak hingga (𝑛 → ∞), probabilitas kesalahan klasifikasi dari tetangga terdekat tunggal (𝑘 = 1), yang dinotasikan dengan 𝑅, dibatasi oleh probabilitas kesalahan pengklasifikasi Bayes optimal (𝑅∗) melalui batas ketat:
\[ R^* \le R \le R^*\left(2 - \frac{C}{C-1}R^*\right) \le 2R^* \]
Teorema ini memberikan jaminan matematis bahwa performa aturan tetangga terdekat secara asimtotik memiliki tingkat kesalahan paling buruk tidak lebih dari dua kali lipat kesalahan pengklasifikasi optimal teoritis (pengklasifikasi Bayes).
Pemilihan nilai hiperparameter 𝑘 memegang peranan krusial dalam mengendalikan keseimbangan antara bias dan varians (Fransiska, 2026):
1.Nilai 𝑘 Kecil (misalnya 𝑘 = 1): Model memiliki fleksibilitas tinggi dan batas keputusan (decision boundary) yang sangat rumit. Karakteristik ini menghasilkan bias yang sangat rendah, namun varians yang sangat tinggi. Model menjadi sangat sensitif terhadap derau (noise) dan rentan mengalami overfitting.
2.Nilai 𝑘 Besar (misalnya 𝑘 → 𝑛): Batas keputusan menjadi sangat halus (oversmoothing). Karakteristik ini menghasilkan varians yang rendah, namun bias yang tinggi. Jika 𝑘 terlalu besar, model berpotensi mengalami underfitting karena keputusan lokal akan terdistorsi oleh prevalensi kelas mayoritas secara global.
Jarak antar dua titik observasi \(x = (x_1, \ldots, x_p)^\top\) dan \(y = (y_1, \ldots, y_p)^\top\) dalam ruang fitur dihitung menggunakan berbagai formulasi metrik jarak (Fransiska, 2026):
1.Jarak Euclidean (\(L_2\)): Metrik geometris paling umum untuk variabel bertipe numerik kontinu:
\[ d(x, y) = \sqrt{\sum_{i=1}^{p}(x_i - y_i)^2} \]
2.Jarak Manhattan (\(L_1\) / City Block Distance): Metrik jarak berbasis jumlah selisih mutlak yang lebih tangguh terhadap keberadaan pencilan (outliers):
\[ d(x, y) = \sum_{i=1}^{p}|x_i - y_i| \]
3.Jarak Minkowski (\(L_m\)): Generalisasi keluarga metrik \(L_m\), di mana parameter 𝑚 = 1 menghasilkan jarak Manhattan dan 𝑚 = 2 menghasilkan jarak Euclidean:
\[ d(x, y) = \left(\sum_{i=1}^{p}|x_i - y_i|^m\right)^{1/m}, \quad m \ge 1 \]
4.Jarak Mahalanobis: Metrik jarak yang menginkorporasikan matriks kovarians \(\Sigma\), sehingga mengoreksi korelasi antar variabel serta mengatasi perbedaan skala:
\[ d(x, y) = \sqrt{(x - y)^\top \Sigma^{-1}(x - y)} \]
5.Jarak Hamming: Ukuran ketidaksamaan yang dikhususkan untuk data bertipe biner atau kategorik kualitatif:
\[ d(x, y) = \frac{1}{p}\sum_{i=1}^{p} I(x_i \ne y_i) \]
Karena jarak Euclidean dan Manhattan menghitung selisih numerik secara langsung, variabel dengan rentang nilai besar akan mendominasi perhitungan jarak. Oleh karena itu, penskalaan fitur perlu dilakukan pada tahap pra-pemrosesan. Dua cara yang umum digunakan adalah normalisasi min-max yang mengubah nilai ke interval \([0, 1]\) dan standarisasi z-score yang mengubah data menjadi berrata-rata 0 dan simpangan baku 1 (Fransiska, 2026):
\[ x_{scaled} = \frac{x - x_{min}}{x_{max} - x_{min}} \qquad\qquad z = \frac{x - \mu}{\sigma} \]
Penelitian ini merupakan penelitian kuantitatif dengan pendekatan komputasi yang bertujuan menerapkan algoritma K-NN untuk mengklasifikasikan tumor payudara. Data yang digunakan adalah dataset BreastCancer (Wisconsin Breast Cancer Database) yang tersedia dalam paket mlbench pada perangkat lunak R-Studio. Setiap baris data merepresentasikan satu pengamatan sel hasil pemeriksaan, dan dataset ini digunakan untuk membedakan dua kelas diagnosis, yaitu benign (jinak) dan malignant (ganas). Pengolahan data dan pembentukan model dilakukan dengan bahasa pemrograman R menggunakan paket mlbench, class, caret, dan ggplot2. Karena NPM praktikan genap, data dibagi menjadi data latih sebesar 80% dan data uji sebesar 20% dengan set.seed(12336).
Variabel respon adalah Class, yaitu kategori diagnosis tumor (benign dan malignant). Variabel prediktor terdiri atas sembilan karakteristik sel yang dinilai pada skala 1 sampai 10, yaitu Cl.thickness (ketebalan kelompok sel), Cell.size (keseragaman ukuran sel), Cell.shape (keseragaman bentuk sel), Marg.adhesion (adhesi marginal), Epith.c.size (ukuran sel epitel tunggal), Bare.nuclei (inti sel telanjang), Bl.cromatin (kromatin), Normal.nucleoli (nukleolus normal), dan Mitoses (tingkat mitosis). Variabel Id hanya berfungsi sebagai identitas sehingga tidak digunakan dalam pemodelan.
Algoritma berdasarkan batasan masalah adalah:
1.Memuat dataset BreastCancer dari paket mlbench ke dalam R-Studio.
2.Memeriksa struktur dataset, sebaran kelas, dan nilai hilang (missing value).
3.Menghapus variabel Id dan menghapus pengamatan yang mengandung nilai hilang dengan na.omit.
4.Mengubah variabel prediktor dari faktor menjadi numerik.
5.Melakukan normalisasi min-max pada seluruh variabel prediktor.
6.Membagi data menjadi 80% data latih dan 20% data uji dengan set.seed(12336).
7.Membentuk model K-NN untuk \(k \in \{3, 5, 7, 9, 11\}\) menggunakan fungsi knn() dari paket class.
8.Menghitung confusion matrix serta akurasi, sensitivitas, spesifisitas, dan PPV untuk setiap nilai \(k\) menggunakan confusionMatrix() dari paket caret dengan kelas positif malignant.
9.Menyusun tabel perbandingan metrik evaluasi dan membuat visualisasi pengaruh nilai \(k\).
10.Menentukan nilai \(k\) optimal dengan memprioritaskan sensitivitas tertinggi (jumlah false negative terkecil), kemudian akurasi dan spesifisitas.
Berikut ini diagram alir penelitian:
DiagrammeR::grViz("
digraph flow {
graph [rankdir = TB, bgcolor = white, nodesep = 0.25, ranksep = 0.35]
node [shape = box, style = rounded, fontname = Helvetica, fontsize = 10,
color = '#52799B', margin = '0.16,0.10']
edge [color = '#777777', arrowsize = 0.7]
A [label = 'Mulai']
B [label = 'Memuat Dataset BreastCancer']
C [label = 'Pemeriksaan Struktur, Sebaran Kelas, dan Missing Value']
D [label = 'Pra-pemrosesan: Hapus Id, Hapus Missing Value, Faktor ke Numerik']
E [label = 'Normalisasi Min-Max']
F [label = 'Pembagian Data Latih 80% dan Uji 20% (set.seed 12336)']
G [label = 'Pemodelan K-NN untuk k = 3, 5, 7, 9, 11']
H [label = 'Confusion Matrix dan Evaluasi: Akurasi, Sensitivitas, Spesifisitas']
I [label = 'Tabel Perbandingan dan Visualisasi Pengaruh k']
J [label = 'Menentukan k Optimal (Minimalkan False Negative)']
K [label = 'Interpretasi dan Kesimpulan']
L [label = 'Selesai']
A -> B -> C -> D -> E -> F
F -> G -> H -> I -> J -> K -> L
}
")Berikut ini eksplorasi data yang digunakan dalam data kanker payudara:
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)
library(mlbench)
data(BreastCancer, package = "mlbench") # Memuat dataset BreastCancer
str(BreastCancer) # Menampilkan struktur variable## '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
## 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
Data yang digunakan adalah dataset BreastCancer dari paket mlbench yang terdiri dari r n_awal pengamatan dan r p_awal variabel. Variabel tersebut meliputi Id sebagai identitas pasien, sembilan variabel karakteristik sel (Cl.thickness, Cell.size, Cell.shape, Marg.adhesion, Epith.c.size, Bare.nuclei, Bl.cromatin, Normal.nucleoli, dan Mitoses), serta satu variabel Class sebagai diagnosis. Kesembilan variabel karakteristik sel dinilai pada skala 1 sampai 10, tetapi tersimpan di R sebagai faktor atau faktor terurut, sehingga perlu diubah menjadi numerik sebelum jarak antarpengamatan dapat dihitung oleh algoritma K-NN. Variabel Class terdiri dari r n_benign pengamatan benign (r round(n_benign / n_awal * 100, 1)%) dan r n_malign pengamatan malignant (r round(n_malign / n_awal * 100, 1)%), sehingga kelas benign lebih dominan. Ketidakseimbangan kelas ini perlu diperhatikan karena akurasi dapat terlihat tinggi walaupun kelas minoritas (malignant) kurang terdeteksi, sehingga sensitivitas dilibatkan dalam evaluasi. Hasil pemeriksaan missing value menunjukkan bahwa nilai yang hilang terdapat pada variabel r paste(na_var, collapse = “,”), yaitu sebanyak r na_total pengamatan atau sekitar r round(na_total / n_awal * 100, 1)% dari seluruh data. Karena proporsinya kecil, pengamatan yang mengandung missing value dihapus pada tahap pra-pemrosesan.
Berikut ini pra-pemrosesan data yang digunakan dalam data kanker payudara:
# Pra-pemrosesan data
bc <- BreastCancer
bc$Id <- NULL # Menghapus variabel Id (hanya identitas)
bc <- na.omit(bc) # Menghapus pengamatan yang mengandung missing value
# Mengubah 9 variabel prediktor dari faktor menjadi numerik
bc[1:9] <- lapply(bc[1:9], function(x) as.numeric(as.character(x)))
bc$Class <- factor(bc$Class, levels = c("benign", "malignant"))
nrow(bc) # Jumlah pengamatan setelah pembersihan## [1] 683
## 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
# 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))
bc_norm$Class <- bc$Class # Menggabungkan kembali label kelas diagnosis
summary(bc_norm) # Menampilkan ringkasan statistik setelah normalisasi## 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
Tahap pra-pemrosesan dimulai dengan menghapus variabel Id dan pengamatan yang mengandung missing value, sehingga tersisa r n_bersih pengamatan. Seluruh variabel prediktor kemudian diubah dari faktor menjadi numerik dan variabel Class ditetapkan sebagai faktor dengan urutan level benign dan malignant. Selanjutnya dilakukan normalisasi min-max menggunakan fungsi min_max_norm, yaitu mengubah setiap nilai menjadi \((x - x_{min})/(x_{max} - x_{min})\), sehingga seluruh prediktor berada pada rentang 0 sampai 1. Fungsi lapply digunakan agar fungsi normalisasi diterapkan pada setiap kolom prediktor. Hasil summary(bc_norm) menunjukkan setiap prediktor bernilai minimum 0 dan maksimum 1. Normalisasi diperlukan karena K-NN berbasis jarak Euclidean, sehingga variabel dengan rentang nilai yang lebih besar akan mendominasi perhitungan jarak apabila tidak diskalakan. Walaupun kesembilan prediktor sudah berada pada skala yang sama (1 sampai 10), normalisasi tetap dilakukan sebagai praktik standar agar setiap variabel berkontribusi setara terhadap jarak.
Berikut ini pembagian data latih dan data uji yang digunakan dalam data kanker payudara:
# NPM genap: 80% data latih dan 20% data uji, set.seed(123XY) dengan XY = 36
set.seed(12336)
# 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 Latih (Train):", nrow(train_x), "baris,", ncol(train_x), "fitur\n")## Dimensi Data Latih (Train): 546 baris, 9 fitur
## Dimensi Data Uji (Test) : 137 baris, 9 fitur
Berdasarkan hasil didapatkan untuk digit terakhir NPM praktikan adalah 36 (genap), data dibagi menjadi 80% data latih dan 20% data uji dengan set.seed(12336). Hasil pembagian menunjukkan data latih terdiri dari r n_latih pengamatan (r round(n_latih / n_bersih * 100, 1)%) dan data uji terdiri dari r n_uji pengamatan (r round(n_uji / n_bersih * 100, 1)%), masing-masing dengan r ncol(train_x) fitur. Pada data uji terdapat r n_pos_uji pengamatan malignant dan r n_neg_uji pengamatan benign. Penggunaan set.seed memastikan pembagian data dapat direproduksi dengan hasil yang sama setiap kali kode dijalankan. Data latih menjadi basis pencarian tetangga terdekat, sedangkan data uji digunakan untuk menilai kemampuan model memprediksi data baru.
Berikut ini pemodelan K-NN dengan jumlah tetangga terdekat k = 5:
k_tetangga <- 5 # Mengatur jumlah tetangga terdekat k = 5
# Melakukan klasifikasi k-NN
prediksi_k5 <- knn(
train = train_x, test = test_x, cl = train_y, k = k_tetangga)
head(prediksi_k5, 10) # Menampilkan 10 sampel hasil prediksi pertama## [1] benign malignant benign benign malignant malignant benign
## [8] malignant benign malignant
## Levels: benign malignant
# Menghitung matriks konfusi dan statistik evaluasi (kelas positif = malignant)
evaluasi_model <- confusionMatrix(data = prediksi_k5, reference = test_y, positive = "malignant")
print(evaluasi_model) # Menampilkan hasil evaluasi## Confusion Matrix and Statistics
##
## Reference
## Prediction benign malignant
## benign 80 4
## malignant 2 51
##
## Accuracy : 0.9562
## 95% CI : (0.9071, 0.9838)
## No Information Rate : 0.5985
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9083
##
## Mcnemar's Test P-Value : 0.6831
##
## Sensitivity : 0.9273
## Specificity : 0.9756
## Pos Pred Value : 0.9623
## Neg Pred Value : 0.9524
## Prevalence : 0.4015
## Detection Rate : 0.3723
## Detection Prevalence : 0.3869
## Balanced Accuracy : 0.9514
##
## 'Positive' Class : malignant
##
Model K-NN dibentuk dengan fungsi knn() dari paket class menggunakan jarak Euclidean pada data yang telah dinormalisasi. Setiap pengamatan data uji diklasifikasikan berdasarkan suara terbanyak dari k = 5 tetangga terdekat pada data latih. Hasil head(prediksi_k5, 10) menampilkan 10 prediksi pertama pada data uji. Kelas malignant ditetapkan sebagai kelas positif sehingga sensitivitas mengukur kemampuan model mendeteksi tumor ganas dan false negative (FN) adalah tumor ganas yang diprediksi jinak. Berdasarkan confusion matrix, model dengan k = 5 mencapai akurasi r round(acc5 * 100, 2)%, sensitivitas r round(sens5 * 100, 2)%, spesifisitas r round(spec5 * 100, 2)%, dan positive predictive value r round(ppv5 * 100, 2)%. Dari r n_pos_uji pengamatan malignant pada data uji, sebanyak r tp5 berhasil dideteksi dan r fn5 terlewat sebagai false negative. Dari r n_neg_uji pengamatan benign, sebanyak r tn5 diprediksi benar dan r fp5 diprediksi sebagai malignant (false positive).
Berikut ini pengujian beberapa nilai k dan pemilihan k optimal yang digunakan dalam data kanker payudara:
# Menyiapkan nilai k yang diuji
k_values <- c(3, 5, 7, 9, 11)
akurasi_vektor <- numeric(length(k_values))
sensitivitas_vektor <- numeric(length(k_values))
spesifisitas_vektor <- numeric(length(k_values))
fn_vektor <- numeric(length(k_values))
# Pengujian iteratif untuk setiap nilai k
for (i in seq_along(k_values)) {
k_val <- k_values[i]
set.seed(12336) # agar hasil sama bila terjadi suara seri
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")
akurasi_vektor[i] <- cm$overall["Accuracy"]
sensitivitas_vektor[i] <- cm$byClass["Sensitivity"]
spesifisitas_vektor[i] <- cm$byClass["Specificity"]
fn_vektor[i] <- cm$table["benign", "malignant"] # False Negative
}
# Menyusun data frame hasil eksperimen (tabel perbandingan metrik evaluasi)
tabel_akurasi <- data.frame(k = k_values,
Akurasi = akurasi_vektor,
Sensitivitas = sensitivitas_vektor,
Spesifisitas = spesifisitas_vektor,
FN = fn_vektor)
tabel_akurasi # Menampilkan seluruh hasil## k Akurasi Sensitivitas Spesifisitas FN
## 1 3 0.9635036 0.9454545 0.9756098 3
## 2 5 0.9562044 0.9272727 0.9756098 4
## 3 7 0.9562044 0.9272727 0.9756098 4
## 4 9 0.9635036 0.9454545 0.9756098 3
## 5 11 0.9562044 0.9272727 0.9756098 4
# Menentukan k optimal: sensitivitas tertinggi (FN terkecil), lalu akurasi, lalu k terkecil
urut <- order(-tabel_akurasi$Sensitivitas, -tabel_akurasi$Akurasi,
-tabel_akurasi$Spesifisitas, tabel_akurasi$k)
k_optimal <- tabel_akurasi$k[urut[1]]
cat("Nilai k paling optimal:", k_optimal, "\n")## Nilai k paling optimal: 3
Hasil pengujian menunjukkan bahwa akurasi kelima model berkisar antara r round(acc_min * 100, 2)% sampai r round(acc_max * 100, 2)%, dengan akurasi tertinggi pada k = r paste(k_acc_max, collapse = “,”). Sensitivitas berkisar antara r round(sens_min * 100, 2)% sampai r round(sens_max * 100, 2)%, dengan nilai tertinggi pada k = r paste(k_sens_max, collapse = “,”). Jumlah false negative berkisar dari r fn_min sampai r fn_max kasus, dengan jumlah terkecil pada k = r paste(k_fn_min, collapse = “,”). Spesifisitas berkisar antara r round(spec_min * 100, 2)% sampai r round(spec_max * 100, 2)%, dengan nilai tertinggi pada k = r paste(k_spec_max, collapse = “,”). Selisih akurasi antar-k adalah r round(rentang_acc * 100, 2) poin persentase, sehingga kinerja K-NN pada rentang k = 3 sampai 11 tergolong r if (rentang_acc <= 0.02) “relatif stabil” else “cukup bervariasi”. Pemilihan k optimal dilakukan dengan mempertimbangkan bahwa false negative lebih berbahaya daripada false positive dalam diagnosis kanker. Oleh karena itu, kriteria utama adalah sensitivitas tertinggi (FN terkecil), kemudian akurasi tertinggi, lalu spesifisitas tertinggi, dan apabila masih sama dipilih k terkecil. Berdasarkan kriteria tersebut, nilai k yang paling optimal adalah k = r k_optimal.
Berikut ini visualisasi pengaruh nilai k terhadap akurasi klasifikasi K-NN:
# Visualisasi kurva akurasi
ggplot(tabel_akurasi, aes(x = k, y = Akurasi)) +
geom_line(color = "#2b5c8f", linewidth = 1.1) +
geom_point(color = "#d95f02", size = 2.8) +
scale_x_continuous(breaks = seq(3, 11, by = 2)) +
scale_y_continuous(labels = scales::percent_format(accuracy = 0.1)) +
labs(
title = "Pengaruh Hiperparameter k terhadap Akurasi Klasifikasi k-NN",
subtitle = paste0("Evaluasi Generalisasi pada Data Uji Breast Cancer (Ukuran Sampel Uji = ", nrow(test_x), ")"),
x = "Jumlah Tetangga Terdekat (k)",
y = "Akurasi Prediksi"
) +
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()
)Kurva Hubungan Nilai k terhadap Akurasi Model k-NN pada Dataset Breast Cancer
Grafik menunjukkan perubahan akurasi model pada k = 3, 5, 7, 9, dan 11 dengan r nrow(test_x) pengamatan data uji. Akurasi berada pada rentang r round(acc_min * 100, 2)% sampai r round(acc_max * 100, 2)%, dan titik tertinggi terdapat pada k = r paste(k_acc_max, collapse = “,”). Karena data uji relatif kecil, selisih satu pengamatan yang salah diklasifikasikan setara dengan perubahan akurasi sekitar r round(100 / nrow(test_x), 2) poin persentase, sehingga naik-turun garis pada grafik perlu dibaca hati-hati dan tidak selalu menandakan perbedaan kualitas model yang besar. Secara teori, k yang kecil menghasilkan batas keputusan yang lebih rumit (bias rendah, varians tinggi), sedangkan k yang besar menghasilkan batas keputusan yang lebih halus (bias tinggi, varians rendah) dan dapat condong ke kelas mayoritas, yaitu benign. Sebagai pembanding, akurasi bila seluruh data uji diprediksi sebagai kelas mayoritas (no information rate) adalah r round(nir_opt * 100, 2)%, sehingga model K-NN memberikan peningkatan sebesar r round((best$Accuracy - nir_opt) * 100, 2) poin persentase di atas prediksi naif. Nilai balanced accuracy sebesar r round(bacc_opt * 100, 2)% dan koefisien Kappa sebesar r round(kappa_opt, 4) menunjukkan kesesuaian antara prediksi dan kelas aktual setelah memperhitungkan faktor kebetulan.
Kasus false negative (tumor ganas yang diprediksi jinak) adalah kesalahan yang paling perlu dihindari karena dapat menunda penanganan pasien, sedangkan false positive hanya berdampak pada pemeriksaan lanjutan yang sebenarnya tidak diperlukan. Oleh sebab itu, pemilihan k = r k_optimal dengan r best$FN kasus false negative dinilai paling sesuai dengan tujuan pemodelan. Namun, jumlah data uji yang relatif kecil (r n_uji pengamatan) membuat metrik sangat dipengaruhi oleh beberapa pengamatan saja, sehingga hasil ini mencerminkan satu skenario pembagian data dan sebaiknya divalidasi lebih lanjut, misalnya dengan validasi silang (cross-validation). K-NN juga merupakan lazy learning yang tidak menghasilkan persamaan model sehingga interpretasi dilakukan melalui kinerja prediksi, bukan melalui koefisien.
Machine Learning adalah studi tentang algoritma untuk mempelajari bagaimana melakukan tugas-tugas tertentu yang dilakukan secara otomatis oleh orang-orang. Di sini, belajar mengacu pada kemampuan untuk melakukan berbagai kegiatan yang sudah ada atau untuk mengekstrapolasi kesimpulan baru dengan benar dari berbagai pola yang diamati sebelumnya. Salah satu subbidang kecerdasan buatan, Machine Learning, dapat berdampak pada sejumlah bidang lain, termasuk statistik, matematika, dan banyak bidang teoretis ilmu komputer. Intinya, tujuan machine learning adalah untuk mengembangkan algoritma yang dapat mengeksekusi sistem pembelajaran otonom dengan sangat sedikit masukan dari orang-orang pada umumnya.
K-Nearest Neighbors (K-NN) adalah algoritma supervised learning non-parametrik berjenis lazy learning yang mengklasifikasikan data baru berdasarkan suara terbanyak dari \(k\) tetangga terdekatnya pada data latih. Karena berbasis jarak, algoritma ini memerlukan penskalaan fitur agar variabel dengan rentang besar tidak mendominasi perhitungan jarak, dan pemilihan nilai \(k\) mengendalikan kompromi antara bias dan varians.
Algoritma K-Nearest Neighbors (𝑘-NN) pertama kali digagas oleh Fix & Hodges (1951) sebagai metode klasifikasi non-parametrik dalam laporan penelitian militer USAF School of Aviation Medicine. Landasan teoritis konvergensinya kemudian dibuktikan secara analitis dan dipublikasikan secara luas. 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.
Berdasarkan hasil analisis pada data Wisconsin Breast Cancer yang telah dibersihkan (r n_bersih pengamatan setelah r na_total pengamatan dengan missing value dihapus), dengan sembilan prediktor yang dinormalisasi min-max dan pembagian 80:20 (r n_latih data latih dan r n_uji data uji, set.seed(12336)), diperoleh bahwa model K-NN untuk \(k \in \{3, 5, 7, 9, 11\}\) menghasilkan akurasi antara r round(acc_min * 100, 2)% dan r round(acc_max * 100, 2)%, sensitivitas antara r round(sens_min * 100, 2)% dan r round(sens_max * 100, 2)%, serta spesifisitas antara r round(spec_min * 100, 2)% dan r round(spec_max * 100, 2)%. Dengan mempertimbangkan pentingnya meminimalkan false negative pada diagnosis tumor ganas, nilai \(k\) yang paling optimal adalah \(k\) = r k_best, dengan akurasi r round(best\(Accuracy * 100, 2)%, sensitivitas r round(best\)Sensitivity * 100, 2)%, spesifisitas r round(best\(Specificity * 100, 2)%, dan jumlah false negative sebanyak r best\)FN kasus. Mengingat jumlah data uji yang relatif kecil, hasil ini mencerminkan satu skenario pembagian data sehingga perlu divalidasi lebih lanjut.
Ketika menggunakan program R, diperlukan ketelitian dalam penulisan sintaks, pemasukan data, dan perhitungan agar hasil yang diperoleh sesuai harapan, termasuk ketepatan menentukan kelas positif dan penggunaan set.seed agar hasil dapat direproduksi. Untuk penelitian selanjutnya disarankan menggunakan validasi silang untuk memilih \(k\) secara lebih andal, mencoba metrik jarak lain seperti Manhattan atau Mahalanobis, serta membandingkan K-NN dengan algoritma klasifikasi lain seperti Support Vector Machine atau Artificial Neural Network.
Bintoro, P., Ratnasari., Wihardjo, E., Putri, I. P., & Asari, A. (2024). Pengantar Machine Learning.
Cover, T., & Hart, P. (1967). Nearest neighbor pattern classification. IEEE Transactions on Information Theory, 13(1), 21–27.
Cunningham, P., & Delany, S. J. (2021). k-Nearest Neighbour Classifiers - A Tutorial. ACM Computing Surveys (CSUR), 54(6), 1–25.
Daulay, R. S. A. (2024). Analisis Kritis dan Pengembangan Algoritma K-Nearest Neighbor (KNN): Sebuah Tinjauan Literatur. Jurnal Pendidikan Sains dan Komputer Volume 4, Number 2, Oktober 2024.
Fathurohman, A. (2021). Machine Learning Untuk Pendidikan: Mengapa Dan Bagaimana. Jurnal JITEK, 1(3), 57–62.
Fix, E., & Hodges, J. L. (1951). Discriminatory Analysis. Nonparametric Discrimination: Consistency Properties. USAF School of Aviation Medicine, Report No. 4, Project 21-49-004.
Fransiska, H. (2026). Modul Praktikum Machine Learning and Modern Prediction. Laboratorium Statistika, Universitas Bengkulu.
Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction (2nd ed.). Springer New York.