Sunteți pe pagina 1din 10

Self-Organizing Maps: Programe în R

Problema 1
Clusterizarea setului de date “wines” din biblioteca kohonen

În biblioteca kohonen este conţinut setul de date wines format din 177
observaţii (tipuri de vin) şi 13 atribute (substanţe chimice din
componenţa vinului). Următorul cod realizează clusterizarea celor 177
observaţii prin SOM.

Se instalează biblioteca kohonen:


> install.packages("kohonen")
> library(kohonen)

Se citesc datele:
> data("wines")
> View(wines)

Se observa ca toate atributele sunt numerice.

>set.seed(7)
Se construiesc hărţile SOM, de tip hexagonal şi de dimensiune 5 x 4 (5
clustere pe linie şi 4 clustere pe coloană), cu datele standardizate:

> som.wines <- som(scale(wines), grid = somgrid(5, 4, "hexagonal"))


>som.wines

Se reprezintă grafic hărţile SOM:


> plot(som.wines, main="Date vinuri")

Date vinuri

alcohol tot. phenols col. hue


malic acid flavonoids OD ratio
ash non-flav. phenols proline
ash alkalinity proanth
magnesium col. int.

Figura 8.11
Se observă că fiecare cluster din cele 20 de clustere (5x4=20) este
caracterizat de una sau mai multe variabile predominante,
corespunzătoare triunghiului colorat mai mare. Clusterele de pe prima
linie a hărţii sunt caracterizate de nivelul mare de alcool; clusterele de
pe ultima linie a hărţii sunt caracterizate de nivel mic de alcool, acid
malic, etc.

Procesul de antrenare a hartii SOM este:


> plot(som.wines, type="changes")

Reprezentarea grafica a clusterelor in functie de 3 categorii de vin:

>plot(som.wines, type="mapping", labels = as.integer(vintages), col =


as.integer(vintages), main = "mapping plot")
Problema 2

File-> Import dataset from file ->From text (readr) ->music-sub.csv


Import

>View(music_sub)
>date<-music_sub
Se elimina coloanele 1 si 2:
>date1<-date[,-c(1,2)]

>View(date1)

> library(kohonen)

Setul de antrenare conţine un eşantion format din 40 observaţii.

Setul de date music-sub este format din 62 observaţii, care se vor


imparti într-un set de antrenare (40 observatii) şi un set de testare (22
observatii).

Se extrage un esantion aleator de 40 de observatii:


> train.obs<-sample(nrow(date1), 40)
>train.obs

La normalizare se elimina coloana 1, type- tipul de muzica.


> train.set<-scale(date1[train.obs,][,-1])
>train.set

Setul de testare:
Se scade media unei coloane din elementele ei prin comanda:
center = attr(train.set, "scaled:center")
Se împart coloanele (centrate) cu abaterea lor standard prin comanda:
scale = attr(train.set, "scaled:scale")

>test.set<-scale(date1[-train.obs, ][-1], center = attr(train.set,


"scaled:center"),scale = attr(train.set, "scaled:scale"))
>test.set

Se construiete harta SOM cu 3x2=6 clustere:

> somexemplu <- som(train.set, grid = somgrid(3, 2, "hexagonal"))


> plot(somexemplu)
Se observă că fiecare cluster este caracterizat de una sau mai multe
variabile predominante, corespunzatoare sectorului de cerc colorat mai
mare.

Etichetarea clusterelor cu numele clasei

>plot(somexemplu, type="mapping", labels = as.factor(date1$type),


main = "mapping plot")

Predicţiile clusterelor pe setul de testare

Se execută predicţia clasei din setul de testare:

>somprediction<-predict(somexemplu, newdata=test.set,
trainX=train.set)
>somprediction

Vectorul de clusterizare contine 6 clustere:

>somprediction$unit.classif

>data.frame(somprediction$unit.classif)

>testset<-date[-train.obs,1]

>testset
> data.frame(testset,somprediction$unit.classif)

>nb<-table(somprediction$unit.classif)
>nb
Primul cluster contine 5 observatii, al doilea cluster contine 4 observatii,
etc.

Eticheta reala:
>testset<-date[-train.obs,3]

>testset

Tabelul de contingenta pentru setul de testare:

>tab<- table(date1[-train.obs,]$type,somprediction$unit.classif)

>tab

S-ar putea să vă placă și