2012-03-17 4 views
1

私はRにはまったく新しく、kmeansオブジェクトを扱おうとしています。理想的には、データ内の各点のクラスター・ラベルのリストを取り、ラベルを対応する中心に置き換えることです。本質的に、各データ点がkmeansによって配置されたクラスタの中心の値によって表される行列で終わる。クラスターラベルとクラスターセンター(Rのkmeans)

手動で各エントリを通過し、クラスタのラベルをクラスタの中心値に置き換える代わりに、これを効率的に行う方法はありますか?

ありがとうございます!

答えて

3

これはあなたの後のことですか? this answerから拡張:

# 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 

私は、より効率的な方法は、(例えば、それを再編成するcl$centerを必要としない)があり、生のデータをクラスタ中心COORDSを置くためにmergeを使用しますが、間違いなく。

+0

うん、それは参考になる - 私はまた、クラスターセンターのラベルでクラスターのセンターラベルを置き換える方法が不思議だった。たとえば、私はクラスタの中心である配列を持っています... ob < - kmeans(array、k) ラベル< - ob $クラスタ クラスタセンターの配列と配列です。 センター< - ob $センター 私がやりたかったのは、クラスターセンターの値を使ってラベルにクラスターラベルを再現することでした。したがって、 'labels'の各要素はクラスタの中心値です。私は3Dポイントでkmeansをやっているので少し難しかったので、各ポイントは3つの値のマトリックスで表されます。 –

+0

別の質問をしてみませんか?今回は、ここでのコメントで明らかにした新しい詳細と再現可能な例が含まれています。こちらの手順は次のとおりです。http://www.stackoverflow.com/questions/5963269/how-メイクアップa great-r-reproducible-example – Ben

関連する問題