migliorabile ha scritto:
Primo, non esiste un solo indice: purity, rand index e diversi altri
Secondo: ti servono DUE informazioni
1) l'appartenenza al cluster
2) una qualche classificazione gia' presente nei dati
perdonami, ora mi stò approcciando allo studio dei cluster, gli indici che dici tu purty,rand index, non sono proprio citati dalla prof. quindi non riesco a capire a cosa fai riferimento.
con la prima funzione descritta da me sopra "credo se ho ben capito le dispense della prof." che ho fatto una classificazione in cluster con k-means(impostando come parametro k=2 (il numero dei cluster)) e infatti ho avuto un partizionamento con 2 cluster, uno contenente 9 regioni e una contenente 11 regioni(la classificazione da me scelta è quella di partizionarli in base al numero di abitanti per regione).
quindi presumo cche queste 2 informazioni siano presenti, o sbaglio?
grazie:-)
[EDIT] cambiando la riga
agvar<-aggregate(dataframeTotPopolazione,tl,var)[-1]
in
agvar<-aggregate(dataframeTotPopolazione,tl,mean)[-1]
il metodo non da più problemi, l'interprete riesce a dare degli output, volevo però confrontare l'output ottenuto da kmeans
dataframeTotPopolazione<-data.frame(dataset$`pop. al primo gennaio Maschi`,dataset$`pop. al primo gennaio Femmine`)
row.names(dataframeTotPopolazione)<-labs
d<-dist(dataframeTotPopolazione,method ="euclidean",diag = TRUE,upper=TRUE)
d<-d^2
tree<-hclust(d,method = "centroid")
taglio<-cutree(tree,k=mk,h=NULL)
taglioList<-list(taglio)
centroidiIniziali<-aggregate(dataframeTotPopolazione,taglioList,mean)[-1]
km<-kmeans(dataframeTotPopolazione,centers = centroidiIniziali,iter.max = 10,nstart = 2)
print(km)
plot(dataframeTotPopolazione,col=km$cluster,main = "metodo k-means")
points(km$center,col=1:2,pch=8,cex=1)
questa funzione su un partizionamento con 2 cluster mi da between_SS / total_SS = 73.8 %
con quello scritto da me per le funzioni di non omogeneità
dataframeTotPopolazione<-data.frame(dataset$`pop. al primo gennaio Maschi`,dataset$`pop. al primo gennaio Femmine`)
row.names(dataframeTotPopolazione)<-labs
n<-nrow(dataset)
trHI<-(n-1)*sum(apply(dataframeTotPopolazione,2, var))
d<-dist(dataframeTotPopolazione,method = dist,diag = TRUE,upper = TRUE) #individua la struttura di dissimilità dist="euclidean"
hls<-hclust(d,method = aggr)#aggr="centroid"
taglio<-cutree(hls,k=mk,h=NULL)
num<-table(taglio)
tl<-list(taglio)
agvar<-aggregate(dataframeTotPopolazione,tl,mean)[-1]
t1<-(num[[1]]-1)*sum(agvar[1, ])
t2<-(num[[2]]-1)*sum(agvar[2,])
print(t2)
w<-t1+t2
b<-trHI-w
print("b/trHI")
print((b/trHI*100))
questa funzione INDIPENDENTEMENTE DAI CRITERI SCELTI (ho provato tutti quelli degli appunti della prof...euclidean con single complete median centroid e manhattan con single complete etc...
da sempre come output 99.999995
CREDO di aver sbagliato qualcosa in quanto NON mi trovo mai il valore 73.8% ....potresti darmi qualche dritta? te ne sarei molto grato....stò leggendo e rileggendo i suoi appunti e cercando online, ma non riesco a capire se effettivamente mi trovo....ti dico ciò perché chiedendo ad un mio collega di corso lui bene o male si trova in tutti i casi lo stesso output sia con la funzione k-means sia con la misura di non omogeneità(la seconda funzione) il che mi porta a pensare di stare sbagliando qualcosaa.