Sunteți pe pagina 1din 10

Fuzzy C-means

Functia cmeans se afla in biblioteca e1071.

> library(e1071)

>result<-cmeans(iris[,-5],3,100,m=2, method="cmeans") Se precizeaza nr. de clustere dorit (3), nr. de


iteratii dorite (100), m>1 este un numar care semnifica gradul de fuzzificare

>result

Pe ecran apar centroizii (=centrele) clusterelor si gradele de apartenenta ale instantelor la cele 3
clustere.

>plot(iris[,1], iris[,2], col=result$cluster+1)

Reprezinta grafic instantele si clusterele asociate in functie de 2 atribute numerice alese, aici primele 2
coloane.

1
4.0
3.5
iris[, 2]

3.0
2.5
2.0

4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0

iris[, 1]

>points(result$centers[,c(1,2)],col=2:4,pch=8,cex=2)

Apar marcate cu * (pch=8) centroizii celor 3 clustere.

cex=un nr. care indica marimea cu care textul si simbolurile normale sunt mai mari decat cele
normale(=implicite, pt. care cex=1).

De exemplu, daca cex=1.5, textul va fi scris cu 50% mai mare decat cel normal.

Daca cex=0.5, textul va fi scris cu 50% mai mic decat cel normal.

Aici asteriscul apare cu 100% mai mare decat cercurile.

2
4.0
3.5
iris[, 2]

3.0
2.5
2.0

4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0

iris[, 1]

> result$membership[1:3,]

Afiseaza gradele de apartenenta la cele 3 clustere ale primelor 3 observatii:

1 2 3

[1,] 0.001072050 0.9966236 0.002304371

[2,] 0.007497471 0.9758544 0.016648080

[3,] 0.006414271 0.9798272 0.013758567

> result$membership

Afiseaza gradele de apartenenta la cele 3 clustere ale tuturor observatiilor.

>table(iris$Species, result$cluster)

3
Afiseaza repartitia observatiilor in cele 3 clustere:

1 2 3

setosa 0 50 0

versicolor 3 0 47

virginica 37 0 13

R Plot PCH Symbols Chart

Mai jos este prezentat un tabel cu simbolurile reprezentate de functia pch. Cand pch ia valori intre
21 si 25, parametrii "col=" si "bg=" trebuie specificati.
col =culoare

bg=culoare de background

4
5
pch=0,square
pch=1,circle
pch=2,triangle point up
pch=3,plus
pch=4,cross
pch=5,diamond
pch=6,triangle point down
pch=7,square cross
pch=8,star
pch=9,diamond plus
pch=10,circle plus
pch=11,triangles up and down
pch=12,square plus
pch=13,circle cross
pch=14,square and triangle down
pch=15, filled square blue
pch=16, filled circle blue
pch=17, filled triangle point up blue
pch=18, filled diamond blue
pch=19,solid circle blue
pch=20,bullet (smaller circle)
pch=21, filled circle red
pch=22, filled square red
pch=23, filled diamond red
pch=24, filled triangle point up red
pch=25, filled triangle point down red

Exemplul 2 Fuzzy clustering cu bilbioteca fclust

Dupa instalarea librariei fclust

>library(fclust)

Se va folosi setul de date Mc, care se refera la 81 de sortimente de snacksuri ce intra in componenta
meniului de la McDonalds. Aceste elemente for fi clusterizate pentru a identifica daca exista similaritati in
termenii componentelor nutritionale: marimea portiei, calorii, grasimi saturate, nesaturate, colesterol,
etc.

a) Algoritmul fuzzy c-means prin functia FKM

Forma generala a functiei FKM este: FKM (X, k, m, RS, stand, startU, conv, maxit)

Unde

X=matricea de date

k=numarul de clustere (valoare implicita k=2)

m=parametru de fuzificare (valoare implicita m=2)

6
RS=numarul (aleator) de porniri (valoare implicita RS=1)

stand=standardizare; daca stand=1, algoritmul de clusterizare opereaza cu date standardizate (valoare


implicitia: date nestandardizate)

startU=punctul de pornire rational pentru matricea U a gradelor de apartenenta


pentru matricea U (valoare implicita: punct de pornire rational)

conv=criteriul de convergenta (valoare implicita 1e-9)

maxit=numarul maxim de iteratii (valoare implicita 1e+6)

>names(Mc) #Numele atributelor setului de date

[1] "Serving Size" "Calories" "Total Fat (g)"

