Anda di halaman 1dari 10

Klasifikasi Dua Kelas Kasus Lemari dan Buffet

Jans Hendry, 05965-TE Jurusan Teknik Elektro FT UGM, Yogyakarta

1.1

PERSOALAN Perhatikan gambar berikut:

Selesaikanlah: a. Dengan menggunakan Matlab, plot dua titik yang merupakan rerata dari sekumpulan data untuk masing-masing kelas yang menyatakan Lemari dan Buffet. Lalu hubungkan kedua titik tersebut menggunakan sebuah garis linier. Melalui garis tersebut tentukanlah sebuah garis yang memotong secara tegak lurus. b. Dengan menggunakan Matlab, siapkanlah nilai-nilai sembarang sebagai titik-titik untuk masing-masing kelas. Lalu dengan menggunakan algoritma LMS, tentukanlah garis pemisah dengan menggunakan bobot-bobot hasil pelatihan. 1.2 1.2.1 DASAR TEORI Perhitungan Manual

Pada dasarnya koordinat (x1,x2) yang mewakili Buffet pada (160,70) dan Lemari pada (80,160) merupakan rerata dari sebaran titik sembarang. Kedua koordianat tersebut dapat digunakan untuk menentukan garis pemisah kedua kelas. Caranya adalah: 1. Menarik garis lurus yang menghubungkan kedua koordinat tersebut. 1

2. Lalu buatlah titik tengah pada garis yang menghubungkan titik-titik rerata tadi. _ _ _ 2 = _2 + _ 1 = _1 + (( _1 _1 )/2) (( _2 _2 )/2)

3. Menarik garis memotong garis tadi secara tegak lurus melalui titik tengah tersebut. Artinya garis yang baru akan memiliki gradient sebesar -1*gradient garis yang tegak lurus terhadapnya. 4. Untuk mencari garis baru yang melalui titik tengah (x1,y1) tersebut digunakan rumus: ( 1) = ( 1) + , =0

1.2.2

Least Mean Square Minimisasi galat (error) kuadrat dalam pelatihan

Least Mean Square disebut juga algoritma Delta. Dasar aturan Delta adalah: Fungsi galat E merupakan jumlah error kuadrat yang juga fungsi dari bobot jaringan. Dalam proses belajar, bobot-bobot disesuaikan ke arah perubahan harga galat (gradient E) yang paling tajam atau terjal dalam ruang bobot galat. Contoh untuk galat E vektor bobot n dimensi, untuk 1 epoch pelatihan: ( dengan, k = indeks dari eksemplar K = jumlah eksemplar/epoch Dalam algoritma LMS, penyesuaian bobot dihitung menggunakan konsep kuadrat error. Penyesuaian vektor bobot = [ ] , ,, )= 1 2 ( )

r E E E E [w ] , ,K , w n w 0 w 1
= konstanta pembelajaran (learning rate) Penyesuaian bobot =

= =

0.5 +

dengan asumsi fungsi aktivasi linier, y = ynet dan Maka

= = [(

[(

)( )] [( )( )] )( )]

)( )] =

