swój program R jest taki jak poniżej:Strange błąd grupowanie hierarchiczne w R
hcluster <- function(dmatrix) {
imatrix <- NULL
hc <- hclust(dist(dmatrix), method="average")
for(h in sort(unique(hc$height))) {
hc.index <- c(h,as.vector(cutree(hc,h=h)))
imatrix <- cbind(imatrix, hc.index)
}
return(imatrix)
}
dmatrix_file = commandArgs(trailingOnly = TRUE)[1]
print(paste('Reading distance matrix from', dmatrix_file))
dmatrix <- as.matrix(read.csv(dmatrix_file,header=FALSE))
imatrix <- hcluster(dmatrix)
imatrix_file = paste("results",dmatrix_file,sep="-")
print(paste('Wrinting results to', imatrix_file))
write.table(imatrix, file=imatrix_file, sep=",", quote=FALSE, row.names=FALSE, col.names=FALSE)
print('done!')
My wejście jest macierzą odległości (oczywiście symetryczny). Kiedy wykonać wyżej programu z matrycą na odległość większą niż o tysiącach rekordów (nic nie stało na kilkuset), to dał mi komunikat o błędzie:
Error in cutree(hc, h = h) :
the 'height' component of 'tree' is not sorted
(increasingly); consider applying as.hclust() first
Calls: hcluster -> as.vector -> cutree
Execution halted
Moja maszyna ma około 16GB RAM i 4CPU, więc wygrał” t być problemem zasobów.
Czy ktoś może mi powiedzieć, na czym polega problem? Dzięki!!
Naiwnie realizowane grupowanie hierarchiczne ma 'O (n^3)' złożoność (w rzeczywistości, znane 'O (N^2)' algorytmy są tylko dla niektórych specjalistycznych wersjach patrz 'SLINK'' pobrząkać '). Może rzeczywiście przez problem złożoności, chociaż błąd nie wygląda tak. –
Chciałbym pójść głębiej, coud, możesz opublikować próbkę pliku dmatrix_file i podać wskazówki, jak zwiększyć skalę? –
Zgadzam się z Peterem - nie możesz udostępnić pliku dmatrix, czy fikcyjnego zbioru danych o tych samych wymiarach? – geotheory