Naive Bayes
K-means Clustering merupakan salah satu metode data clustering non hirarki yang berusaha mempartisi data yang ada ke dalam satu atau lebih cluster/kelompok. Metode ini mempartisi data ke dalam cluster/kelompok sehingga data yang memiliki karakteristik yang sama dikelompokkan ke dalam satu cluster yang sama dan data yang mempunyai karakteristik yang berbeda dikelompokkan ke dalam kelompok yang lain.
Sedangkan Naive Bayes Classifier merupakan salah satu metode machine learning yang memanfaatkan perhitungan probabilitas dan statistik. Metode ini dikemukakan oleh ilmuwan Inggris yaitu Thomas Bayes untuk memprediksi probabilitas di masa depan berdasarkan pengalaman di masa sebelumnya.
Berikut ini merupakan contoh aplikasi pemrograman matlab (menggunakan Matlab R2015b) mengenai pola tekstur citra menggunakan algoritma k means clustering dan naive bayes classifier. Citra yang digunakan adalah citra tekstur Brodatz sejumlah 112 buah seperti tampak pada gambar di bawah ini:
Langkah pertama yang dilakukan adalah melakukan ekstraksi ciri tekstur citra menggunakan metode Gray Level Co-Occurence Matrix (GLCM). Metode ini pertama kali dikenalkan oleh Robert M Haralick (bersama dengan K. Shanmugam and I. Dinstein) dalam publikasi yang berjudul “Textural Features for Image Classification” pada IEEE Transactions on Systems, Man, and Cybernetics, Vol. SMC-3, No. 6, November 1973, pp. 610-621. Prinsip dari metode ini yaitu menghitung probabilitas hubungan ketetanggaan antara dua piksel pada jarak dan orientasi sudut tertentu. Pendekatan ini bekerja dengan membentuk sebuah matriks kookurensi dari data citra, dilanjutkan dengan menentukan ciri sebagai fungsi dari matriks antara tersebut.
Kookurensi berarti kejadian bersama, yaitu jumlah kejadian satu level nilai piksel bertetangga dengan satu level nilai piksel lain dalam jarak (d) dan orientasi sudut (θ) tertentu. Jarak dinyatakan dalam piksel dan orientasi dinyatakan dalam derajat. Orientasi dibentuk dalam empat arah sudut dengan interval sudut 45º , yaitu 0º, 45º, 90º, dan 135º. Sedangkan jarak antar piksel dapat ditetapkan sebesar 1 piksel, 2 piksel, atau lebih.
Matriks kookurensi merupakan matriks bujursangkar dengan jumlah elemen sebanyak kuadrat jumlah level intensitas piksel pada citra. Setiap titik (p,q) pada matriks kookurensi berorientasi berisi peluang kejadian piksel bernilai p bertetangga dengan piksel bernilai q pada jarak d serta orientasi θ dan (180º-θ).
Parameter tekstur yang dapat diekstrak dengan metode GLCM adalah angular second moment, contrast, correlation, variance, inverse difference moment, sum average, sum variance, sum entropy, entropy, difference variance, difference entropy, dan information measures of correlation.
Namun pada contoh ini, hanya menggunakan dua parameter yaitu contrast dan correlation. Kedua parameter tersebut dijadikan sebagai nilai masukan dalam algoritma k means dan naive bayes.
Algoritma k means digunakan untuk mengkluster 112 citra tekstur brodatz menjadi tiga kelompok.
Sedangkan algoritma naive bayes digunakan untuk mengklasifikasikan citra dengan target berupa kelas keluaran dari algoritma k means.
Hasil keluaran algoritma naive bayes kemudian dibandingkan dengan hasil keluaran pada algoritma k means sehingga diperoleh nilai akurasi.
Koding untuk membaca citra, melakukan ekstraksi ciri tekstur, dan clustering adalah sebagai berikut:
clc;clear;close all; image_folder = 'Original Brodatz'; filenames = dir(fullfile(image_folder, '*.gif')); total_images = numel(filenames); for n = 1:total_images full_name = fullfile(image_folder, filenames(n).name); Img = imread(full_name); GLCM = graycomatrix(Img,'Offset',[0 1; -1 1; -1 0; -1 -1]); stats = graycoprops(GLCM,{'contrast','correlation','energy','homogeneity'}); CON(n) = mean(stats.Contrast); CORR(n) = mean(stats.Correlation); X = [CON;CORR]'; end opts = statset('Display','final'); [idx,C] = kmeans(X,3,'Distance','sqeuclidean',... 'Replicates',5,'Options',opts); figure; plot(X(idx==2,1),X(idx==2,2),'r.','MarkerSize',24) hold on plot(X(idx==1,1),X(idx==1,2),'g.','MarkerSize',24) plot(X(idx==3,1),X(idx==3,2),'b.','MarkerSize',24) plot(C(:,1),C(:,2),'kx',... 'MarkerSize',15,'LineWidth',3) legend('Cluster 1','Cluster 2','Cluster 3','Centroids',... 'Location','best') title('Cluster Assignments and Centroids') xlabel('Contrast') ylabel('Correlation') h = gca; xlim(h.XLim+.5*[-1,1]) ylim(h.YLim+.5*[-1,1]) hold off
sehingga diperoleh grafik keluaran seperti pada gambar berikut:
Grafik di atas menunjukkan bahwa algoritma k means telah mengelompokkan 112 citra tekstur brodatz menjadi tiga kelompok (Cluster 1, Cluster 2, dan Cluster 3).
Kemudian kelompok pada masing-masing citra tersebut dijadikan sebagai target keluaran pada algoritma naive bayes untuk melakukan klasifikasi.
Koding untuk melakukan klasifikasi menggunakan algoritma naive bayes adalah:
Y = cell(numel(idx),1); for n = 1:numel(Y) if idx(n,:) == 1 Y{n,:} = 'Cluster 1'; elseif idx(n,:) == 2 Y{n,:} = 'Cluster 2'; else Y{n,:} = 'Cluster 3'; end end Mdl = fitcnb(X,Y); figure gscatter(X(:,1),X(:,2),Y); h = gca; xylim = [h.XLim h.YLim]; % Get current axis limits hold on Params = cell2mat(Mdl.DistributionParameters); Mu = Params(2*(1:3)-1,1:2); % Extract the means Sigma = zeros(2,2,3); for j = 1:3 Sigma(:,:,j) = diag(Params(2*j,:)); % Extract the standard deviations ezcontour(@(x1,x2)mvnpdf([x1,x2],Mu(j,:),Sigma(:,:,j)),... xylim+0.5*[-1,1,-1,1]) ... % Draw contours for the multivariate normal distributions end title('Naive Bayes Classifier') xlabel('Contrast') ylabel('Correlation') legend('Cluster 1','Cluster 2','Cluster 3',... 'Location','best') hold off isLabels = resubPredict(Mdl); accuracy = sum(strcmp(isLabels,Y))/numel(Y)*100
sehingga diperoleh grafik keluaran seperti pada gambar di bawah ini:
Grafik tersebut menunjukkan bahwa algoritma naive bayes telah mengklasifikasikan citra tekstur pada masing-masing kelompok/kelas.
Sebagai validasi, kelas keluaran dari algoritma naive bayes kemudian dibandingkan dengan kelas keluaran dari algoritma k means.
Pada kelas keluaran algoritma naive bayes terdapat 108 citra yang memiliki kelas yang sama dengan kelas keluaran dari algoritma k means sehingga diperoeh akurasi sebesar 108/112*100 = 96.4286%.
Nilai akurasi tersebut menunjukkan bahwa algoritma naive bayes mampu mengklasifikasi citra tekstur dengan sangat baik.
File source code lengkap beserta citra tekstur brodatz pada pengenalan pola di atas dapat diperoleh melalui halaman berikut ini: Source Code
Penerapan algoritma naive bayes untuk klasifikasi citra sayuran dapat dilihat pada video tutorial berikut ini:

