K-nearest neighbor (KNN)

SUHARMI -
3 min readJul 9, 2019

--

Dengan R

KNN

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.

Untuk lebih memahami penulis akan memberikan contoh penggunakan KNN dan KNN cross menggunakan data Yogurt atau data Pilihan Merek untuk Yogurt yang bersumber dari https://vincentarelbundock.github.io/Rdatasets/datasets.html. Untuk menggunakan dataset ini penulis melakukan install package Ecdat. Package Ecdat merupakan data sets Ekonometrika. Kemudian penulis mengaktifkan package Ecdat dan memanggil data

library(Ecdat)

Star=Yogurt

View(Yogurt)

Gambar 1. Tampilan Data Yogurt

Pada data Yogurt terdiri dari 10 variabel, dimana variabel id adalah pengidentifikasi individu, kemudian variabel choice adalah jenis dari merek yogurt yaitu yoplait, dannon, hiland, weight (weight watcher). Untuk variabel feat adalah variabel yang mengenai apakah ada iklan fitur koran untuk masing-masing merek, dan price adalah harga untuk masing-masing merek. Penulis akan menggunakan variabel price.yoplait, price.danno, price.hila, price.weight, dan choice. Langkah pertama ada mengatahui gambaran data Yogurt untuk lebih memahami data dengan menampilkan summary data yogurt.

summary(Yogurt)

Gambar 2. Summary Data Yogurt

Setelah mengatahui rangkuman data yogurt selanjutnya pembuatan kelas untuk masing-masing merek sebagai target. Berdasarkan hasil summary didapatkan merek Yoplait berjumlah 818, dannon berjumlah 970, hiland berjumlah 71, dan merek weight adalah 553.

yogurt_kelas<- c(rep(“y”,818),rep(“d”,970),rep(“h”,71),rep(“w”,553))

Selanjutnya pembuatan data frame dan dalam contoh kali ini, data yogurt akan diambil 4 variabel saja, sementara variabel choice diganti dengan yogurt.kelas.

yogurt<-data.frame(Yogurt[,6:9],species=yogurt_kelas)

Kemudian membagi data ganjil genap, dimana mengambil urutan data yogurt bernomor ganjil digunakan sebagai data pelatihan. Sedangkan sisanya, data bernomor genap atau (-ganjil) digunakan sebagai data uji.

genap.n<-2*(1:1206)-1 yogurt.latihan<-Yogurt[genap.n,] yogurt.uji<-Yogurt[-genap.n,]

Pada perintah knn urutan script yang dipakai adalah knn(data.latihan, data.uji, target.kelas, banyak.kelas, probabilitas= T atau F), sehingga pada data latihan dan data uji tidak disertakan target mereknya ([,-10]), namun diletakkan tersendiri pada target.kelas yakni perintah yogurt.latihan[,10].

yogurt.knn<-knn(yogurt.latihan[,-10],yogurt.uji[,-10], yogurt.latihan[,10], k=5)

Kemudian untuk memudahkan melihat hasilnya dapat kita tampilkan dalam bentuk tabel hasil klasifikasi seperti berikut

(table(yogurt.knn,yogurt.uji[,10]))

Gambar 3. Hasil Klasifikasi Data Yogurt

Berdasarkan hasil output terlihat bahwa terdapat 6 merek yogurt Yoplait yang tidak sesuai dan masuk menjadi Hiland, dengan demikian terdapat misklasifikasi sebesar 6/1206. Selain itu juga terdapat satu Weight yang tidak sesuai dan masuk menjadi Hiland, dengan semikian terdapat misklasifikasi sebesar 1/1206. Untuk melihat hasil klasifikasi secara visual penulis menggunakan plot dengan script berikut.

pairs(yogurt.uji[,6:9],pch=as.character(yogurt.uji[,10]),col

=c(4,2)

[(yogurt.uji$choice!=yogurt.knn)+1])

Gambar 4. Plot Hasil Klasifikasi Data Yogurt

Berdasarkan hasil plot pasangan variabel diatas nampak bahwa ada banyak warna merah pada masing-masing merek yang menunjukan tidak sesuai klasifikasinya, dan warna biru menujukan sesuai klasifikasi.

--

--