R Language
hclust를 사용한 계층 적 클러스터링
수색…
소개
stats
패키지는 hclust
함수를 제공하여 계층 적 클러스터링을 수행합니다.
비고
hclust 외에도 다른 방법을 사용할 수 있습니다. 클러스터링에 대한 CRAN 패키지보기를 참조하십시오.
예제 1 - hclust의 기본 사용, end 드로 그램 표시, 플롯 클러스터
클러스터 라이브러리에는 클러스터 분석을 설명하기위한 표준 데이터 세트 인 ruspini 데이터가 들어 있습니다.
library(cluster) ## to get the ruspini data
plot(ruspini, asp=1, pch=20) ## take a look at the data
hclust는 원본 데이터가 아니라 거리 매트릭스를 기대합니다. 기본 매개 변수를 사용하여 트리를 계산하고 표시합니다. hang 매개 변수는 기준선을 따라 트리의 모든 잎을 정렬합니다.
ruspini_hc_defaults <- hclust(dist(ruspini))
dend <- as.dendrogram(ruspini_hc_defaults)
if(!require(dendextend)) install.packages("dendextend"); library(dendextend)
dend <- color_branches(dend, k = 4)
plot(dend)
트리를 잘라 네 개의 클러스터를 만들고 클러스터별로 포인트를 채색하는 데이터를 다시 채 웁니다. k는 원하는 클러스터 수입니다.
rhc_def_4 = cutree(ruspini_hc_defaults,k=4)
plot(ruspini, pch=20, asp=1, col=rhc_def_4)
이 클러스터링은 조금 이상합니다. 먼저 데이터를 확장하여 더 나은 클러스터링을 얻을 수 있습니다.
scaled_ruspini_hc_defaults = hclust(dist(scale(ruspini)))
srhc_def_4 = cutree(scaled_ruspini_hc_defaults,4)
plot(ruspini, pch=20, asp=1, col=srhc_def_4)
클러스터 비교를위한 기본 차이 측정은 "완료"입니다. method 매개 변수로 다른 측정 값을 지정할 수 있습니다.
ruspini_hc_single = hclust(dist(ruspini), method="single")
예제 2 - hclust 및 특이 치
계층 적 클러스터링에서 이상 치는 종종 1 점 클러스터로 나타납니다.
특이점의 영향을 설명하기 위해 3 개의 가우스 분포를 생성합니다.
set.seed(656)
x = c(rnorm(150, 0, 1), rnorm(150,9,1), rnorm(150,4.5,1))
y = c(rnorm(150, 0, 1), rnorm(150,0,1), rnorm(150,5,1))
XYdf = data.frame(x,y)
plot(XYdf, pch=20)
클러스터 구조를 세 개의 클러스터로 나눕니다.
XY_sing = hclust(dist(XYdf), method="single")
XYs3 = cutree(XY_sing,k=3)
table(XYs3)
XYs3
1 2 3
448 1 1
hclust는 두 개의 특이점을 발견하고 그 밖의 모든 것을 하나의 큰 클러스터에 집어 넣습니다. "실제"클러스터를 얻으려면 k를 더 높게 설정해야 할 수도 있습니다.
XYs6 = cutree(XY_sing,k=6)
table(XYs6)
XYs6
1 2 3 4 5 6
148 150 1 149 1 1
plot(XYdf, pch=20, col=XYs6)
이 StackOverflow 게시물 에는 클러스터 수를 선택하는 방법에 대한 지침이 있지만 계층 적 클러스터링에서이 동작을 알고 있어야합니다.