[4] "Saturated Fat (g)" "Trans Fat (g)" "Cholesterol (mg)"

[7] "Sodium (mg)" "Carbohydrates (g)" "Dietary Fiber (g)"

[10] "Sugars (g)" "Protein (g)" "Vitamin A (%DV)"

[13] "Vitamin C (%DV)" "Calcium (%DV)" "Iron (%DV)"

[16] "Type"

Se normalizeaza datele prin impartirea componentelor nutritionale la prima coloana, marimea portiei

> for (j in 2:(ncol(Mc)-1))

>Mc[,j]=Mc[,j]/Mc[,1]

Din setul de date normalizat se elimina prima coloana, Serving Size

> Mc=Mc[,-1]

Se aplica fuzzy k-means pentru 7 clustere, excluzand ultima coloana, variabila calitativa Type

> fkm7 <- FKM(X = Mc[,1:(ncol(Mc)-1)], k = 7, m = 1.5, stand = 1, RS = 10)

>fkm7 #Sunt afisate cele 7 clustere si elementele lor.

> cl.size(fkm7$U) #Este afisat numarul de observatii din fiecare cluster

Clus 1 Clus 2 Clus 3 Clus 4 Clus 5 Clus 6 Clus 7

24 12 4 13 15 10 3

>VAT(fkm7$Xca) #Vizualizarea clusterelor

7
VAT

Fiecare celula din figura se refera la disimilaritatea dintre o pereche de obiecte. Disimilaritatile mici sunt
reprezentate prin umbre mai intunecate, iar disimilaritatile mai mari prin umbre mai deschise. In figura,
disimilaritatile sunt reorganizate, astfel incat blocurile diagonal mai intunecate corespund clusterelor de
date. Prin urmare, k blocuri de pe diagonaal principal sugereaza k clustere, si marimea unui bloc
reprezinta marimea aproximativa a clusterului.

Incercand evitarea clusterelor cu numar redus de elemente, se studiaza situatia cu k=6 clustere:

>fkm6 <- FKM(X = Mc[,1:(ncol(Mc)-1)], k = 6, m = 1.5, stand = 1, RS = 10)

Se afiseaza gradele de apartenenta ale meniurilor la cele sase clustere (fuzzy clustering) , iar gradul cel
mai mare de apartenenta la un cluster incadreaza meniul in clusterul respectiv (hard clustering):

>fkm6

8
> cl.size(fkm6$U)

Clus 1 Clus 2 Clus 3 Clus 4 Clus 5 Clus 6

12 26 10 15 5 13

Comparam solutiile pentru k=6 si k=7 clustere:

> table(fkm6$clus[,1], fkm7$clus[,1])

1 2 3 4 5 6 7

1 0 12 0 0 0 0 0

2 24 0 0 0 0 0 2

3 0 0 0 0 0 10 0

4 0 0 0 015 0 0

5 0 0 4 0 0 0 1

6 0 0 0 13 0 0 0

Interpretare:

>table(Mc$Type, fkm6$clus[,1])

1 2 3 4 5 6

Breakfast 12 5 0 1 1 0

Burgers & Sandwiches 0 10 0 0 0 12

Chicken 0 4 0 0 0 0

Desserts/Shakes 0 0 0 12 4 0

Salads 0 0 10 0 0 0

Snacks & Sides 0 7 0 2 0 1

In componenta primului cluster intra 12 meniuri de tip Breakfast, clusterul 3 contine 10 meniuri de tip
Salads, etc.

In continuare se calculeaza centroizii celor 6 clustere:

> fkm6$Hraw <- Hraw(fkm6$X, fkm6$H)

> fkm6$Hraw

Elementele din primul cluster au cel mai mare continut in Cholesterol (1.3995887 mg) si Sodium
(6.4716862 mg). Clusterul trei contine cele mai sanatoase alimente (salatele), avand cel mai redus nivel
de Calories (0.8194943), Total Fat (0.03395795g), Saturated Fat (0.01145265 g) and Trans Fat

9
(1.525538e-06 g) si cel mai mare nivel de Vitamin A (0.53784859 %DV) and Vitamin C (0.10887706
%DV)), etc.

> VIFCR(fkm6,2)

Cluster Max Memb. Degrees


1.0
0.8
0.6
0.4
0.2
0.0

0.0 0.2 0.4 0.6 0.8 1.0

http://pro1.unibz.it/projects/Clustering_Methods_2014/Ferraro.pdf

http://cran.r-project.org/web/packages/fclust/fclust.pdf

10

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