Ciao StackOverflow comunità,Kmeans R (statistiche) vs Kmeans (AMAP)
Io corro Kmeans (pacchetto statistiche) e Kmeans (pacchetto AMAP) sul set di dati Iris. In entrambi i casi, utilizzo lo stesso algoritmo (Lloyd-Forgy), la stessa distanza (euclidea), lo stesso numero di serie casuali iniziali (50), lo stesso numero massimo di iterazioni (1000) e provo per lo stesso set di valori k (da 2 a 15). Io uso anche lo stesso seme per entrambi i casi (4358).
Non capisco perché in queste condizioni sto ottenendo curve wss diverse, in particolare: il "gomito" che usa il pacchetto stats è molto meno accentuato di quando si usa il pacchetto amap.
Potresti per favore aiutarmi a capire perché? Grazie mille!
Ecco il codice:
# data load and scaling
newiris <- iris
newiris$Species <- NULL
newiris <- scale(newiris)
# using kmeans (stats)
wss1 <- (nrow(newiris)-1)*sum(apply(newiris,2,var))
for (i in 2:15) {
set.seed(4358)
wss1[i] <- sum(kmeans(newiris, centers=i, iter.max=1000, nstart=50,
algorithm="Lloyd")$withinss)
}
# using Kmeans (amap)
library(amap)
wss2 <- (nrow(newiris)-1)*sum(apply(newiris,2,var))
for (i in 2:15) {
set.seed(4358)
wss2[i] <- sum(Kmeans(newiris, centers=i, iter.max=1000, nstart=50,
method="euclidean")$withinss)
}
# plots
plot(1:15, wss1, type="b", xlab="Number of Clusters",
ylab="Within groups sum of squares", main="kmeans (stats package)")
plot(1:15, wss2, type="b", xlab="Number of Clusters",
ylab="Within groups sum of squares", main="Kmeans (amap package)")
EDIT: ho inviato via email l'autore del pacchetto AMAP e pubblicherà la risposta, quando/se ottengo alcuna. https://cran.r-project.org/web/packages/amap/index.html
se si vuole scavare ulteriormente, è possibile leggere il codice sorgente per ogni funzione, digitando semplicemente il nome della funzione e colpire entrare – pcantalupo
possibile duplicato di http : //stackoverflow.com/questions/5696381/r-clustering-results-are-different-everytime-i-run – pcantalupo
Grazie per i vostri commenti @pcantalupo. Sto leggendo il codice e cerco di capirlo. Per il possibile duplicato: grazie per il puntatore. Sto usando il seme come suggerito in quel post. La differenza che noto non è tra diverse esecuzioni della stessa funzione, ma tra le due diverse implementazioni (pacchetti di statistiche e mappe). Commento laterale: quando eseguo Kmeans (amap) con e senza 'set.seed (4358)' Ho ottenuto lo stesso risultato del grafico, che a mio parere è strano – pim