Contoh penerapan Self-Organizing Map (SOM) untuk klaterisasi menggunakan library SOMPY. Sebelum memulai, pastikan Anda telah menginstal library SOMPY. JIka dalam library tidak ditemukan SOMPY bisa menggunakan minisom. Dalam Praktikum ini akan menggunakan library MiniSom untuk implementasi SOM dengan ukuran yang lebih kecil.
instalasi SOM
pip install minisom
Collecting minisom
Downloading MiniSom-2.3.1.tar.gz (10 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: minisom
Building wheel for minisom (setup.py) ... done
Created wheel for minisom: filename=MiniSom-2.3.1-py3-none-any.whl size=10588 sha256=178f276eea9d63231b1e952382ee6cbd998755ab8b6d1e6bf6b37b5146b4ef57
Stored in directory: /root/.cache/pip/wheels/c7/92/d2/33bbda5f86fd8830510b16aa98c8dd420129b5cb24248fd6db
Successfully built minisom
Installing collected packages: minisom
Successfully installed minisom-2.3.1
from minisom import MiniSom
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
Gunakan dataset Iris sebagai contoh
# Load dataset
iris = datasets.load_iris()
data = iris.data
Normalisasi dataset agar nilainya berada dalam rentang yang seragam.
# Normalisasi data
data = data / data.max(axis=0)
Menentukan ukuran peta, misalkan (10x10) dan inisialisasi SOM
# Inisialisasi SOM
map_size = (10, 10)
som = MiniSom(map_size[0], map_size[1], data.shape[1], sigma=0.5, learning_rate=0.5)
Inisialisasi bobot SOM secara acak.
# Inisialisasi bobot secara acak
som.random_weights_init(data)
Melatih SOM dengan data menggunakan metode train_random.
# Pelatihan SOM
num_epochs = 100
som.train_random(data, num_epochs)
Menggunakan peta hasil pelatihan untuk visualisasi. Dalam praktikum ini, akan menampilkan peta dengan warna dan menandai pemenang untuk setiap sampel.
# Visualisasi hasil SOM
plt.figure(figsize=(8, 8))
for i, x in enumerate(data):
w = som.winner(x) # Pemenang untuk sampel x
plt.text(w[0]+.5, w[1]+.5, str(i+1), color='k', fontdict={'weight': 'bold', 'size': 11})
plt.pcolor(som.distance_map().T, cmap='bone_r', alpha=.2)
plt.colorbar()
plt.show()