Upload
tranphuc
View
228
Download
0
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
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,
𝑤𝐽′ = 𝑤𝐽 − 𝛼 𝑥 − 𝑤𝐽
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
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
𝐷 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
𝑥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
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
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)