2016-01-22 2 views
1

Я сгруппировал дерево hclust() в несколько групп с помощью cutree(). Теперь я хочу, чтобы функция hclust() в несколько groupmembers как hclust() ... ТАКЖЕ:hclust() with cutree ... как построить кластер cutree() в одном hclust()

Я разрезал одно дерево в 168 групп, и я хочу 168 hclust() деревья ... Мои данные являются 1600 * 1600.

Мои данные tooooo большие, поэтому я дам вам пример

m<-matrix(1:1600,nrow=40) 
#m<-as.matrix(m) // I know it isn't necessary here 
m_dist<-as.dist(m,diag = FALSE) 


m_hclust<-hclust(m_dist, method= "average") 
plot(m_hclust) 

groups<- cutree(m_hclust, k=18) 

Теперь я хочу, чтобы построить 18 деревьев ... одно дерево для одной группы. Я много пробовал.

ответ

4

Я предупреждаю вас, что для таких больших деревьев, вероятно, большинство решений будет немного медленнее запускать. Но вот одно решение (с использованием пакета dendextend R):

m<-matrix(1:1600,nrow=40) 
#m<-as.matrix(m) // I know it isn't necessary here 
m_dist<-as.dist(m,diag = FALSE) 
m_hclust<-hclust(m_dist, method= "complete") 
plot(m_hclust) 
groups <- cutree(m_hclust, k=18) 

# Get dendextend 
install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg); 
install.packages.2('dendextend') 
install.packages.2('colorspace') 
library(dendextend) 
library(colorspace) 

# I'll do this to just 4 clusters for illustrative purposes 
k <- 4 
cols <- rainbow_hcl(k) 
dend <- as.dendrogram(m_hclust) 
dend <- color_branches(dend, k = k) 
plot(dend) 
labels_dend <- labels(dend) 
groups <- cutree(dend, k=4, order_clusters_as_data = FALSE) 
dends <- list() 
for(i in 1:k) { 
    labels_to_keep <- labels_dend[i != groups] 
    dends[[i]] <- prune(dend, labels_to_keep) 
} 

par(mfrow = c(2,2)) 
for(i in 1:k) { 
    plot(dends[[i]], 
     main = paste0("Tree number ", i)) 
} 
# p.s.: because we have 3 root only trees, they don't have color (due to a "missing feature" in the way R plots root only dendrograms) 

enter image description here

Давайте сделаем это снова на "красивее" дерево:

m_dist<-dist(mtcars,diag = FALSE) 
m_hclust<-hclust(m_dist, method= "complete") 
plot(m_hclust) 

# Get dendextend 
install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg); 
install.packages.2('dendextend') 
install.packages.2('colorspace') 
library(dendextend) 
library(colorspace) 

# I'll do this to just 4 clusters for illustrative purposes 
k <- 4 
cols <- rainbow_hcl(k) 
dend <- as.dendrogram(m_hclust) 
dend <- color_branches(dend, k = k) 
plot(dend) 
labels_dend <- labels(dend) 
groups <- cutree(dend, k=4, order_clusters_as_data = FALSE) 
dends <- list() 
for(i in 1:k) { 
    labels_to_keep <- labels_dend[i != groups] 
    dends[[i]] <- prune(dend, labels_to_keep) 
} 

par(mfrow = c(2,2)) 
for(i in 1:k) { 
    plot(dends[[i]], 
     main = paste0("Tree number ", i)) 
} 
# p.s.: because we have 3 root only trees, they don't have color (due to a "missing feature" in the way R plots root only dendrograms) 

enter image description here

Смежные вопросы