K-Nearest Neighbor (KNN) Classify Using R

PUTRI ERMAYANI
5 min readJul 12, 2021

--

Assalamualaikum Warahmatullahi Wabarakatuh.

Kali ini kita akan membahas tentang implementasi klasifikasi KNN terutama penyelesaiannya dalam program R.

Apa itu K-Nearest Neighbor (KNN)?

Algoritma K-Nearest Neighbor (KNN) adalah sebuah metode klasifikasi terhadap sekumpulan data berdasarkan pembelajaran data yang sudah terklasifikasikan sebelumya. KNN termasuk dalam supervised learning, dimana hasil query instance yang baru diklasifikasikan berdasarkan mayoritas kedekatan jarak dari kategori yang ada dalam KNN.

Algoritma KNN berfungsi untuk melakukan klasifikasi suatu data berdasarkan data pembelajaran (train data sets), yang diambil dari k tetangga terdekatnya (nearest neighbors). Dengan k merupakan banyaknya tetangga terdekat.

Tahapan KNN

  1. Menentukan parameter k (jumlah tetangga paling dekat). Banyaknya k, sebaiknya merupakan angka ganjil, misalnya k = 1, 2, 3, dan seterusnya. Penentuan nilai k dipertimbangkan berdasarkan banyaknya data yang ada dan ukuran dimensi yang dibentuk oleh data. Semakin banyak data yang ada, angka k yang dipilih sebaiknya semakin rendah. Namun, semakin besar ukuran dimensi data, angka k yang dipilih sebaiknya semakin tinggi.
  2. Menghitung kuadrat jarak euclidean objek terhadap data training yang diberikan.
  3. Mengurutkan hasil no 2 secara ascending (berurutan dari nilai tinggi ke rendah)
  4. Mengumpulkan kategori Y (Klasifikasi nearest neighbor berdasarkan nilai k)
  5. Dengan menggunakan kategori nearest neighbor yang paling mayoritas maka dapat dipredisikan kategori objek.

Contoh Studi Kasus

Sebagai contoh implementasi analisis KNN, kita akan menggunakan iris dataset yang telah terdapat dalam program R. Iris dataset terdiri dari 50 sampel dari masing-masing 3 spesies Iris(Iris setosa, Iris virginica, Iris versicolor) dan kumpulan data multivariat yang diperkenalkan oleh ahli statistik dan biologi Inggris Ronald Fisher dalam makalahnya tahun 1936 Penggunaan beberapa pengukuran dalam masalah taksonomi. Empat fitur diukur dari masing-masing sampel yaitu panjang dan lebar sepal dan petal dan berdasarkan kombinasi dari empat fitur ini, Fisher mengembangkan model diskriminan linier untuk membedakan spesies satu sama lain.

Langkah pertama yang dilakukan adalah menjalankan package yang akan digunakan selama proses analisis nantinya yaitu package e1071, caTools, dan class.

library(e1071)
library(caTools)
library(class)

Kemudian kita dapat load dataset yang akan digunakan yaitu iris dataset dalam program R. Kemudian kita dapat melihat struktur dari iris dataset dengan fungsi str().

# Loading data
data(iris)
# Structure
str(iris)

Dapat terlihat bahwa terdapat 150 observasi dari 3 jenis species iris.

Selanjutnya kita akan melakukan split data train dan test dengan perbandingan 70:30 dari keseluruhan 150 observasi tersebut.

# Splitting data into train
# and test data
split <- sample.split(iris, SplitRatio = 0.7)
train_cl <- subset(iris, split == "TRUE")
head(train_cl)
dim(train_cl)
test_cl <- subset(iris, split == "FALSE")
head(test_cl)
dim(test_cl)
70% untuk data train
30% untuk data test

Sebelumnya perlu diketahui bahwa pembagian data train dan data test dilakukan secara random/acak. Maka setiap menjalankan syntax akan diperoleh hasil yang berbeda.

Kemudian dilakukan penskalaan data untuk kolom 1 hingga 4 untuk membuat data pada kolom tersebut memiliki rentang nilai yang sama. Hal tersebut dilakukan untuk mencegah terjadinya masalah pada model machine learning yang akan dibuat nantinya.

# Feature Scaling
train_scale <- scale(train_cl[, 1:4])
test_scale <- scale(test_cl[, 1:4])

Langkah selanjutnya adalah membuat model KNN dengan membandingkan nilai akurasi dari beberapa k yang akan digunakan.

Model pertama dibangun dengan nilai k=1 dengan syntax sebagai berikut.

classifier_knn <- knn(train = train_scale,
test = test_scale,
cl = train_cl$Species,
k = 1)
# Confusion Matrix
cm <- table(test_cl$Species, classifier_knn)
cm
Confusion Matrix K=1

Pada confusion matrix tersebut dapat dilihat bahwa terdapat kesalahan klasifikasi untuk data iris spesies versicolor menjadi spesies virginica sebanyak 3. Kesalahan klasifikasi virginica menjadi versicolor sebanyak 3. Maka dari itu untuk memperoleh nilai akurasi digunakan syntax sebagai berikut.

misClassError <- mean(classifier_knn != test_cl$Species)
print(paste(‘Accuracy =’, 1-misClassError))

Diperoleh nilai akurasi untuk k=1 sebesar 0.933 atau 93.3%

Kemudian dilakukan perbandingan dengan nilai k=3,5,dan 7.

# K = 3
classifier_knn <- knn(train = train_scale,
test = test_scale,
cl = train_cl$Species,
k = 3)
cm <- table(test_cl$Species, classifier_knn)
cm
misClassError <- mean(classifier_knn != test_cl$Species)
print(paste(‘Accuracy =’, 1-misClassError))
# K = 5
classifier_knn <- knn(train = train_scale,
test = test_scale,
cl = train_cl$Species,
k = 5)
cm <- table(test_cl$Species, classifier_knn)
cm
misClassError <- mean(classifier_knn != test_cl$Species)
print(paste(‘Accuracy =’, 1-misClassError))
# K = 7
classifier_knn <- knn(train = train_scale,
test = test_scale,
cl = train_cl$Species,
k = 7)
cm <- table(test_cl$Species, classifier_knn)
cm
misClassError <- mean(classifier_knn != test_cl$Species)
print(paste(‘Accuracy =’, 1-misClassError))
Nilai Akurasi K=3
Nilai Akurasi K=5
Nilai Akurasi K=7

Maka diperoleh akurasi tertinggi terjadi pada model dengan k=5 yaitu sebesar 0.9667 atau 96.67%. Tampilan confusion matrix dari model KNN dengan k=5 adalah sebagai berikut.

Terlihat bahwa pada spesies setosa dan versicolor semua data test berhasil diklasifikasi dengan benar. Sedangkan 2 data untuk spesies virginica salah klasifikasi menjadi versicolor. Miss yang terjadi pada model ini paling sedikit dibandingkan model lainnya. Maka model ini dapat digunakan untuk analisis lebih lanjut yaitu memprediksi spesies bunga iris jika diketahui sepal length, petal length, sepal width, dan petal width.

Cukup sekian pembahasan analisis klasifikasi KNN untuk iris dataset menggunakan R. Semoga bermanfaat~

--

--

No responses yet