1

나는 분류를 만들고 홍채 데이터 세트를 3 개의 클래스로 나눴습니다. 그런 다음, 클래스 (색상)를 데이터 세트의 관측치에 연결하고 싶습니다. cutree 기능을 사용하려고했습니다. 결과적으로, 나는 1에서 3까지의 클래스와 1에서 3까지의 브랜치를 가졌지 만 동일하지는 않습니다. 첫 번째 클래스는 세 번째 브랜치이고 두 번째 클래스는 첫 번째 브랜치이고 세 번째 클래스는 두 번째 클래스입니다. 분기. 출력 클래스 (cutree 기반)와 플롯의 분기를 올바르게 연결할 수 있습니까?dendrogram 브랜치를 클래스에 연결하는 방법?

> library('dendextend') 
> library('tidyverse') 
> iris <- datasets::iris 
> iris2 <- iris[,-5] 
> d_iris <- dist(iris2) 
> hc_iris <- hclust(d_iris, method = "complete") 
> dend <- as.dendrogram(hc_iris) 
> dend <- color_branches(dend, h = 3.5) 
> dend <- color_labels(dend, h = 3.5) 
> plot(dend) 

enter image description here

> cuts <- cutree(dend, h=3.5) 
> data_frame(class=cuts, obj=as.numeric(names(cuts))) %>% 
+   group_by(class) %>% 
+   summarise(n()) 
# A tibble: 3 × 2 
    class `n()` 
    <int> <int> 
1  1 50 
2  2 72 
3  3 28 
> plot(cut(dend, h=3.5)$upper) 

enter image description here

답변

1

dendextend 패키지의 cutreefunction는 인수가 원래의 순서로 클러스터를 주문 할 수있는 논리적 인수가 order_clusters_as_data라고있다 데이터 (TRUE) 또는 end 드로 그램의 레이블 순서 (FALSE)로 표시됩니다. 기본값은 TRUE이지만 잘라 내기 함수가 덤 드로 그램의 순서에 따라 분기 번호를 매기므로 order_clusters_as_data = FALSE :

cuts <- cutree(dend, h=3.5, order_clusters_as_data=FALSE) 
data_frame(class=cuts, obj=as.numeric(names(cuts))) %>% 
    group_by(class) %>% 
    summarise(n()) 
# A tibble: 3 × 2 
    class `n()` 
    <int> <int> 
1  1 72 
2  2 28 
3  3 50 
plot(cut(dend, h=3.5)$upper)