2012-03-17 2 views
1

저는 R에 익숙하지 않고 kmeans 객체를 다루려고합니다. 이상적으로는 데이터에서 각 지점에 대한 클러스터 레이블 목록을 가져 와서 레이블을 해당 센터로 바꾸는 것이 좋습니다. 본질적으로 각 데이터 포인트가 kmeans에 의해 배치 된 클러스터의 중심 값으로 표현되는 행렬로 끝납니다.클러스터 레이블 및 클러스터 센터 (R의 kmeans)

각 항목을 수동으로 검토하고 클러스터 레이블을 클러스터 중심 값으로 바꾸는 대신 효율적으로 수행 할 수있는 방법이 있습니까?

감사합니다.

답변

3

이게 당신이 쓴거야?

# make some data 
    x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), 
       matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) 
    colnames(x) <- c("x", "y") 
    # 
    # do cluster analysis 
    (cl <- kmeans(x, 2)) 
    # 
    # put cluster labels with data 
    out1 <- data.frame(cbind(x, clusterNum = cl$cluster)) 
    # 
    # organise center coords to be ready for merging 
    centers <- data.frame(cbind(data.frame(cl$center[,1]), 
           data.frame(cl$center[,2]), 
           clusterNum=rownames(cl$center))) 
    # 
    # merge cluster center coords with data   
    out2 <- merge(out1, centers, all.x = TRUE) 
    # 
    # check output 
    out2 
    clusterNum   x   y cl.center...1. cl.center...2. 
1   1 0.233161364 -0.04258146  0.01064895  0.01376516 
2   1 -0.356284774 -0.59135602  0.01064895  0.01376516 
3   1 -0.302272796 -0.24033113  0.01064895  0.01376516 
4   1 -0.369299302 -0.24997660  0.01064895  0.01376516 
5   1 -0.060454427 0.19711328  0.01064895  0.01376516 
... 
90   2 0.609833599 0.67729922  1.05184887  1.03445718 
91   2 0.943306637 1.09420588  1.05184887  1.03445718 
92   2 0.545053826 1.22620571  1.05184887  1.03445718 
93   2 0.706921965 1.10326091  1.05184887  1.03445718 
94   2 0.837644227 1.07121784  1.05184887  1.03445718 
95   2 0.550863085 1.06977250  1.05184887  1.03445718 
# 
# Success! We have one dataframe that includes: raw data, cluster labels 
# and cluster center coords 

내가 원시 데이터와 클러스터의 중심 좌표를 넣어 merge을 사용하지만,보다 효율적인 방법이 있습니다 의심의 여지 ( cl$center을 필요로하지 않는, 예를 들어이 개편 될) : this answer에서 확장.

+0

그래, 도움이된다. 나는 또한 클러스터 센터 레이블을 클러스터 센터로 대체하는 방법을 궁금해했다. 예를 들어 나는 클러스터 센터 인 배열을 가지고 있습니다 ... ob <- kmeans (array, k) 레이블 <- ob $ 클러스터 An 및 클러스터 센터의 배열. 센터 <- ob $ 센터 내가 원했던 것은 클러스터 센터 값으로 라벨에 클러스터 라벨을 다시 표시하는 것이 었습니다. 그래서 'labels'의 각 요소는 클러스터 중심 값입니다. 나는 3D 점에서 kmeans를하고 있기 때문에 약간의 어려움을 겪고 있습니다. 그래서 각 점은 3 개의 값으로 구성된 행렬로 표현됩니다. –

+0

다른 질문을하지 않으시겠습니까? 이번에는 여기에있는 지침에 따라 재현 할 수있는 예와 함께 여기에 귀하의 의견에 방금 공개 한 새로운 세부 사항을 포함하십시오. http://www.stackoverflow.com/questions/5963269/how- make-a-great-r-reproducible-example – Ben

관련 문제