Pada ilustrasi di atas, klasifikasi sebetulnya bisa dilakukan menggunakan variabel a saja
(perhatikan garis vertikal yang memisahkan kedua kelas secara linear). Namun, kNN tidak
dapat mengetahui bahwa variabel b tidak informatif. Alhasil, dua instance kelas biru
terklasifikasi dengan salah, karena kedua instance tersebut dekat dengan instance kelas jingga
dalam dimensi b. Andaikan kita hanya menggunakan variabel a dan membuang variabel b,
semua instance akan terklasifikasi dengan tepat.Pemilihan variabel sebelum menerapkan kNN
dapat membantu menangani permasalahan di atas. Selain itu, kita juga bisa memberi bobot
pada variabel dalam perhitungan jarak antar-instance. Variabel yang kita tahu noninformatif
kita beri bobot yang kecil, misalnya:
Akan diproduksi kembali kertas tissue dengan attribute X1=7 dan X2=4, tanpa harus
mengeluarkan biaya untuk melakukan survey, maka dapat diklasifikasikan kertas tissue
tersebut termasuk yang baik atau jelek.
Dengan mengurutkan jarak terkecil, semisal diambil K=3, maka perbandingan nya adalah 2
(Baik) >1 (Jelek). Maka dapat disimpulkan kertas tissue dengan attribute X1=7 dan X2=4
masuk ke kelas Baik.
Contoh penerapan matlab
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;
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
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
6. 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.