Iklan

Latest Post


k-Nearest Neighbor (k-NN)

Bhumi Literasi
Jumat, 13 November 2020, November 13, 2020 WIB Last Updated 2023-03-24T02:12:35Z

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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

Komentar

Tampilkan