Sunteți pe pagina 1din 11

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.

4.0
3.5
3.0
2.0

2.5

iris[, 2]

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.

4.0
3.5
3.0
2.0

2.5

iris[, 2]

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

[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

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)
RS=numarul (aleator) de porniri (valoare implicita RS=1)
6

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)"


[7] "Sodium (mg)"
[10] "Sugars (g)"

"Cholesterol (mg)"

"Carbohydrates (g)" "Dietary Fiber (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

13

15

10

>VAT(fkm7$Xca) #Vizualizarea clusterelor

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

> cl.size(fkm6$U)
Clus 1 Clus 2 Clus 3 Clus 4 Clus 5 Clus 6
12

26

10

15

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
Burgers & Sandwiches
Chicken
Desserts/Shakes
Salads
Snacks & Sides

12 5 0 1 1 0
0 10 0 0 0 12
0 4 0 0 0 0
0 0 0 12 4 0
0 0 10 0 0 0
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
9

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 (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)

0.0

0.2

0.4

0.6

0.8

1.0

Cluster Max Memb. Degrees

0.0

0.2

0.4

0.6

0.8

http://pro1.unibz.it/projects/Clustering_Methods_2014/Ferraro.pdf
http://cran.r-project.org/web/packages/fclust/fclust.pdf

10

1.0

11