用于部分匹配字符串的最佳cutree

时间:2017-03-28 15:16:37

标签: r machine-learning tree

我正在将字符串比较在一起,我正在尝试确定最佳的簇数。我有以下数据集:

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)) 

我按如下方式计算Levenshtein距离并执行分层聚类

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

现在,我想使用以下命令确定最佳群集数量:

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

我已经做了一些关于找到最佳簇数的阅读,但它与kmeans命令更相关。在我的例子中如何找到最佳簇数?非常感谢您的宝贵帮助

1 个答案:

答案 0 :(得分: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 pamflet似乎是一个良好的开端。祝你好运!