2017-03-28 10 views
0

私は文字列を一緒に比較しており、最適なクラスター数を特定しようとしています。私は、次のデータセットがあります。私は今、私は次のコマンドを使用して、クラスターの最適な数を特定したい部分的に一致する文字列のための最適なカットツリー

dist <- adist(d$Fund) 
    rownames(dist) <- d$Fund 
    colnames(dist) <- d$Fund 
    hc <- hclust(as.dist(dist)) 

次のようにレーベンシュタイン距離を計算し、階層的クラスタを実行

d <- structure(list(Fund = structure(c(8L, 9L, 11L, 10L, 2L, 3L, 1L, 
4L, 5L, 7L, 6L), .Label = c("Branch April China", "Branch April Europe", 
"Branch April US", "Branch Emerging Markets EUR", "Branch Emerging Markets GBP", 
"Branch Emerging Markets JPY", "Branch Emerging Markets USD", 
"Branch EUR", "Branch GBP", "Branch JPY", "Branch USD"), class = "factor")), .Names = "Fund", class = "data.frame", row.names = c(NA, 
-11L)) 

を:

df <- data.frame(d$Fund,cutree(hc,2)) 

私はクラスタの最適な数を見つけることについていくつかの読書をしましたが、それはより多くのkmeansコマンドに関連しています。私の例では、どのように最適なクラスタ数を見つけることが可能ですか?あなたの大切な助けをありがとう

+0

パッケージNbClustをご覧ください。 – KoenV

+0

私は感謝しています、文字列を使って実装する方法がありますか? – richpiana

答えて

1

私はこれをNbClustパッケージから取り出しました。私はヘルプ・ページを見て、例に分かれた。あなたがパッケージをインストールした後に、コードをコピーして実行することができます

library(NbClust) 

# for reproducibility 
set.seed(1) 

# create some data 
x<-rbind(matrix(rnorm(150,sd=0.3),ncol=3), 
    matrix(rnorm(150,mean=3,sd=0.2),ncol=3), 
    matrix(rnorm(150,mean=5,sd=0.3),ncol=3)) 

# produce dissimilarity matrix of the data 
diss_matrix<- dist(x, method = "euclidean", diag=FALSE) 
res<-NbClust(x, diss=diss_matrix, distance = NULL, min.nc=2, max.nc=6, 
     method = "ward.D", index = "ch") 
res$All.index 
res$Best.nc 
res$Best.partition 

:あなたのケースでは、あなたが非類似度行列(距離を)持っている、それゆえ私は、次のコードを取りました。最良のクラスタ数はres$Best.ncで、クラスタインデックスはres$Best.partitionです。

ここで私があなたに与えることができる情報よりも多くの情報を読む必要があります。 NbClustの小冊子を読むことは良いスタートのようです。がんばろう!

関連する問題