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:

FT UGM, Yogyakarta 1.1 PERSOALAN Perhatikan gambar berikut: Selesaikanlah: a. Dengan menggunakan Matlab, plot dua

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

DASAR TEORI

1.2.1

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.

_ ℎ_ 1

_ ℎ_ 2 = _2

= _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) + ,

1.2.2 Least Mean Square

= 0

Least Mean Square disebut juga algoritma Delta. Dasar aturan Delta adalah:

“ Minimisasi galat (error) kuadrat dalam pelatihan ”

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

1

2

( |

| )

Dalam algoritma LMS, penyesuaian bobot dihitung menggunakan konsep kuadrat error.

Penyesuaian vektor bobot

= − [ ]

[

r

E w

]

E

w

0

E

,

w

1

,

K

,

E

w

n

= konstanta pembelajaran (learning rate)

Penyesuaian bobot

= −

2

=

0.5 (

| | )

dengan asumsi fungsi aktivasi linier, y = y net 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.

2.

Inisialisasi seluruh bobot dengan harga acak kecil.

Sampai pelatihan mencapai konvergensi, kerjakan:

Berikan satu vektor input pelatihan

Hitung output

+

|

Hitung

| =

+ , karena vektor input hanya dua.

| =

| untuk fungsi aktivasi biner.

3.

4.

Hitung penyesuaian bobot:

= [( |

= +

| )( )]

Bila | 0 untuk semua eksemplar dalam 1 epoch, hentikan pelatihan.

Bila tidak, ulangi langkah 2 untuk epoch berikutnya.

1.3

Berikut ini merupakan kode program untuk kedua permasalahan. Dalam tiap program terdapat penjelasan langsung terhadap kode tersebut.

PROGRAM DAN KETERANGAN

1.3.1 Kode Program Perhitungan Manual

3

%

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

Program di atas dapat dijelaskan sebagai berikut:

Awalnya meletakkan titik rerata pada figure

Lalu membuat garis yang menghubungkan kedua titik

1

1

2 − 1 = 2 − 1

4

Hasil akhirnya adalah:

y = (-9/8)*x + 250

Mencari titik tengah:

ttk_tgh_x1 = x1_b+|(x1_a-x1_b)/2|

= 80 + 40

= 120

ttk_tgh_x2 = x2_a+|(x2_a-x2_b)/2|

= 70 + 45

= 115

Lalu dengan titik tengah tersebut, dicari persamaan garis yang tegak lurus dengan garis tersebut:

( 1) = ( 1) +

, = 0

Hasil akhirnya adalah:

y = (8/9)*x - 20

Lalu memplot semua parameter yang telah dihitung

1.3.3 Hasil Program

Hasil program di atas bila dieksekusi adalah:

Lalu memplot semua parameter yang telah dihitung 1.3.3 Hasil Program Hasil program di atas bila dieksekusi

5

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;

% 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 j = 1; i=1; inc_e=0.0;

while inc_e <= 10

fprintf ('\n\t\t\t\t *** Epoch ke-%d ***\n',j)

| d_w0 | d_w1 | d_w2 |\n')

fprintf ('--------------------------------------------------------\n')

fprintf (' w0

|

w1

|

w2

|

y

|

e

while i<=10

% karena 10 input pelatihan

6

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 + w0; w1 = delta_w1 + w1; w2 = delta_w2 + w2; y_net = w1*pa + w2*pb + w0;

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;

% bobot baru w0 % bobot baru w1 % bobot baru w2 % menghitung y_net

% 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)

end

i =

i + 1;

end

i = 1;

j + 1;

= j

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; jum = input ('>> Jumlah Input? '); while jum_inp <= jum inp = input ('>> Input format[x;y]= ');

% nilai awal increment % banyak masukan sistem?

% memasukkan input baru

7

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

Keterangan program di atas adalah:

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 = t-

y)

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.

8

1.3.6

Hasil Program LMS

Bila program dieksekusi maka dihasilkan:

w0

|

w1

|

w2

|

y

|

e

*** Epoch ke-1 *** | 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 |

w0

|

w1

|

w2

|

y

|

e

*** Epoch ke-2 *** | 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

 

9

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

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

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

10