Importanza fondamentale negli algoritmi di raggruppamento giocano le distanze tra gli oggetti. Ecco alcune funzioni che manipolano le distanze:
dist(x, method="euclidean", diag=NULL, upper=NULL, p=2)
: calcola la matrice delle distanze data la matrice dei dati (con soli attributi numerici). Resituisce un oggetto di classe dist
. Più in dettaglio:
x
è una matrice oppure un data-frame;method
è una stringa che indica il tipo di misura da usare. Tra le altre, abbiamo euclidean
, manhattan
, maximum
, minkowski
e binary
;diag
indica se visualizzare o no la diagonale nella matrice delle distanze;upper
indica se visualizzare o no la parte superiore nella matrice delle distanze;p
è l'esponente nella distanze di Minkowski.dist(iris[1:10,-5])
as.dist(m, diag=NULL, upper=NULL)
: trasforma una matrice numerica m quadrata in una matrice delle distanze. Solo la parte inferiore della matrice viene utilizzata, il resto è ignorato.cmdscale(d,k=2)
: trasforma una matrice delle distanze in una dei dati col metodo del multidimensional scaling. In pratica, trova la migliore disposizione delle istanze in k dimensioni che miniminna la differenza tra la matrice d e le distanze tra questi punti.?cmdscale
.Ecco alcuni metodi di raggruppamento basato sulle partizioni.
kmeans(x,centers,iter.max,nstart=1)
: applica il metodo k-means.
x
: matrice numerica o data-frame con soli attributi numerici;centers
: un numero che indica il numero di cluster da trovare, o un vettore con i centri iniziali;iter.max
: il numero massimo di iterazioni;nstart
: il numeri di volte per cui ripetere l'algoritmo;kmeans
contenete i seguenti elementi:
cluster
: un vettore indicante, per ogni istanza in x, il cluster a cui appartiene;centers
: matrice con i centri dei cluster trovati;withinss
: la somma dei quadrati delle distanze dal centro per ogni cluster;size
: le dimensioni dei cluster.Vedremo il metodo di partizionamento gerarchico di base fornito da R. In R sono implementati anche gli algoritmi AGNES
e DIANA
, all'interno del package cluster
.
hclust(d, method="complete")
: esegue un raggruppamento gerarchico a partire dalla matrice delle distanze d
. L'argomento method
indica il metodo usato per il calcolo della distanza da cluster: complete
è il metodo della distanza massima (chiamato anche complete linkage), single
è il metodo della distanza minima (chiamato anche single linkage). Il risultato è una lista di classe hclust
(vedere help on-line di hclust
per i dettagli).plot.hclust(x)
: se x è un hclust, visualizza un dendogramma del risultato.cutree(tree, k=NULL, h=NULL)
: se tree è un hclust, determina un partizionamento in k
gruppi diversi. Alternativamente è possibile specificare il parametro h
che è l'altezza (distanza tra cluster) a cui tagliare il dendogrammaidentify.hclust(x)
: se il dendogramma relativo a x
è correntemente visualizzato, consente di identificare dei cluster cliccando con il mouse su un punto del grafico. Il risultato sarà, per ogni click, un vettore con i numeri delle istanze che appartengono al cluster selezionato. La selezione termina premendo il tasto destro.Confrontare il risultato sul dataset iris del metodo hmeans
e del metodo hclust
. Quale è migliore?