Kaedah Bayes Untuk Klasifikasi
February 18th, 2008
Matlab 6.1 digunakan dalam pembuatan kode program m-file nya. Program mempunyai 2 fungsi utama yaitu pertama untuk klasifikasi dimana data training dan data testing dimasukkan dan yang kedua data contoh tersedia ( prior, rataan, matrik kovariance, inverse matrik kov, determinan, sudah diketahui) dan tinggal memasukkan data testingnya. Kaedah klasifkasi yang digunakan adalah kaedah Bayes untuk yang berdimensi 2 dan multivariate.
Data Training dan Data Testing Dimasukkan
Data Contoh Tersedia dan Data Testing dimasukkan
PA = 0.5
PB = 0.25
PC = 0.25
mu(A) = [ 0.36 ; 1.41 ]
mu(B) = [ -0.11; 1.69 ]
mu(C) = [ 1.61 ; 1.80 ]
sigma(A) = [ 0.97 0.91 ; 0.91 1.21 ]
sigma(B) = [ 1.29 0.10 ; 0.10 0.60 ]
sigma(C) = [ 0.53 0.57 ; 0.57 0.82 ]
Inv(sigma(A)) = [ 4.3 -3.5 ; -3.5 3.8 ]
Inv(sigma(B)) = [ 0.8 -0.1 ; -0.1 1.7 ]
Inv(sigma(C) = [ 7.5 -5.2 ; -5.2 4.8 ]
detA = 0.26
detA = 0.76
detA = 0.11
Kode Progam
% Program klasifikasi secara dinamis
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Untuk mengklasifikasi vektor input (F1, F2, F3, … , Fjfeature)
% ke dalam kelas output ( G1, G2, G3, …, Gjkelas)
% algoritma : MLE dan Empiris Kernel
% note : Dinamis jml kelas, jml feature, dan jml datanya …
% Menggunakan type data structure yang didukung Matlab
% Terdapat 2 pilihan pada program ini :
% 1. anda menginput data training dan data testing
% 2. telah tersedia rataan, kov matrix, inv kov matrik,
% prior prob, determinan, dan anda tinggal meng-input
% data testing. 3 kelas tersedia )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% clear screen, clear variable dan tutup semua figure window
clc; clear all; close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% pinya = inisiasi pi number
% enya = inisiasi exp number
% jsample = menampung jumlah sample semua kelas yang ada
% jkelas = menampung jumlah kelas
% jfeature = menampung jumlag feature dari masing-masing data
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pinya = 3.14; % inisiasi pi number
enya = 2.17; % inisiasi e number
jsample = 0; % inisiasi jumlah sample data training = 0
pilihan = input(’Anda ingin input data atau menggunakan data contoh : ‘);% masukkan pilihan 1 input 2 dt contoh
if pilihan == 1 % data input
jkelas = input(’Masukkan jumlah kelas : ‘) % jumlah kelas
jfeature = input(’Masukkan jumlah feature dari sample data : ‘);% jumlah feature
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% proses untuk memasukkan data training : indek structure = kelas
% sesuai dengan jumlah kelas, jumlah data dan jumlah features dari
% masukkan sebelumnya
% jdata = menampung jumlah data sample masing2 kelas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for kelaske = 1:jkelas % loop1 sejumlah kelas
sprintf(’Kelas %d ‘,kelaske) % tampilkan data kelas
jdata = input(’Masukkan jumlah sample data training : ‘);% masukkan jml data perkelas
datanya = []; % inisiasi variabel temporary
for datake = 1:jdata % loop2 sejumlah data
for featureke = 1:jfeature % loop3 sejumlah feature
sprintf(’Masukkan Datake %d, Featureke %d : ‘,datake,featureke)
datanya(datake,featureke) = input (”); % entri data
end % akhir dari loop3
end % akhir dari loop2
kelasnya(kelaske).data = datanya % masukkan data training
kelasnya(kelaske).jdata = jdata % jumlah data per kelas
jsample = jsample + jdata % akumulasi jumlah sample per kelas
end % akhir dari loop1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% memproses rataan, matrik kova, inverse dari matrik kov dan
% determinan dari masing-masing kelas dan Prior probaliliti adalah
% sama dengan jumlah sample per group dibagi jumlah total sample% Pi = ni/N
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for kelaske = 1:jkelas % loop sejumlah kelas
kelasnya(kelaske).prior = kelasnya(kelaske).jdata / jsample;
kelasnya(kelaske).u = mean(kelasnya(kelaske).data)’; % rata-rata tiap kelas
kelasnya(kelaske).c = cov(kelasnya(kelaske).data); % matrik kov tiap kls
kelasnya(kelaske).cinv = inv(kelasnya(kelaske).c); % matrik inv kov tiap kls
kelasnya(kelaske).det = det(kelasnya(kelaske).c); % determinan tiap kls
end % akhir dari loop
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
else % data contoh
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% memproses rataan, matrik kova, inverse dari matrik kov dan
% determinan dari masing-masing kelas dan Prior probaliliti adalah
% sama dengan jumlah sample per group dibagi jumlah total sample% Pi = ni/N
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
jkelas = 3; % default jkelas = 2
jfeature = 2; % default jfeature = 2
kelasnya(1).prior = 0.5; % prior kelas 1
kelasnya(1).u = [ 0.36 ; 1.41 ]; % rata-rata kelas 1
kelasnya(1).c = [ 0.97 0.91 ; 0.91 1.21 ]; % matrik kov kelas 1
kelasnya(1).cinv = [ 4.3 -3.5 ; -3.5 3.8 ] % matrik inv kov kelas 1
kelasnya(1).det = 0.26; % determinan kelas 1
kelasnya(2).prior = 0.25; % prior kelas 2
kelasnya(2).u = [ -0.11 ; 1.67 ]; % rata-rata kelas 2
kelasnya(2).c = [ 1.29 0.10 ; 0.10 0.60 ]; % matrik kov kelas 2
kelasnya(2).cinv = [ 0.8 -0.1 ; -0.1 1.7 ]; % matrik inv kov kelas 2
kelasnya(2).det = 0.76; % determinan kelas 2
kelasnya(3).prior = 0.25; % prior kelas 3
kelasnya(3).u = [ 1.61 ; 1.80 ]; % rata-rata kelas 3
kelasnya(3).c = [ 0.53 0.59 ; 0.57 0.82 ]; % matrik kov kelas 3
kelasnya(3).cinv = [ 7.5 -5.2 ; -5.2 4.8 ]; % matrik inv kov kelas 3
kelasnya(3).det = 0.11; % determinan kelas 3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% proses melakukakan klasifikasi pada data testing %
% lagi = menampung data berisi jawaban apabila user ingin mengulang%
% klasifikasi pada data yang lain %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lagi = ‘Y’; %inisiasi jawaban user
while ((lagi == ‘Y’) | (lagi == ‘y’))
clear testnya;
jdata = input(’Masukkan jumlah sample data testing : ‘);
for datake = 1:jdata
clear datanya;
for featureke = 1:jfeature
sprintf(’Masukkan Datake %d, Featureke %d : ‘,datake,featureke)
datanya(1,featureke) = input (”);
end
testnya(datake).data = datanya’;
testnya(datake).kflag = 0;
for kelaske = 1:jkelas
testnya(datake).ptest(kelaske) = 0;
end
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proses klasifikasi thd data testing dengan MLE %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for datake = 1:jdata % loop1 sejumlah data testing
kflag = 0 % inisiasi var temporary
for kelaske = 1:jkelas % loop sejumlah kelas
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% p(wi/x) = ( 1/(2pi*sqrt(det)) ) * … %
% exp^( - 1/2* ( tranpose(x-ui) * ( cinv * (x-ui)) ) ) * p(wi) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
right1 = testnya(datake).data - kelasnya(kelaske).u
right2 = ( transpose(right1) * kelasnya(kelaske).cinv ) * right1
right3 = -0.5 * right2
right4 = enya ^ right3
left1 = sqrt(kelasnya(kelaske).det)
left2 = ( 2 * pinya )
left3 = 1 / ( left2 * left1 )
testnya(datake).ptest(kelaske) = left3 * right4 * kelasnya(kelaske).prior
if kflag < testnya(datake).ptest(kelaske)
testnya(datake).kflag = kelaske
end
kflag = testnya(datake).ptest(kelaske)
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proses klasifikasi thd data testing dengan Empiris Kernel %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if pilihan == 1 % Empiris kernel untuk pilihan 1 saja
for kelaske = 1:jkelas % loop sejumlah kelas
kernelnya(kelaske).jmlexp = 0;
end
for datake = 1:jdata % loop1 sejumlah data testing
kflag = 0 % inisiasi var temporary
h = 1 % inisiasi varibel pemulus
for kelaske = 1:jkelas % loop sejumlah kelas
for sampleke = 1:kelasnya(kelaske).jdata % loop sejumlah sample
kernelnya(kelaske).jmlexp = kernelnya(kelaske).jmlexp + …
exp(-0.5*(testnya(datake).data’-kelasnya(kelaske).data(sampleke,:))*…
(testnya(datake).data’-kelasnya(kelaske).data(sampleke,:))’/h.^jfeature)
end
end
for kelaske = 1:jkelas % loop sejumlah kelas
ktestnya(datake).ptest(kelaske) = kernelnya(kelaske).jmlexp/…
(sqrt(2*pi)*kelasnya(kelaske).jdata*h.^jfeature)
if kflag < ktestnya(datake).ptest(kelaske) % cek prob terbesar
ktestnya(datake).kflag = kelaske
end
kflag = ktestnya(datake).ptest(kelaske) % isi prob terbesar
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proses pelaporan data hasil klasifikasi %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
display( sprintf(’=====================================
================’) );
display( sprintf(’| Hasil klasifikasi dengan MLE |’) );
display( sprintf(’=====================================
================’) );
for datake = 1:jdata % loop1 sejumlah data testing
for kelaske = 1:jkelas % loop sejumlah kelas
display( sprintf(’Kelas : %d’,kelaske) );
display( sprintf(’=====================================
================’) );
if pilihan == 1 % data input
display( sprintf(’Data Training : ‘) );
display( kelasnya(kelaske).data ); % data testing
end
display( sprintf(’Prior : ‘) );
display( kelasnya(kelaske).prior ); % prior
display( sprintf(’Mean : ‘) );
display( kelasnya(kelaske).u ); % rata-rata
display( sprintf(’Cov Matrik : ‘) );
display( kelasnya(kelaske).c ); % matrik kov
display( sprintf(’Inv Cov Matrik : ‘) );
display( kelasnya(kelaske).cinv ); % matrik inv kov
display( sprintf(’Determinan : ‘) );
display( kelasnya(kelaske).det); % determinan
display( sprintf(’======================================
===============’) );
display( sprintf(’Data Testing : ‘) );
display( testnya(datake).data ); % prior
display( sprintf(’Peluang data testing di kelas %d : %15.5f’, kelaske, testnya(datake).ptest(kelaske)) );
display( sprintf(’======================================
===============’) );
end
display( sprintf(’Sehingga dengan MLE untuk data testing
ini masuk ke kelas : %d’, testnya(datake).kflag) );
end
if pilihan == 1 % Empiris kernel untuk pilihan 1 saja
display( sprintf(’=======================================
==============’) );
display( sprintf(’| Hasil klasifikasi dengan Empiris Kernel |’) );
display( sprintf(’=======================================
==============’) );
display( sprintf(’Data Testing : ‘) );
display( testnya(datake).data ); % data testing
for datake = 1:jdata % loop1 sejumlah data testing
for kelaske = 1:jkelas % loop sejumlah kelas
display( sprintf(’Peluang data testing di kelas %d : %15.5f’, kelaske, ktestnya(datake).ptest(kelaske)) );
display( sprintf(’=======================================
==============’) );
end
display( sprintf(’Sehingga dengan Empiris Kernel untuk
data testing ini masuk ke kelas : %d’,ktestnya(datake).kflag ) );
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lagi = input(’Anda ingin mengulangi proses dgn data testing lain ? : ‘,’s’)
% proses input jawaban
end % loop proses input jawaban
Inlinks :






