Klasifikasi K-NN Menggunakan Data Tooth Growth di R

QOLBIYATUL LINA
4 min readJul 8, 2019

--

Assalamu’alaikum teman-teman ^^

Ilustrasi Klasifikasi KNN (Sumber : www.towardsdatascience.com)

K-nearest neighbor adalah sebuah algoritma pelatihan untuk mengklasifikasikan suatu data baru berdasarkan kategori mayoritas banyaknya K data pelatihan yang terdekat dengannya (nearest neighbor). Tujuan utama dari algoritma ini adalah untuk mengklasifikasikan suatu obyek baru berdasarkan atribut dan sampel pelatihan. Pengklasifikasian tidak menggunakan sembarang model untuk pencocokan tetapi hanya berdasar memory penghitungan. Diberikan sebuah titik data baru, kemudian dicari sejumlah K obyek atau titik-titik pelatihan yang terdekat dengan titik baru tersebut. Klasifikasi dilakukan dengan memilih klas terbanyak yang terdapat dalam persekitaran obyek tersebut. Algoritma K nearest neighbor menggunakan klasifikasi berdasarkan persekitaran obyek sebagai nilai prediksi untuk data baru yang dicari klasnya.

Pada artikel ini, kita akan belajar menggunakan dataset yang ada di R untuk klasifikasi dengan metode K-NN. Dataset tersebut adalah Tooth Growth Dataset. Data Tooth Growth merupakan data dari pengaruh Vitamin C pada pertumbuhan gigi pada babi Guenia. Data Tooth Growth ini terdiri dari 60 observasi dan 3 variabel, sebagai berikut:

  • len : panjang gigi dan tipe data numerik
  • supp : Tipe Suplement dan tipe data factor
  • dose : dosis vitamin C mg/hari

Sebelum memulai analisis, pokok bahasan yang ada di artikel ini adalah :

  • Menggunakan Tooth Growth Dataset
  • Menggunakan K=5
  • Membuat prediksi data baru untuk melihat data baru tersebut masuk ke dalam kelompok yang mana

Baiklah, untuk memulai analisis terlebih dahulu panggil data Tooth Growth menggunakan perintah berikut.

data("ToothGrowth")
head(ToothGrowth)

Maka tampilan 6 data teratas dari output data tersebut seperti gambar berikut.

Data Tooth Growth

Karena variabel supp yang akan kita gunakan untuk klasifikasi berada di tengah, serasa kurang pas, maka saya akan menghapus variabel supp dan menggantinya dengan variabel gigi.kelas yang isi dari kedua variabel tersebut sama dengan perintah berikut.

gigi.kelas<-c(rep("VC",30),rep("OJ",30))
gigi.kelas

Setelah itu membuat data frame kembali penggabungan dari data sebelumnya dengan variabel gigi.kelas tersebut.

gigi.data<-data.frame(ToothGrowth[,-2],kelas=gigi.kelas)
head(gigi.data)

Maka tampilan outputnya seperti gambar berikut.

Saya akan membagi data train untuk melatih model machine learning dan data test untuk menguji model. Data train sebesar 50% dan test sebanyak 50% dari total data. Menurut sumber lainnya, pembagian data train dan data test menyebutkan pembagiannya ke dalam 70:30, 75:25, atau 80:20, kembali lagi kepada peneliti.

Kembali ke topik pembahasan, saya akan menggunakan data genap untuk data train, sedangkan data ganjil untuk data test, maka perintahnya sebagai berikut.

genap.gigi<-2*(1:30)-1
genap.gigi
train.gigi<-gigi.data[genap.gigi,]
train.gigi
test.gigi<-gigi.data[-genap.gigi,]
test.gigi

Selanjutnya, membuat model knn dengan k=5 pada data train dan data test dengan menggunakan perintah berikut.

gigi.knn<-knn(train.gigi[,-3],test.gigi[,-3],train.gigi[,3],k=5)
gigi.knn

Setelah model knn terbentuk, maka akan dilihat tingkat akurasi model tersebut dengan menggunakan data test untuk variabel gigi.kelas.

(table(gigi.knn,test.gigi[,3]))

Maka tampilat outputnya seperti gambar berikut.

Prediksi OJ yang benar ada 8 data dan 7 data diprediksi salah. Sedangkan untuk VC ada 6 data yang diprediksi benar dan 9 data diprediksi salah. Dari gambar diatas dapat dilihat bahwa tingkat akurasi yang dihasilkan oleh model cukup tinggi sebesar 46.7%. Secara manual, perhitungan akurasinya sebagai berikut:

Selain itu dapat juga menggunakan cross validation. Secara umum perlu cross validation ini adalah suatu pengujian untuk memvalidasi model pembelajaran model machine learning yang telah dibuat, secara sederhana perlu dilakukannya pengujian ini adalah kita tidak hanya dapat mengcocokkan model kita dengan data train yang kita punya untuk mengetahui kebaikan model ini dan berharap dapat bekerja secara akurat pada data yang nyata yang belum dilihat sebelumnya. Sehingga diperlukan suatu jaminan untuk dapat menggambarakn sebagian besar pola dari data yang sebenarnya, pengujiannya adalah cross validation.

gigi.cv<-knn.cv(ToothGrowth[,-2],ToothGrowth[,2],k=5)
table(ToothGrowth[,2],gigi.cv)

Dari gambar diatas dapat dilihat bahwa tingkat akurasi dengan menggunakan cross validation diperoleh akurasi sebesar 53.3%. Secara manual, perhitungan akurasinya sebagai berikut:

Karena tingkat akurasi nya masih cukup rendah, maka untuk meningkatkan akurasinya bisa dilakukan transformasi data atau dalam pembagian data train dan test dilakukan dengan perbandingan yang lain.

Setelah melihat akurasinya, akan dimasukkan data baru untuk melihat apakah data baru tersebut akan masuk ke dalam faktor VC atau OJ dengan menggunakan perintah berikut.

databaru<-cbind(5,0.1)
databaru
knn(ToothGrowth[,-2], databaru, gigi.kelas, k=5)hasil<- knn(ToothGrowth[,-2], databaru, gigi.kelas, k=5, prob = T)
hasil

Sehingga hasil dari tampilan output tersebut seperti gambar berikut.

Sehingga data baru tersebut dengan nilai variabel len sebesar 5 dan variabel dose sebesar 0.5 akan masuk ke dalam faktor VC.

Sekian dari saya, silahkan mencoba teman-teman ^^

--

--