k-Nearest Neighbor (k-NN)
Algoritma k-nearest neighbor (k-NN atau KNN) adalah sebuah metode untuk melakukan klasifikasi terhadap objek berdasarkan data pembelajaran yang jaraknya paling dekat dengan objek tersebut. Ilustrasi dari metode yang digunakan oleh algoritma k-nn dalam mengklasifikasikan objek ditunjukkan pada gambar di bawah ini:
Berikut ini merupakan contoh aplikasi pemrograman matlab untuk mengklasifikasikan citra digital berdasarkan pola bentuknya. Pada contoh ini k-nn digunakan untuk mengklasifikasikan bentuk dari citra apel, tulang, gajah, dan garpu. Ciri yang digunakan untuk membedakan keempat bentuk dari citra tersebut adalah eccentricity dan metric (materi mengenai ekstraksi ciri dapat dilihat pada laman berikut: link). Pemrograman matlab menggunakan algoritma k-nearest neighbor pada contoh ini dapat dijalankan minimal menggunakan matlab versi r2014a karena menggunakan fungsi baru yaitu fitcknn (fit k-nearest neighbor classifier)
Langkah-langkah pemrograman matlab untuk mengklasifikasikan bentuk suatu objek dalam citra digital yaitu:
1. Mempersiapkan citra untuk proses pelatihan. Pada proses tersebut digunakan 60 citra yang terdiri dari 15 citra apel, 15 citra tulang, 15 citra gajah, dan 15 citra garpu
2. Mempersiapkan citra untuk proses pengujian. Pada proses tersebut digunakan 20 citra yang terdiri dari 5 citra apel, 5 citra tulang, 5 citra gajah, dan 5 citra garpu
3. Setelah citra untuk proses pelatihan dan pengujian disiapkan, dilakukan pemrograman untuk kedua proses tersebut. Source code untuk mengklasifikasi bentuk suatu objek dalam citra digital menggunakan algoritma k-nearest neighbor adalah
clc;clear;close all; image_folder = 'data latih'; filenames = dir(fullfile(image_folder, '*.gif')); total_images = numel(filenames); area = zeros(1,total_images); perimeter = zeros(1,total_images); metric = zeros(1,total_images); eccentricity = zeros(1,total_images); for n = 1:total_images full_name= fullfile(image_folder, filenames(n).name); our_images = logical(imread(full_name)); our_images = bwconvhull(our_images,'objects'); stats = regionprops(our_images,'Area','Perimeter','Eccentricity'); area(n) = stats.Area; perimeter(n) = stats.Perimeter; metric(n) = 4*pi*area(n)/(perimeter(n)^2); eccentricity(n) = stats.Eccentricity; training = [metric;eccentricity]'; end group = cell(60,1); group(1:15,:) = {'apel'}; group(16:30,:) = {'tulang'}; group(31:45,:) = {'gajah'}; group(46:60,:) = {'garpu'}; figure, gscatter(metric,eccentricity,group,'rgbk','x',10) grid on image_folder_uji = 'data uji'; filenames_uji = dir(fullfile(image_folder_uji, '*.gif')); total_images_uji = numel(filenames_uji); area_uji = zeros(1,total_images_uji); perimeter_uji = zeros(1,total_images_uji); metric_uji = zeros(1,total_images_uji); eccentricity_uji = zeros(1,total_images_uji); for n = 1:total_images_uji full_name_uji = fullfile(image_folder_uji, filenames_uji(n).name); our_images_uji = logical(imread(full_name_uji)); our_images_uji = bwconvhull(our_images_uji,'objects'); stats_uji = regionprops(our_images_uji,'Area','Perimeter','Eccentricity'); area_uji(n) = stats_uji.Area; perimeter_uji(n) = stats_uji.Perimeter; metric_uji(n) = (4*pi*area_uji(n))./(perimeter_uji(n).^2); eccentricity_uji(n) = stats_uji.Eccentricity; sample = [metric_uji;eccentricity_uji]'; end c = fitcknn(training, group,'NumNeighbors',5,'Standardize',1); Class = predict(c,sample); figure, gscatter(metric,eccentricity,group,'rgbk','x',10) grid on hold on gscatter(sample(:,1),sample(:,2),Class,'cmyk','.',20); hold on; legend('Apel Pelatihan','Tulang Pelatihan','Gajah Pelatihan','Garpu Pelatihan', ... 'Apel Pengujian','Garpu Pengujian','Tulang Pengujian','Gajah Pengujian','Location','best'); hold off;
4. Sehingga pada proses pelatihan diperoleh hasil berupa grafik seperti pada gambar berikut
Pada grafik tersebut terlihat distribusi data (nilai metric dan ecentricity) pada masing-masing kelas grup (apel, tulang, gajah, garpu). Pada proses pengujian, suatu data uji dikatakan masuk ke dalam kelas grup apel apabila tetangga terdekat dari data uji tersebut dominan dengan kelas grup A
5. Pada proses pengujian dihasilkan grafik seperti pada gambar di bawah ini
6. Kelas keluaran yang dihasilkan dalam proses pengujian adalah sbb
sehingga hasil perbandingan antara kelas keluaran dengan kelas target pada proses pengujian adalah sbb
Berdasarkan tabel di atas, tampak bahwa terdapat empat buah data uji yang diklasifikasikan ke dalam kelas yang salah (tidak sesuai dengan kelas target). Sehingga akurasi sistem dalam mengklasifikasikan bentuk objek adalah (16/20) x 100% = 80%. Nilai akurasi tersebut menunjukkan bahwa algoritma k-nearest neighbor cukup baik dalam mengklasifikasikan bentuk suatu objek dalam citra digital
File source code lengkap beserta citra untuk mengklasifikasikan bentuk suatu objek dalam citra digital menggunakan algoritma k-nearest neighbor dapat diperoleh melalui halaman berikut ini: Source Code
selamat malam mas.
sya mau nnyak, disini kan mas untuk proses pengklasifikasiannya menggunakan function matlab bawaannya yaitu fitcknn(training, group,’NumNeighbors’,1,’Standardize’,1);. nah mas kira2 bsa gak kita melakukan klasifikasix dibuat tanpa menggunakan function dari matlabx ???
terima kasih sebelumnya mas.
selamat malam ary swantika
bisa, prinsip dari knn adalah mencari jarak antara data dg kelas yang terdekat
Selamat malam mas mau nanya lagi nih .,.
Boleh kah di kombinasikan antara algoritma knn dengan Neural Network Backprop ??
Mohon penjelasannya kanda ….
knn dapat dikombinasikan dg jst
knn digunakan dalam proses seleksi ciri/fitur sedangkan jst digunakan untuk algoritma klasifikasi
bisa minta no Tlpnya
mas minta nomor Tlpnya??
Mas Adi, apakah bisa untuk menampilkan 4 inputan pada gscatter? karena saya menggunakan glcm ordo 2 begitu Mas
terima kasih sebelumny
Tidak bisa antonius
gscatter maksimal 3 masukan
meskipun tidak bisa ditampilkan, algoritma k-nn tetap dapat dilakukan
terima kasih atas bantuan yg sebelumnya,
saya mau nanya lagi,,
program sya pkai KNN,,
saya bingung, apakah KNN dan ueclidean itu sama?
knn merupakan algoritma klasifikasi
penghitungan jarak antar data dalam algoritma knn dapat menggunakan berbagai persamaan, salah satunya adalah persamaan euclidean distance
Mas Adi saya mau bertanya
saya kan sudah membuat klasifikasi untuk sebuah citra, nah yg saya inginkan adalah disaat saya menginput gambar yang tidak sesuai (katakanlah saya membuat pendeteksi citra mata, namun yg saya masukkan adalah citra meja/pemandangan/citra acak apalah itu), bgmn caranya mas?
saya menggunakan KNN sebagai klasifikasi melalui Classification Learner App
Maaf kurang, maksud saya yg saya inginkan disaat saya memasukkan citra yg tidak sesuai, nanti keluarannya adalah “citra tidak dikenali/tidak sesuai”
Saras bisa menambahkan satu kelas lagi pada proses pengenalannya yaitu kelas tidak dikenali atau unknown
mas adi saya mau minta saran. saya sdg menganalisis ukuran fisik beras. saya menghitung berdasarkan 4 kategori panjang beras (menggunakan majoraxislength). menurut mas adi, nilai data latih apa yg dibutuhkan untuk dimasukkan kedalam metode KNN? apa hanya majoraxeslength atau ditambah eccentricity, area, perimeter dll?
Betul prasidya
Sebaiknya ditambahkan
ciri morfologi seperti metric dan eccentricity
ciri ukuran seperti mayor axis length, area, dan perimeter
ciri warna seperti nilai r, g, b
dan ciri tekstur seperti glcm, gabor, wavelet
Semua source code yg saya upload sudah saya coba dan tidak error
Source code dan data pada materi di atas dapat diperoleh pada halaman berikut ini
https://pemrogramanmatlab.com/source-code-gui-matlab/
Assalamu’alaikum Warahmatullahi Wabarakatuh mas adi, kalau boleh tahu apa perbedaan Algoritma KNN dengan MKNN mas, kalau ada referensi mengenai MKNN mohon di share ya mas. Terima Kasih
Waalaikumsalam hanafi
Semoga ke depan terdapat materi atau referensi mengenai MKNN
Oke mas adi, Terima Kasih sebelumnya
assalamua’alaikum mas adi,
mas adi saya mau nanya. knn kan menggunakan jarak tetangga terdekat, untuk menampilkan nilai jaraknya itu bisa tampil di gui atau command windows gimana caranya ya mas?
mas adi mau tanya, utuk menambahkan perhitungan akurasi yang di dapat bagaiman?
mohon pencerahaannya
Perhitungan akurasi bisa dilakukan dengan membagi jumlah data yang diklasifikasikan secara benar dengan jumlah total data kemudian dikalikan 100%
permisi mas adi , apa boleh sekiranya meminta file gambar 60 citra yang terdiri dari 15 citra apel, 15 citra tulang, 15 citra gajah, dan 15 citra garpu untuk proses pelatihan dan file gambar 20 citra yang terdiri dari 5 citra apel, 5 citra tulang, 5 citra gajah, dan 5 citra garpu untuk proses pengujian nya ? untuk bimbingan belajar dan mencoba di matlab.
terimakasih
Source code di atas tidak bisa dijalankan jika hanya dicopypaste saja
Source code lengkap bisa diperoleh melalui tokopedia sehingga bisa langsung dirunning dan dikembangkan
Assalamualaikum mas adi apakah metode KNN bisa diterapkan pada CBIR warna. Bentuk dan tekstur. Terimakasih
Mohon penjelasannya
Waalaikumsalam
Bisa dicoba diimplementasikan metode knn pada cbir warna, bentuk, dan tekstur
assalamulaikum mas adi, kalau deteksi bangunan dari citra satelit dengan knn, citra latihnya berupa banyak citra tipe tipe bangunan, satu gambar satu objek bangunan (seperti contoh citra latih diatas), kemudia citra ujinya berupa satu gambar dengan banyak objek bangunan didalamnya yang akan di klasifikasikan berdasarkan citra latih dengan metode knn, apakah bisa seperti ini?
Waalaikumsalam
Bisa dicoba diimplementasikan metode tersebut
ok terimakasih mas
Baik sama sama
terimakasih mas adi. bukunya anda sangat sangat manjur.
Sama sama
mas, kenpa menggunakan ciri eccentricity dan matric untuk mengklasifikasikan objeknya??? kenapa tidak luas kelililing dan lain lain ???
Bisa dicoba menggunakan ekstraksi ciri yang lain
Selamat pagi ,mas Adi saya mau tanya apakah bisa metode knn mengklasifikasi objek hanya berdasarkan warna saja?
Dan untuk pembahasan mengenai klasifikasi citra berdasarkan fitur warna menggunakan metode knn apakah ada?
Terimakasih
Ada banyak source code mengenai knn dan ekstraksi ciri warna, bisa dipelajari dan dikembangkan
selamat malam, mas Adi saya mau tanya apakah bisa metode knn mengklasifikasikan obyek gerakan tangan berdasarkan kontur dan data latihnya? soalnya metode knn adalah program skripsi saya
Selamat malam
Metode knn bisa dicoba untuk mengklasifikasikan obyek gerakan tangan berdasarkan kontur dan data latihnya
Permisi mas Adi. Saya mau bertanya mengenai ekstrasi ciri. Saya sedang melakukan penelitian mengenai Image Processing mas, yang berjudul “Identifikasi Tingkat kematangan Tomat dengan Image Processing Menggunakan Metode RGB”. Disini saya hanya melakukan perbandingan Kadar Warna RGB saja. Di dalam situ apakah harus memakai Kurtosis, Variance, Skewness, STD, Entropy mas?
Tidak harus, bisa menggunakan nilai rata-rata saja
Berarti nanti sintaksnya hanya “meanval = mean2(Img);” gitu ya mas?
bisa dicoba
Assalamualaikum mas kenapa pas saya coba di bagian
c = fitcknn(training, group,’NumNeighbors’,5,’Standardize’,1);
Error yah
Source code beserta data lengkap bisa dibeli di tokopedia sehingga bisa langsung dijalankan tanpa error
Pingback: Rendysaputra_Tugas_011170046