Assalamu ALaikum mas, saya mau nanya nih, saya kan udah punya database penyakit kulit,trus saya mau klasifikasikan menggunakan naive bayes, gimana yah kode guinya bang, ?
dalam halaman berikut terdapat berbagai macam koding GUI matlab
silakan untuk dipilih salah satu dan diimplementasikan
https://pemrogramanmatlab.com/source-code-gui-matlab/
kalau penerapan naive bayes nya tampa menggunakan k means bang, gmn yah, ? soalnya yang saya mau klasifikasikan yang ada di dalam database,
maaf saya masih newbe, trimakasih
Mas Adi. Kalo data sudah dilatih menggunakan naive bayes, untuk pengujian, syntaxnya bagaimana ya terhada model yg sudah dilatih menggunakan naive bayes ? Terima kasih
syntax untuk menguji naive bayes sudah ada pada materi di atas yaitu perintah resubPredict
Assalamu’alaikum Warahmatullahi Wabarakatuh, mas adi. Di Matlab ada gak tools untuk naive bayes ya mas ?, seperti JST (nntool) dan Fuzzy (fuzzy)
Waalaikumsalam hanafi
Naive bayes hanya ada dalam bentuk function di matlab
Oke mas adi, terima kasih mas
Baik sama sama
Mau tanya kalo di matlab kan ada function knnclassify
Kalo untuk naive bayes pakek function apa yang sama dengan knnclassify?
Pingback: Rendysaputra_Tugas_011170046