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:

  1. Muharram Alim Jaya

    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, ?

  2. dalam halaman berikut terdapat berbagai macam koding GUI matlab
    silakan untuk dipilih salah satu dan diimplementasikan

    Source Code GUI

    • Muharram Alim Jaya

      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

  3. Mas Adi. Kalo data sudah dilatih menggunakan naive bayes, untuk pengujian, syntaxnya bagaimana ya terhada model yg sudah dilatih menggunakan naive bayes ? Terima kasih

  4. Assalamu’alaikum Warahmatullahi Wabarakatuh, mas adi. Di Matlab ada gak tools untuk naive bayes ya mas ?, seperti JST (nntool) dan Fuzzy (fuzzy)

  5. Oke mas adi, terima kasih mas

  6. Mau tanya kalo di matlab kan ada function knnclassify
    Kalo untuk naive bayes pakek function apa yang sama dengan knnclassify?

  7. Assalamualaikum kak, izin belajar lebih mendalam lagi ya mengenai naive bayes-nya makasih ilmunya kak dan semoga bermanfaat selalu kak 🙂 Terima kasih.

  1. Pingback: Rendysaputra_Tugas_011170046

Leave a comment