k-Nearest Neighbor (k-NN) Menggunakan Matlab
Algoritma k-nearest neighbor (k-NN atau KNN) merupakan sebuah algoritma untuk melakukan klasifikasi terhadap objek berdasarkan data pembelajaran yang jaraknya paling dekat dengan objek tersebut.
Ilustrasi dari metode yang digunakan oleh algoritma k-nn ditunjukkan pada gambar di bawah ini:
Berikut ini merupakan contoh aplikasi pemrograman matlab untuk mengklasifikasi citra digital berdasarkan pola bentuk menggunakan algoritma k-nearest neighbor.
Pada contoh ini k-nn digunakan untuk mengklasifikasi bentuk dari citra apel, tulang, gajah, dan garpu.
Ciri yang digunakan untuk membedakan keempat bentuk dari citra tersebut adalah eccentricity dan metric
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 sebagai berikut:
clc;clear;close all; image_folder = 'data latih'; filenames = dir(fullfile(image_folder, '*.gif')); total_images = numel(filenames); 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]'; group = cell(60,1); group(1:15,:) = {'tulang'}; group(16:30,:) = {'apel'}; group(31:45,:) = {'gajah'}; group(46:60,:) = {'garpu'}; end figure, gscatter(metric',eccentricity',group,'rgbk','.',15) legend('Tulang pelatihan','Apel pelatihan','Gajah pelatihan','Garpu pelatihan',... 'Location','SouthWest') grid on image_folder_uji = 'data uji'; filenames_uji = dir(fullfile(image_folder_uji, '*.gif')); total_images_uji = numel(filenames_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',1,'Standardize',1); Class = predict(c,sample); figure, gscatter(metric',eccentricity',group,'rgbk','.',15) grid on hold on gscatter(metric_uji',eccentricity_uji',Class,[1 1 0; 1 0 1; 0 1 1; .5 .5 .5],'x',15); legend('Tulang pelatihan','Apel pelatihan','Gajah pelatihan','Garpu pelatihan',... 'Tulang pengujian','Garpu pengujian','Apel pengujian','Gajah pengujian',... 'Location','SouthWest') 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
8. Kelas keluaran yang dihasilkan dalam proses pengujian adalah sbb:
sehingga hasil perbandingan antara kelas keluaran dengan kelas target pada proses pengujian adalah:
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 objek pada citra yang diberikan.
File source code lengkap beserta citra pada pemrograman matlab di atas dapat diperoleh melalui halaman berikut ini: Source Code
Posted on April 21, 2016, in Data mining, Pengenalan Pola, Pengolahan Citra and tagged aplikasi knn sederhana matlab, aplikasi pengolahan citra dengan matlab, aplikasi pengolahan citra digital menggunakan matlab, aplikasi pengolahan citra menggunakan matlab, aplikasi program matlab pengolahan citra, cara klasifikasi citra menggunakan matlab, cara membuat algoritma klasifikasi citra menggunakan matlab, cara membuat algoritma knn di matlab, cara membuat aplikasi pengolahan citra digital menggunakan matlab, citra biner, contoh aplikasi pengolahan citra dengan matlab, contoh pengolahan citra digital matlab, contoh program matlab pengolahan citra, contoh program pengolahan citra digital menggunakan matlab, data mining knn nearest neighbor menggunakan matlab, identifikasi bentuk menggunakan algoritma knn k-nearest neighbor, k nearest neighbor knn menggunakan matlab, k nearest neighbor matlab, klasifikasi citra matlab menggunakan knn, knn k-nearest neighbor menggunakan matlab, knn matlab, knn nearest neighbor untuk mengklasifikasi pola bentuk citra digital, pemrograman matlab untuk klasifikasi pola bentuk citra, pengenalan pola menggunakan matlab, Pengolahan Citra Digital, pengolahan citra digital dan aplikasinya menggunakan matlab, pengolahan citra digital dengan matlab, pengolahan citra digital menggunakan matlab, source code matlab pengolahan citra, tutorial knn matlab, tutorial matlab untuk pengolahan citra. Bookmark the permalink. 29 Comments.
siang mas mau tanya, metode apa yang cocok untuk menentukan ukuran dan bentuk, misalnya untuk menentukan mutiara berdasarkan bentuk dan ukuran dan sebagainya,
siang juga bobond
materi mengenai hal tsb bisa dilihat pada laman berikut https://pemrogramanmatlab.com/pengolahan-citra-digital-menggunakan-matlab/ekstraksi-ciri-citra-digital/
terima kasih banyak mas, infonya sangat membantu
Sama sama bobond
malam mas, klo berbentuk citra gmna cara menentukan nilai k nya? apakah citranya harus diberikan nilai dulu?
dalam algoritma k-nn, nilai k adalah jumlah tetangga terdekat dari nilai masukan yang diujikan
assalamulaikum wr wb mas adi.
mas ada rujukan atau materi yang membahas tentang klasifikasi knn utk citra berdasarkan warna?
Waalaikumsalam khusnul
Semoga ke depan terdapat materi mengenai klasifikasi knn utk citra berdasarkan warna
asalamualaikum,
mas saya mau bertanya, apakah sesuaikah metode ekstrasi glcm dan klasifikasinya menggunakan metode knn.. apakah ada source code nya ya mas.. mohon bantuannya mas.. terima kasih banyak ya mas sebelumnya.
image_folder_uji = ‘data uji’;
filenames_uji = dir(fullfile(image_folder_uji, ‘*.gif’));
total_images_uji = numel(filenames_uji);
assalamulaikum wr wb mas adi. kalau data ujinya langsung gambar contohnya ‘image.bmp’ bukan file ‘data uji’, perlu diubah apa-apa aja ya mas? mohon bantuannya mas.
terima kasih banyak sebelumnya mas
Waalaikumsalam
File citra bisa langsung dibaca memggunakan perintah imread
Class = predict(c,sample);
Assalamualaikum mas, kalau untuk menampilkan hasilnya di handles.edit bukan di camond windows bisa tukar pake apa ya mas? mohon bantuanya mas.
Waalaikumsalam
Bisa menggunakan perintah set(handles.edit1,’String’,Class)
selamat siang mas, maaf mau nanya, kalo untuk matlab R2013a syntaxnya gmn ya? soalnya saya nyoba error terus,
selamat siang
seluruh file source code lengkap beserta data citra hanya dapat diperoleh melalui tokopedia dalam paket buku modul tutorial dan source code pemrograman matlab
Sehingga bisa langsung dirunning dan dikembangkan
training1 = xlsread(‘training’);
group = training1(:,17);
training = [training1(:,1) training1(:,2) training1(:,3) training1(:,4) training1(:,5) training1(:,6) training1(:,7) training1(:,8) training1(:,9) training1(:,10) training1(:,11) training1(:,12) training1(:,13) training1(:,14) training1(:,15) training1(:,16)];
Z = [entropy0 entropy45 entropy90 entropy135 energy0 energy45 energy90 energy135 homogen0 homogen45 homogen90 homogen135];
hasil1 = knnclassify(Z, training, group);
if hasil1 ==1
klasifikasi=’Daging tikus’;
elseif hasil1 ==2
klasifikasi=’Daging Babi’;
end
set(handles.edit1,’string’,klasifikasi);
mas adi ,kalau gini knnclassify di ganti fitcknn gimana ya?
saya bingung merubah penulisanya
Terimakasihh
Bisa dipelajari lebih lanjut mengenai pemrograman matlab
Selamat malam mas, maaf mau tanya apakah ada rujukan pembelajaran tentang metode knn berdasarkan warna citra saja? Terimakasih
Assalamualaiku mas, kalau untuk menampilkan jarak hasil klasifikasinya bagaimana mas?
Waalaikumsalam
Bisa menggunakan persamaan euclidean distance
selamat malam mas, sekedar tanya untuk yang sourcecode knn bagian ini pada pembelian tokopedia apakah sudah langsung bisa dirun dan terdapat contoh dataset nya? makasih
Malam
Source code dan data lengkap ada dalam paket di tokopedia sehingga bisa langsung dirunning tanpa error dan bisa dikembangkan lebih lanjut
mas mau tanya metode identifikasi biasa cocok menggukana metode apa ya?
makasi mas
Materi dan metode yang ada pada halaman di atas bisa dicoba diimplementasikan
Halo mas Adi.. untuk klasifikasi KNN apa kita harus menentukan kelasnya dluan untuk data latih Misalnya 1= baik 2= tidak baik.
dan untuk data ujinya perlu juga kah mas ditentukannya kelas.Terimakasih🙏
Iya perlu ditentukan baik untuk data latih maupun data uji
bisa bagi projectnya
bisa tampilkan tutorialnya di youtube
siang mas
untuk hasil klasifikasinya jika ingin ditampilkan dalam bentuk numerik(nilai) baagaimana ?
bukan hanya dalam bentuk tulisan tapi mau dalam bentuk nilainya