Self Organizing Maps (SOM) Using R
Hai temen-temen, kembali lagi kita untuk belajar SOM atau Self Organizing Maps. Sebelumnya, apa itu SOM?
Self-Organizing Map (SOM) atau sering disebut topology-preserving map pertama kali diperkenalkan oleh Teuvo Kohonen pada tahun 1996. SOM merupakan salah satu teknik dalam Neural Network yang bertujuan untuk melakukan visualisasi data dengan cara mengurangi dimensi data melalui penggunaan self-organizing neural networkssehingga manusia dapat mengerti high-dimensional data yang dipetakan dalam bentuk low-dimensional data. Metode pembelajaran yang digunakan SOM adalah tanpa bimbingan dari suatu data input-target atau unsupervised learning yang mengasumsikan sebuah topologi yang terstruktur menjadian unit-unit kelas/cluster(Kohonen, 1989 dan Fausett, 1993).
Salah satu teknik lain untuk menganalisa data pada dimensi tinggi adalah dengan SOM (Self Organizing Feature Map). SOM dikembangkan Prof. Teuvo Kohonen (Finland) untuk memproyeksikan data ke 1 atau 2 dimensi, dengan mempertahankan topologi data tersebut. (topological mapping).
Pada algoritma SOM, vektor bobot untuk setiap unit cluster berfungsi sebagai contoh dari input pola yang terkait dengan cluster itu. Selama proses self-organizing, cluster satuan yang bobotnya sesuai dengan pola vektor input yang paling dekat (biasanya, kuadrat dari jarak Euclidean minimum) dipilih sebagai pemenang. Unit pemenang dan unit tetangganya (dalam pengertian topologi dari unit cluster) terus memperbarui bobot merek (Fausett, 1993). Setiap output akan bereaksi terhadap pola input tertentu sehingga hasil Kohonen SOM akan menunjukkan adanya kesamaan ciri antar anggota dalam cluster yang sama.
Langsung saja kita ke cara kerja SOM dengan bantuan software R
- Buka R Studio
- Input data dengan menggunakan sintaks seperti berikut:
library(kohonen)
search()
is(2)
data(swiss)
swiss
head(swiss)
didapatkan output seperti berikut:
3. Membuat standarisasi atau normalisas karena ukuran data berbeda dengan menggunakan sintaks seperti berikut:
scale(swiss)
head(scale(swiss)) #data sudah ternormalisasi berada di sekitar angka 0 bisa negatif atau positif
dim(swiss)
str(swiss)
didapatkan output seperti berikut:
4. Selanjutnya, membuat clustering SOM dengan menggunakan sintaks seperti berikut:
# mencoba membuat kelompok kategorisasi dari 47 data dg 6 variabel
## membuat tempat atau letak untuk data2 yg akan diolah
gridswiss<- somgrid(xdim = 4, ydim = 5, topo = "hexagonal")
gridswiss## melakukan perintah SOM dari data wines sebanyak 177 tsb
som.swiss<-som(scale(swiss), grid=somgrid(xdim = 4,ydim = 5,"hexagonal"))
som.swiss
str(som.swiss) #unit classif terletak dalam cluster tertentu
Menggunakan 47 data dengan 6 variabel, lalu dibuat grid berukuran 5x5 seperti berikut, didapatkan output seperti berikut:
5. Membuat plot dari data tersebut, dengan menggunakan sintaks seperti berikut:
## melihat bentuk plot dari data tsb
plot(som.swiss,type = “mapping”)
didapatkan output seperti berikut:
6. Dilanjutkan dengan membuat diagram kipas, dengan menggunakan sintaks seperti berikut:
## dimanakah letak dari lingkaran 1 atau node2 yg sudah dibuat dalam 5 x 5
## manakah uruta lingkaran pertama?
som.swiss$grid$pts# nah letak dari masing2 nodes ini dihasilkan dari hasil som.wines$grid$pts
som.swiss$unit.classif
# tidak akan ada angka yg > 25# untuk melihat plot secara keseluruhan
plot(som.swiss)
didapatkan output seperti berikut:
dari output diatas dapat diketahui bahwa bentuk tampilan lingkaran, pada setiap lingkaran terdiri atas beberapa potongan lingkaran yang menggambarkan 6 variabel pada data, dimana pada setiap variabel memiliki kode dengan warna yang berbeda.
7. Kemudian, mengelompokkan data menjadi 5 cluster dengan menggunakan sintaks seperti berikut:
# untuk melihat plot secara keseluruhan
plot(som.swiss)
# hasil plot tsb mewakili objek2 tsb
# untuk melihat letak dr masiing2 unit klasifikasi
text(som.swiss$grid$pts, labels = som.swiss$unit.classif, cex = 1.5)
str(som.swiss)
som.swiss$codes[[1]]# kalo misalkan mau pake hirearki clustering harus membuat distance/jarak
dist(som.swiss$codes[[1]])# untuk melihat hirearcical clustering
hclust(dist(som.swiss$codes[[1]]))# untuk membuat berapa banyak pengelompokan yg akan digunakan
# akan digunakan sebanyak 5
petaswiss <- cutree(hclust(dist(som.swiss$codes[[1]])),5)
petaswiss
plot(petaswiss)# membuat pengelompokan berdasarkan peta yg sudah dibuat
plot(som.swiss, type = "codes", bgcol = rainbow(5)[petaswiss])# membuat agar lebih jelas
add.cluster.boundaries(som.swiss,petaswiss)# untuk letak masing2 objek
som.swiss$unit.classif
# misal objek pertama 15 berarti ada di lingkaran 15
# hasil akhir adalah model yg sudah dibuat
# bisa jadi masiing2 laptop berbeda, karena konsep SOM adalah winnertextall
didapatkan output seperti berikut:
Dari output diatas didapatkan diagram kipas bentuk hexagonal dengan grid berukuran 5x5. Distribusi dari variabel pemetaan dilambangkan dengan diagram kipas. Pada diagram kipas diatas terdapat 5warna berbeda, dimana pada setiap warna tersebut menggambarkan hasil dari cluster untuk setiap provinsi di Swiss. Setiap warna memiliki karakteristik yang berbeda. Kemudian, membuat tabel yang merupakan hasil clustering untuk memudahkan melihat hasilnya. Berikut merupakan tabelnya:
sekian belajar bersamanya, apabila ada salah mohon maaf dan bila ingin sharing dan berbagi ilmu sangat dipersilahkan, semoga bermanfaat, see you~
Referensi:
https://socs.binus.ac.id/2017/03/20/self-organizing-map-som/
https://medium.com/@16611077/som-self-organizing-feature-map-3d165af14d1d
https://link.springer.com/chapter/10.1007/978-3-7091-2484-0_1