93

Learning Vector Quantization - rendicahya.lecture.ub.ac.idrendicahya.lecture.ub.ac.id/files/2019/05/8-JST-LVQ.pdf · Learning Vector Quantization • Dirancang olehTeuvo Kohonen pada

Embed Size (px)

Citation preview

Learning Vector Quantization

• Dirancang oleh Teuvo Kohonen pada 1989

• Digunakan untuk klasifikasi supervised

• Memiliki arsitektur yang mirip dengan SOM

• Setiap neuron output merepresentasikan

kelas

Sumber: Fausett (1994)

Learning Vector Quantization

• Algoritme pelatihannya mencari neuron yang

terdekat dengan vektor input

Algoritme

1. Inisialisasi

Vektor input 𝑥Learning rate 𝛼

2. Selama kondisi berhenti bernilai false, lakukan

langkah 37

3. Untuk setiap vektor input, lakukan langkah 4

5

Algoritme

4. Cari 𝐽 yang menghasilkan 𝑥 − 𝑤𝐽 minimum

5. Ubah 𝑤𝐽:

Jika kelas 𝐽 sesuai,

𝑤𝐽′ = 𝑤𝐽 + 𝛼 𝑥 − 𝑤𝐽

Jika tidak,

𝑤𝐽′ = 𝑤𝐽 − 𝛼 𝑥 − 𝑤𝐽

Algoritme

6. Kurangi nilai 𝛼

7. Cek kondisi berhenti

Contoh

• Data latih:

1. 1, 1, 0, 0 : kelas 1

2. 0, 0, 0, 1 : kelas 2

3. 0, 0, 1, 1 : kelas 2

4. 1, 0, 0, 0 : kelas 1

5. 0, 1, 1, 0 : kelas 2

Contoh

• Dua data latih pertama digunakan untuk

inisialisasi nilai bobot

• Sisanya digunakan sebagai data latih

• Bobot awal:

𝑤1 = 1, 1, 0, 0 ; 𝑇 = 1𝑤2 = 0, 0, 0, 1 ; 𝑇 = 2

• Learning rate awal: 0,1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0 1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0 1

𝑥1 = 0, 0, 1, 1𝑇 = 2

0 0 1 1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0 1

0 0 1 1

𝐷 1 = 1 − 0 2 + 1 − 0 2 + 0 − 1 2 + 0 − 1 2 = 4𝐷 2 = 0 − 0 2 + 0 − 0 2 + 0 − 1 2 + 1 − 1 2 = 1 = 𝑇

𝑥1 = 0, 0, 1, 1𝑇 = 2

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0 1

0 0 1 1

𝑤𝐽 = 𝑤𝐽 + 𝛼 𝑥 − 𝑤𝐽

𝑤2 = 0,0,0,1 + 0,1 0,0,1,1 − 0,0,0,1= 0,0,0,1 + 0,1 0,0,1,0 = 0,0,0.1,1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0,1 1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0,1 1

1 0 0 0

𝑥2 = 1, 0, 0, 0𝑇 = 1

𝐷 1 = 1 − 1 2 + 1 − 0 2 + 0 − 0 2 + 0 − 0 2 = 1 = 𝑇𝐷 2 = 0 − 1 2 + 0 − 0 2 + 0,1 − 0 2 + 1 − 0 2 = 2,01

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0,1 1

1 0 0 0

𝑥2 = 1, 0, 0, 0𝑇 = 1

X1 X2 X3 X4

Y1 Y2

1 1 0 00 0 0,1 1

1 0 0 0

𝑤𝐽 = 𝑤𝐽 + 𝛼 𝑥 − 𝑤𝐽

𝑤2 = 1,1,0,0 + 0,1 1,0,0,0 − 1,1,0,0= 1,1,0,0 + 0,1 0,−1,0,0 = 1,0.9,0,0

X1 X2 X3 X4

Y1 Y2

1 0,9 0 00 0 0,1 1

X1 X2 X3 X4

Y1 Y2

1 0,9 0 00 0 0,1 1

𝑥3 = 0, 1, 1, 0𝑇 = 2

0 1 1 0

X1 X2 X3 X4

Y1 Y2

1 0,9 0 00 0 0,1 1

𝑥3 = 0, 1, 1, 0𝑇 = 2

𝐷 1 = 1 − 0 2 + 0,9 − 1 2 + 0 − 1 2 + 0 − 0 2 = 2,01 ≠ 𝑇𝐷 2 = 0 − 0 2 + 0 − 1 2 + 0,1 − 1 2 + 1 − 0 2 = 2,81

0 1 1 0

X1 X2 X3 X4

Y1 Y2

0 0 0,1 1

0 1 1 0

𝑤𝐽 = 𝑤𝐽 − 𝛼 𝑥 − 𝑤𝐽

𝑤2 = 1,0.9,0,0 − 0,1 0,1,1,0 − 1,0.9,0,0= 1,0.9,0,0 − 0,1 −1,0.1,1,0 = 1.1,0.89, −0.1,0

1 0,9 0 0

X1 X2 X3 X4

Y1 Y2

1,1 0,89 -0,1 00 0 0,1 1

0 1 1 0

Contoh

• Epoch selesai; lanjutkan ke epoch berikutnya

• Kurangi nilai 𝛼

• Cek kondisi berhenti

Implementasi

def lvq_train(X, y, a, b, max_ep):c, train_idx = np.unique(y, True)W = X[train_idx].astype(np.float64)train = np.array([e for i, e in enumerate(zip(X, y)) if

i not in train_idx])X = train[:, 0]y = train[:, 1]ep = 0

while ep < max_ep:for i, x in enumerate(X):

d = [sum((w - x) ** 2) for w in W]min = np.argmin(d)s = 1 if y[i] == c[min] else -1W[min] += s * a * (x - W[min])

a *= bep += 1

return W, c

Implementasi

def lvq_test(x, W):W, c = Wd = [sum((w - x) ** 2) for w in W]

return c[np.argmin(d)]

Implementasi

X = np.array([[1, 1, 0, 0],[0, 0, 0, 1],[0, 0, 1, 1],[1, 0, 0, 0],[0, 1, 1, 0]])

y = np.array([1, 2, 2, 1, 2])

a = .1b = .5w = lvq_train(X, y, a, b, 10)c = lvq_test([1, 0, 1, 0], w)

print(c)