2013-09-06 4 views
-1

힌트 다른 질문에 대해서는 꽤 당황 스럽습니다. 클러스터링 - 클러스터에 가장 가까운 것을 찾는 방법

내가 운동, 더 큰 운동 실제로 일부있어

: hclust를 사용

  1. 클러스터 일부 데이터는, (완료)
  2. 는 당신이있어 클러스터되는 발견, 완전히 새로운 벡터를 감안할 때 1 가장 가까운 곳입니다.

운동에 따르면이 작업은 아주 짧은 시간 안에 완료되어야합니다.

그러나 몇 주 후에 나는 hclust에서 실제로 얻은 모든 것이 나무라고 가정합니다. 클러스터의 수는 가정하지 않았습니다.

내가 불분명 가정 같이

말은 예를 들어, I는 15 × 5 일러스트, 5 회 (1 1 1 1 1), 5 회 (2 2 2 2 2 구성된 매트릭스 hclust 공급

) 및 5 배 (3 3 3 3 3). 이것은 저에게 크기 5의 3 개의 확실히 명료 한 송이를 주어야한다, 누군가는 그것을 손으로 쉽게 할 수있다. 사용하는 명령이있어서 프로그램에서 hclust 개체에 3 개의 클러스터가 있고 그 안에 무엇이 들어 있는지 실제로 알 수 있습니까?

+0

'? hclust'의 예를보세요. 클러스터를 생성하려면'cuttree'를 사용해야합니다. 그렇다면 점에 대한 가장 가까운 클러스터를 찾는 문제는 다소 모호 합니다만, 새로운 점에 가장 가까운 구 점을 찾고 해당 클러스터 idx를 반환해야 할 것입니다. – flodel

답변

1

올바른 메트릭은 클러스터와의 친밀 성을 정의하는 것입니다. hclust 문서에있는 예제를 기반으로 각 클러스터의 평균을 계산 한 다음 새 데이터 요소와 평균 집합 간의 거리를 측정하는 방법이 있습니다.

# Leave out one state 
A <-USArrests 
B <-A[rownames(A)!="Kentucky",] 
KY <- A[rownames(A)=="Kentucky",] 

# Put the B data into 10 clusters 
hc <- hclust(dist(B), "ave") 
memb <- cutree(hc, k = 10) 
B$cluster = memb[rownames(B)==names(memb)] 

# Compute the averages over the clusters 
M <-aggregate(.~cluster, data=B, FUN=mean) 
M$cluster=NULL 

# Now add the hold out state to the set of averages 
M <-rbind(M,KY) 

# Compute the distance between the clusters and the hold out state. 
# This is a pretty silly way to do this but it works. 
D <- as.matrix(dist(as.matrix(M),diag=TRUE,upper=TRUE))["Kentucky",] 
names(D) = rownames(M) 
KYclust = which.min(D[-length(D)]) 
memb[memb==KYclust] 

# Now cluster the full set of states and compare the results. 
hc <- hclust(dist(A), "ave") 
memb <- cutree(hc, k = 10) 
a=memb[which(names(memb)=="Kentucky")] 
memb[memb==a] 
+0

위 지정시 – newnewbie

1

k-means와 달리, hclust에서 발견되는 클러스터는 임의의 모양 일 수 있습니다.

따라서 가장 가까운 클러스터 센터까지의 거리가 항상 의미있는 것은 아닙니다.

가장 가까운 이웃 스타일 할당을하는 것이 좋습니다.

+0

그럴 수도 있지만 운동은 hclust가 필수라고 말합니다. – newnewbie

관련 문제