Sunteți pe pagina 1din 9

Clusterizare fuzzy n R:

Algoritmul de clusterizare fuzzy k-means (fkm) a fost creat de J. Bezdeck n 1974.


Conform acestui algoritm, obiectele sunt asignate unor clustere cu un anumit grad
de apartenen.
Problema 1. Se va folosi biblioteca fclust i setul de date Mc inclus n fclust.
Se instaleaz biblioteca fclust i se citete:
> install.packages("fclust")
>library(fclust)
Se citete setul de date Mc
>data(Mc)
Setul de date Mc conine 81 meniuri (snacksuri) de la McDonalds i componena lor
nutriional. Intenionm sa efectum o grupare n clustere a acestor meniuri pentru
a observa similaritile dintre ele.
Vom normaliza datele mprind atributele cu componentele nutriionale la primul
atribut, Serving Size:
> for (j in 2:(ncol(Mc)-1))
Mc[,j]=Mc[,j]/Mc[,1]
i eliminnd prima coloan:
> Mc=Mc[,-1]
Aplicm algoritmul de clusterizare fuzzy standard fkm prin funcia FKM, grupnd
datele n 6 clustere:
> fkm6 <- FKM(X = Mc[,1:(ncol(Mc)-1)], k =6,m = 1.5, stand = 1, RS = 10)
Parametrii funciei FKM(.) sunt:
X=setul de date
k= numrul de clustere (valoare implicit k=2)
m=parametru de fuzzificare (valoare implicit m=1.5)
stand: dac stand=1, algoritmul funcioneaz cu datele standardizate (valoare
implicit: date nestandardizate)
RS=numrul de porniri aleatoare ale algoritmului (valoare implicit RS=1)
Sunt afiate observaiile i clusterul corespunztor, i gradul de apartenen la
fiecare cluster:
>fkm6
Este afiat numrul de elemente al fiecrui cluster:
1

> cl.size(fkm6$U)

Dac dorim gruparea datelor n 7 clustere:


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

Comparm cele 2 situaii (k=6 i k=7):


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

precum i mprirea meniurilor n cele 6 clustere:


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

Burgers & Sandwiches i Snacks & Sides sunt asociate cu clusterul 6. Clusterul 2
cuprinde meniuri care conin carne.
Sunt afiai centroizii fiecrui cluster:
>fkm6$Hraw <- Hraw(fkm6$X, fkm6$H)
> fkm6$Hraw

Rezult:
2

Meniurile de tip Breakfast au cele mai mari valori de Cholesterol (mg) i Sodium
(mg); Salads (salatele) sunt cele mai sntoase meniuri, avnd cele mai sczute
valori de Calories, Total Fat (g), Trans Fat (g) i cele mai ridicate valori de Vitamin A
(%DV) i Vitamin C (%DV).
Prjiturile (Desserts/Shakes ) conin cele mai sczute valori de Cholesterol (mg),
Dietary Fiber (g), Protein (g), Iron (%DV). Aceast categorie este cea mai puin
dietetic: conine mari cantiti de Calories, Carbohydrates (g), Trans Fat (g).
Cu comanda urmtoare se vizualizeaz cele 6 clustere.
> VCV2(fkm6$Xca, fkm6$U, 2)

VCV2

Problema 2 Se va folosi biblioteca fclust i setul de date unemployment inclus n


fclust.

Setul de date unemployment conine rata omajului pentru 32 ri europene n


anul 2011. Datele sunt preluate din Eurostat.
Se instaleaz biblioteca fclust i se citete:
> install.packages("fclust")
>library(fclust)
Se citete setul de date unemployment:
>data(unemployment)
> unemployment
> names(unemployment)

Setul de date conine 3 atribute numerice:


Total.Rate= procentul persoanelor omere intre 15-74 ani n populaia activ.
Youth.Rate=rata omajului la tineri, definite ca rata omajului la tinerii intre 15-24
ani
LongTerm.Share=procentul persoanelor omere timp de peste 12 luni
Scopul clusterizrii este gruparea rilor n clustere caracterizate de structuri de
omaj similare.
>clustere <- FKM.gk(unemployment, k = 3, RS = 50, stand=1)
> clustere

Din clusterul 1 fac parte: Bulgaria, Danemarca, Cipru, Ungaria, Polonia, Portugalia,
Slovenia, Slovacia, Finlanda, Suedia, Marea Briatanie, Islanda, Croatia i Turcia.
Din clusterul 2 fac parte: Belgia, Cehia, Germania, Italia, Luxemburg, Malta, Olanda,
Austria, Romnia, Norvegia i Elvetia.
Din clusterul 3 fac parte: Estonia, Irlanda, Grecia, Spania, Letonia i Lituania.
Dimensiunea clusterelor se afieaz cu comanda:
> cl.size(clustere$U)

mprirea rilor n clustere i reprezentarea centroizilor prin asterisc se realizeaz


cu comanda:
> plot.fclust(clustere)

40
30
10

20

Youth.Rate

10

15
Total.Rate

> plot.fclust(clustere,v1v2=c(1,3))

20

60
50
40
20

30

LongTerm.Share

10

15
Total.Rate

>plot.fclust(clustere,v1v2=c(2,3))

20

60
50
40
20

30

LongTerm.Share

10

20

30

40

Youth.Rate

Gradul de apartenen al rilor la clustere este dat de comanda:


> clustere$U
Pentru primele trei observaii gradul de apartenen este:
> clustere$U[1:3,]

Gradul de apartenen al Bulgariei la clusterul 1 este 0.042, la clusterul 3 este


0.939, iar la clusterul 3 este 0.0184. Bulgaria va apartine clusterului cu gradul de
apartenen cel mai mare, clusterul 2.

Referine
http://rpackages.ianhowson.com/cran/fclust/man/FKM.html
http://pro1.unibz.it/projects/Clustering_Methods_2014/Ferraro.pdf
J. Bezdeck, Cluster validity with fuzzy sets, Journal of Cybernetics, 3(3), 1974, 55-83