Sehingga didapat perhitungan untuk penyesuaian bobot adalah Dimana persamaan tersebut diperuntukkan untuk pelatihan On Line Mode. Artinya penyesuaian bobot dilakukan untuk tiap eksemplar. Bila perubahan dilakukan tiap epoch maka disebut sebagai Batch Mode. Langkah-langkah pelatihan On Line Mode: 1. Inisialisasi seluruh bobot dengan harga acak kecil. 2. Sampai pelatihan mencapai konvergensi, kerjakan: Berikan satu vektor input pelatihan Hitung Hitung output = = + + , karena vektor input hanya dua. = [(

untuk fungsi aktivasi biner. = [( )( )]

Hitung penyesuaian bobot:

3. Bila

0 untuk semua eksemplar dalam 1 epoch, hentikan pelatihan.

4. Bila tidak, ulangi langkah 2 untuk epoch berikutnya.

1.3

PROGRAM DAN KETERANGAN

Berikut ini merupakan kode program untuk kedua permasalahan. Dalam tiap program terdapat penjelasan langsung terhadap kode tersebut. 1.3.1 Kode Program Perhitungan Manual

% Program Pengklasifikasi Persoalan Buffet dan Lemari manual % % JANS HENDRY % 05965 % Tugas KLASIFIKASI POLA %============================================================= % koordinat (x1_a,x2_a) = titik rerata BUFFET % koordinat (x1_b,x2_b) = titik rerata LEMARI x1_a=160; x2_a=70; x1_b=80; x2_b=160; % persamaan garis yang menghubungkan kedua titik rerata x=80:160; y=(-9/8)*x+250; % menentukan titik tengah garis yang menghubungkan kedua titik rerata ttk_tgh_x1=x1_b+abs((x1_a-x1_b)/2); ttk_tgh_x2=x2_a+abs((x2_a-x2_b)/2); % menentukan garis tegak lurus dengan gradien -1*gradien garis rerata x1=0:300; y1=(8/9)*x1+8.33; % meletakkan semua titik dan garis pada figure plot(x1_a,x2_a,'ro',x1_b,x2_b,'r+',... x,y,'k', ttk_tgh_x1, ttk_tgh_x2,'rd',... x1,y1,'b','LineWidth',1.5,... 'MarkerFaceColor','g','MarkerSize',6) % meletakkan atribut-atribut lainnya title('Klasifikasi Lemari dan Buffet'); xlabel('X1'); ylabel('X2'); text(200,200,' \leftarrow x1w1 + x2w2 + w0'); text(80,160,'\leftarrow (80,160)'); text(160,70,'\leftarrow (160,70)'); legend('Buffet','Lemari'); axis([0 300 0 300]);

1.3.2

Keterangan Program Perhitungan Manual Awalnya meletakkan titik rerata pada figure Lalu membuat garis yang menghubungkan kedua titik 1 1 = 2 1 2 1 4

Program di atas dapat dijelaskan sebagai berikut:

Hasil akhirnya adalah: y = (-9/8)*x + 250 Mencari titik tengah: ttk_tgh_x1 = = = ttk_tgh_x2 = = = x1_b+|(x1_a-x1_b)/2| 80 + 40 120 x2_a+|(x2_a-x2_b)/2| 70 + 45 115 ( 1) = ( 1) +

Lalu dengan titik tengah tersebut, dicari persamaan garis yang tegak lurus dengan garis tersebut: Hasil akhirnya adalah: y = (8/9)*x - 20 Lalu memplot semua parameter yang telah dihitung , =0

1.3.3

Hasil Program

Hasil program di atas bila dieksekusi adalah:

1.3.4

Kode Program LMS

% Program Pengklasifikasi Persoalan Buffet dan Lemari dengan LMS % % JANS HENDRY % 05965 % Tugas KLASIFIKASI POLA %============================================================= %====================================================% % Nilai p adalah nilai acak % p = vektor pelatihan (10 vektor pelatihan termasuk nilai rata-rata) % t = target pelatihan % w0 = bobot prasikap % w1 = bobot pertama % w2 = bobot kedua % e = error (target - output) % delta_ = perubahan bobot-bobot yang bersesuaian % alpha = laju pembelajaran / learning rate (0<=alpha<=1) % 1 = LEMARI % 0 = BUFFET %%%% % inisialisasi variabel atau nilai awal variabel p1=[70 ; 145]; p2=[80 ; 160]; p3=[90 ; 165]; ... p4=[150 ; 60]; p5=[160 ; 70]; p6=[170 ; 90];... p7=[85;170]; p8=[75;160]; p9=[140;50]; p10=[180;80]; p=[p1 p2 p3 p4 p5 p6 p7 p8 p9 p10]; t1=1 ; t2=1 ; t3=1 ; t4=0; t5=0; t6=0; t7=1; t8=1; t9=0; t10=0; t=[t1 t2 t3 t4 t5 t6 t7 t8 t9 t10]; w0 = 1; w1 = .5; w2 = -.5; delta_w0 = 0; delta_w1 = 0; delta_w2 = 0; alpha = .25;

% % % j

menghitung bobot yang sesuai menggunakan LMS (Least Mean Square) Nilai j,i membantu dalam iterasi eksemplar Nilai ee membantu dalam menghentikan iterasi, ketika e=0 = 1; i=1; inc_e=0.0;

while inc_e <= 10 fprintf ('\n\t\t\t\t *** Epoch ke-%d ***\n',j) fprintf (' w0 | w1 | w2 | y | e | d_w0 | d_w1 | d_w2 |\n') fprintf ('--------------------------------------------------------\n') while i<=10 % karena 10 input pelatihan

if i == 1 pa = p1(1); pb = p1(2); elseif i == 2 pa = p2(1); pb = p2(2); elseif i == 3 pa = p3(1); pb = p3(2); elseif i == 4 pa = p4(1); pb = p4(2); elseif i == 5 pa = p5(1); pb = p5(2); elseif i == 6 pa = p6(1); pb = p6(2); elseif i == 7 pa = p7(1); pb = p7(2); elseif i == 8 pa = p8(1); pb = p8(2); elseif i == 9 pa = p9(1); pb = p9(2); elseif i == 10 pa = p10(1); pb = p10(2); end w0 = delta_w0 w1 = delta_w1 w2 = delta_w2 y_net = w1*pa + + + + w0; w1; w2; w2*pb + w0; % % % % bobot baru bobot baru bobot baru menghitung w0 w1 w2 y_net

if y_net > 0 y = 1; else y = 0; end e = t(i) - y; if e == 0 inc_e = inc_e+1; else inc_e = 0; end delta_w1 = alpha*e*pa; delta_w2 = alpha*e*pb; delta_w0 = alpha*e;

% fungsi aktivasi biner

% Hasil penurunan gradient LMS % cacah error = 0 inc_e bertambah 1

% perubahan bobot w1 % perubahan bobot w2 % perubahan bobot w0

% Menampilkan hasil perhitungan pada layar fprintf ('%4.1f | %4.1f | %4.1f | %4.1f | %4.1f | %4.1f | %4.1f | %4.1f |\n'... ,w0,w1,w2,y,e,delta_w0,delta_w1,delta_w2) i = i + 1; end i = 1; j = j + 1; end fprintf ('\nBobot akhir ditemukan pada Epoch ke-%d... \n\n',j-1) plotpv(p,t); net = newp([0 300;0 300],[0 1]); net.IW{1,1}=[w1 w2]; net.b{1}=w0; title('Klasifikasi Lemari dan Buffet') xlabel('X1'); ylabel('X2'); plotpc(net.IW{1,1},net.b{1}); % % % % memplot titik2 pelatihan menyatakan output 0 dan 1 menyatakan nilai w1 dan w2 menyatakan nilai w0

% menggambar garis klasifikasi

jum_inp = 1; % nilai awal increment jum = input ('>> Jumlah Input? '); % banyak masukan sistem? while jum_inp <= jum inp = input ('>> Input format[x;y]= '); % memasukkan input baru

Y = sim(net,inp); plotpv(inp,Y); t_inp = findobj(gca,'type','line'); set(t_inp,'Color','red'); hold on kk = kk+1; end plotpv(p,t); plotpc(net.IW{1},net.b{1}); title('Klasifikasi Lemari dan Buffet') xlabel('X1'); ylabel('X2'); hold off

% 1 = LEMARI ; 0 = BUFFET % memplotkan hasil klasifikasi % input baru = warna merah

1.3.5

Keterangan Kode Program LMS Memberikan nilai awal untuk semua parameter yang dibutuhkan Input pelatihan yang diberikan sebanyak 10 vektor Target juga telah ditentukan dengan 1 = Lemari dan 0 = Buffet Tiap eksemplar dihitung y dan y_net nya Lalu dihitung error kuadrat nya dalam bentuk gradient atau penurunan galat (e = ty) lalu error tersebut digunakan dalam menghitung perubahan bobot hal ini dilakukan untuk 10 eksemplar karena metode nya berupa online mode iterasi akan berhenti setelah semua error = 0, berarti ada 10 eksemplar dan 10 error = 0 terhitung. Penghitungan tersebut dilakukan oleh variabel inc_e yang akan mencacah naik hingga 10 lalu menghentikan program. Bila program berhenti maka hasil akhir bobot telah didapatkan Plotpv digunakan untuk menampilkan anggota kedua kelas Plotpc digunakan untuk menampilkan garis klasifikasi atau pemisah Gambar setelah pelatihan akan ditampilkan Lalu user ditawarkan untuk memasukkan input lain sebanyak yang diinginkan agar kemudian input tersebut diklasifikasikan secara otomatis Setelah diklasifikasikan, maka semua parameter akan ditampilkan kembali dalam figure dan titik baru tersebut akan diberi warna merah Sehingga program ini bersifat interaktif.

Keterangan program di atas adalah:

1.3.6

Hasil Program LMS

Bila program dieksekusi maka dihasilkan: *** Epoch ke-1 *** w0 | w1 | w2 | y | e | d_w0 | d_w1 | d_w2 | -------------------------------------------------------1.0 | 0.5 | -0.5 | 0.0 | 1.0 | 0.3 | 17.5 | 36.3 | 1.3 | 18.0 | 35.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.3 | 18.0 | 35.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.3 | 18.0 | 35.8 | 1.0 | -1.0 | -0.3 | -37.5 | -15.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | *** Epoch ke-2 *** w0 | w1 | w2 | y | e | d_w0 | d_w1 | d_w2 | -------------------------------------------------------1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | -19.5 | 20.8 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | Bobot akhir ditemukan pada Epoch ke-2...

>> Jumlah Input? 1 >> Input format[x;y]= [75;190]

10

Anda mungkin juga menyukai