k-Nearest Neighbor Classifier
Ditulis pada Januari 26, 2007 oleh Anto Satriyo Nugroho
Di milis indo-dm@yahoogroups.com, pak Budi (ITS) menyampaikan e-tutorial mengenai k-Nearest Neighbor Classifier. Tema ini sangat menarik bagisaya, karena metode ini sering saya pakai sebagai pembanding performa metode yang saya kembangkan. Walau algoritma k-NN sangat sederhana, tetapi performanya sangat handal. Issue terpenting pada k-NN adalah computational cost, karena dalam proses klasifikasi, seluruh/sebagian data dipakai untuk menentukan class dari test pattern. Beberapa point yang saya catat dari diskusi tsb. adalah sbb.
- k-NN yang dijelaskan dalam presentasi ini memakai seluruh data training-set untuk proses klasifikasi (complete storage type k-NN). Salah satu pendekatan lain adalah dengan memilih beberapa data yang mewakili untuk tiap class (prototype patterns), misalnya dengan mean vector dari data pada class tersebut. Jadi tiap class diwakili oleh satu prototype (mean vector). Kalau kasusnya binary classification, jumlah prototype nya 2. Kalau kasusnya 3 class, prototypenya 3, dst. Tetapi kalau memakai mean vector sebagai prototype untuk tiap class, tentunya decision boundary yang dihasilkan kurang memuaskan. Tiap class hanya dipisahkan oleh linear hyperplane yang ditarik lurus tepat ditengah dua buah prototype. Semakin banyak prototype, semakin halus hyperplane yang dibuat. Ada trade-off relation antara jumlah prototype (computational cost) dengan kualitas decision boundary yang dihasilkan. Apakah ada teknik lain yang bagus untuk memilih prototype tiap class ?
- Ditinjau dari algoritmanya, k-NN sensitif terhadap keberadaan noise & irrelevant input, dibandingkan dengan neural network misalnya. Dalam proses training neural network (perceptron), weight untuk atribut yang tidak memiliki kontribusi terhadap klasifikasi akan di-adjust agar nilainya mendekati 0. Tetapi dalam k-NN, tidak ada pembedaan weight/bobot untuk tiap atribut. Apakah k-NN memiliki solusi untuk hal ini ?
- k-NN masuk kategori supervised algorithm karena label data tetap dipakai dalam proses training, yaitu optimisasi nilai k (dan juga saat klasifikasi). Yang membedakan adalah kalau neural network, misalnya, pasangan data-label
dipakai untuk menentukan parameter vector (weights) dalam proses training. Setelah proses training selesai, training data itu “dibuang”, tidak diperlukan lagi dalam proses klasifikasi. Adapun k-NN termasuk kategori “memory based method”, yaitu seluruhnya atau sebagian dari training set tetap disimpan dan dipakai dalam proses klasifikasi. Yang satu keluarga dengan k-NN adalah SVM, dimana sebagian ata disimpan untuk klasifikasi(yaitu data yang terpilih sbg. support vector). Ciri dari memory based method a.l. proses trainingnya berlangsung cepat, sedangkan proses klasifikasi-nya lambat. - Penentuan nilai k yang tepat memakai cross validation (5, 10 folds), atau leave-one-out CV jika datanya berskala kecil (sering dijumpai pada clinical database)
- Analisa Cover yang membuktikan secara teori tingkat error estimasi 1-NN (k-NN dengan k=1) tidak akan lebih dari dua kali bayesian error [1]. Oleh Fukunaga [2], teori ini dibantah, bahwa dalam data yang berdimensi tinggi, tingkat error 1-NN bisa jadi lebih dari dua kali, tiga kali bahkan 4 kali daripada tingkat error bayes. Apakah hal ini berlaku juga untuk k>1 ? –> periksa buku Duda Hart
- Jarak yang dipilih (e.g. (Euclidean, Minkowski ) untuk menghitung similarity pattern pada k-NN perlu pakai coba-coba. Manhattan Distance robust terhadap data ekstrim (outlier).
- Teknik untuk mereduksi computational complexity pada proses klasifikasi k-NN dikupas di buku Duda-Hart. Yaitu
- Partial Distance : jarak dua titik tidak perlu dihitung dengan seluruh dimensi data yg ada. Cukup dimabil r dari d (dimensi otal). Jika dari r< d diketahui jarak antar dua titik besar, tdk perlu iteruskan utk semua dimensi. Ini mensyaratkan jenis jarak yg nondecreasing dengan bertambahnya dimensi.
- Search Tree
- Editing memakai diagram Voronoi. Data yang tidak berperan dalam training diabaikan, terutama titik data yang dikelilingi data lain dengan label yang sama.
- Apakah decision boundary yang dihasilkan k-NN memiliki karakteristik tertentu yang membedakannya dengan neural network, SVM dan metode klasifikasi yg lain ? Saya mencoba membandingkan output space yang dihasilkan oleh 1-NN dan MLP-Backprop untuk Spiral Data sebagaimana gambar di bawah. Hidden Neuron pada MLP masing-masing 10, 50, dan 100. Stopping Criteria pada proses pembelajaran MLP adalah MSE mencapai nilai 10^-4 atau maksimal 10^3 epochs. Gambar di bawah memperlihatkan bahwa MLP tidak mampu memisahkan secara sempurna data pada kedua class.
3-layer MLP trained by backprop with hidden neuron 10, 50, 100, respectively.
Update: Lihat juga catatan diskusi 2008 oleh mas Yudi.
Referensi
- Cover, T.M. and Hart, P.E.: Nearest neighbor pattern Classification, IEEE Trans. Inf. Theory, Vol.IT-13, No.1,
pp.21–27, 1967 - Fukunaga, K.: Bias of nearest neighbor error estimation, IEEE Trans. Pattern Analysis and Machine Intelligence, Vol.PAMI-9, No.1, pp.103–112, 1987




kalo boleh, saya pinjam tulisan bapak ttg k-nearest ini, karena kebetulan saya sedang mencoba meneliti menggunakan algoritma ini. Trims sebelum dan sesudahnya.
Silakan Mbak Iin. Saya senang kalau tulisan ini bermanfaat untuk orang banyak. Untuk gambar hasil eksperimen saya, sekiranya diperlukan boleh juga dipakai, selama menyebutkan sumber aslinya (URL blog ini).
Matur Nuhun Artikelnya,
Saya lagi penelitian ttg face recognition,
klasifikasi yang saya gunakan kNN,
data face 2 Dimensi, namun hasilnya kok tidak bagus, ya..
saya gunakan data training, kan harusnya mendekati 100%, namun ini hanya 67 %
Setelah saya cek, (data terdiri dari 47 sample dengan 6 kelas), kelas ke 1 - 2 dikenali 100%, kelas 3-4 diatas 60%, kelas 5-6 dibawah 20%
Apa ya sebabnya ?
Mas Arief,
Kalau melihat hasilnya, dugaan saya banyak sekali data di kelas 3-4 dan kelas 5-6 yang overlap dengan kelas 1-2. Coba diteliti error pada kelas 3-6 itu diklasifikasikan ke kelas mana ? Analisa errornya lebih baik pakai 1-NN dulu, jangan k-NN. Dengan begitu kita bisa memperkirakan distribusi data itu di feature space.
matur nuwun
sudah saya coba, dan hasilnya 100%,
termasuk untuk data testing-nya
Jika classifier saya gunakan Back Prop (BP) dengan 3 layer, hasilnya berkisar antara 96%-98%.
dengan BP tiap kali diulang classifikasi-nya memberikan hasil yang berbeda, memang begitu ya.. kalo pake Neural Network ?!
Terima kasih,
dan tak lupa saya ucapkan
Selamat Idul Fitri
Mohon Maaf Lahir Batin
Mas Arief,
1. Hasil neural network (MLP dilatih dg BP)
biasanya lebih rendah daripada k-NN yang
mengandalkan memory based learning.
k-NN sering dipakai dalam komparasi model, karena
memberikan hasil sub-optimal (mendekati
optimal), jika datanya “cukup banyak”.
Tetapi k-NN memiliki kelemahan di
recognition-time-nya, yang sangat
lambat, disamping itu memerlukan memory yg
besar karena harus menyimpan prototye data
(subset dari training set yang dipakai untuk
klasifikasi k-NN). Sedangkan neural network
(MLP-BP) normalnya menghasilkan model yang
lebih sederhana, dan hanya makan memory yang
jauh lebih kecil dibanding k-NN, karena yang
disimpan hanya weight-nya saja.
2. Ada kesalahan pada tulisan mas Arief yang
sangat sering terjadi.
BP bukan nama classifier, melainkan algoritma
pembelajaran. Sedangkan classifier-nya adalah
multilayer perceptron.
3. Hasil klasifikasi yg berbeda untuk tiap
pelatihan (dengan catatan parameternya tetap)
disebabkan oleh perbedaan weight yang
dihasilkan. Perbedaan weight yang dihasilkan
karena initial weight memakai bilangan random
yang berbeda untuk tiap kali trial. Saya
lebih suka memakai bilangan random yang fixed,
seed-nya konstan, tidak memakai seed yang
selalu berubah (spt. misalnya memakai waktu).
Keuntungannya kalau initial weight-nya selalu
sama, kita bisa membuat perbandingan hasil
dengan merubah parameter lain dari neural
network tsb. (banyaknya hidden neuron, learning
rate, sigmoid slope, dsb).
Kalau initial weight-nya selalu berubah,
kita tidak bisa membuat perbandingan fair
dari berbagai parameter network tsb.
Selamat idul fitri, dan mohon maaf lahir batin juga.
Assalamualaikum WrWb
Bapak bisa bantu saya, mendapatkan referensi tentang metode k-nearest neighbor ini. sekarang saya lagi mengerjakan Tugas akhir tapi kesulitan mendapatkan penjelasan lengkap tentang K-NN (kalau bisa berbahasa indonesia)ini.
Sudi kiranya bapak mau membantu saya, sebelumnya saya ucapkan terima kasih.
Wassalam…
Mas Maulied
Wa alaikum salam Wr Wb
Untuk penjelasan k-NN referensi yang bagus & terkenal adalah buku2 tema pattern recognition, tulisan Duda-Hart-Stork, atau Keisuke Fukunaga. Kesemuanya tertulis dalam bahasa Inggris. Tetapi kalau dalam bahasa Indonesia, saya tidak tahu apakah ada referensi yang baik atau tidak.
Wassalam
assalamualaikum pak anto
saya mahasiswa sedang mengejarkan tugas akhir tentang identifikasi suara bawah air dengan menggunakan nearest neighbor. suara2 untuk training sudah saya trasformasikan dengan fft. saya masih bingung dalam proses trainingnya. saya menggunakan matlab dalam tugas akhir ini. mohon bantuan bapak untuk menjelaskan hal ini. trimakasih sebelumnya
Mas Wakhid,
Saya biasa membuat program sendiri pakai bhs.C.
Wa alaikum salam Wr Wb
Nearest neighbor tidak mengenal fase training. Penentuan kategori sebuah test pattern dilakukan dengan cara mengukur jarak test pattern tersebut dengan semua prototype (subset dari training data yang dipakai untuk klasifikasi). Hasil klasifikasi itu adalah class dari prototype yang berjarak terdekat dengan test pattern.
Mengenai matlab saya menyerah deh, karena nggak memakai bahasa tsb.
ass… saya gina mahasiswa STTTelkom bandung, senang bisa menemukan blog2 yg membahas tentang bioinformatic. saya kebetulan sedang menyusun TA saya tentang iris recognition. analisi saya di feature ekstraksinya, rencanya saya akan menggunakan circular symmetric filter (CSF), dan matching nya menggunkan NFL (nearest feature line). kesulitan saya adalah ketika mencari referensi tentang CSf nya juga NFL nya, hanya sedikit org2 yg memakai metode tersebut. jika bapak mengetahui tentang kedua metode itu, mungkn saja bapak bisa share pengetahuan tentang itu dengan saya, saya akan sangat berterima kasih. atau mungkin menshare file2 referensi yg bapak punya tentang metode itu.
pak,saya mahasiswa yg sedang menyusun tugas akhir tentang klasifikasi dengan menggunakan weight adjusted k-nearest neighbor tetapi referensi tentang metode ini sedikit.apa metode ini cara kerjanya berdasarkan knn hanya diperbaiki sedikit?atau apakah bapak pny referensi lain?
terima kasih pak untuk jawabannya.
pak klo nearest neighbor dibandingkan dengan naive bayes classifier kira2 bisa ga(sebanding)?
perlu diadakan penelitian dahulu atau sudah jelas yg mana yg lebih bagus…
thanks for ur answer…
oh ya pak di tulisan bpk yg no 8 saya mo nanya juga apakah k-nn dan naive bayes decision boundary hasil klasifikasinya sama? atau ada yang membedakan?
[...] Anto Satriyo Nugroho juga membuat catatan tentang kNN Algorithm dari diskusi yang pernah dilakukan [...]
Pak Anto, sebetulnya masih banyak yang ingin saya ketahui tentang knn, namun referensi yang saya milki sangat terbatas (saya cuma punya buku dari Han & Kamber, Kaufmann, T. LArose, M. Kartandzic) untuk buku springer saya tidak ada, jadi saran dari bapak pd waktu lalu belum terlaksana. Inginnya sih ngobrol lagi langsung dengan bapak, seperti saat sebelumnya saya pernah belajar dgn bapak ttg SVM di kantor bapak, tapi mungkin saya harus menyesuaikan diri dengan waktu kerja bapak supaya tidak mengganggu. Alhamdulillah kartu nama dan no kontak ke bapak saya masih simpan. Trims pak sebelum dan sesudahnya.