【发布时间】:2016-12-08 17:37:56
【问题描述】:
在尝试了一些聚类算法后,我在使用flexclust::kcca 和family = kccaFamily("angle") 的数据集上获得了最佳性能。
这是一个使用来自flexclust 的Nclus 数据集的示例。
library(fpc)
library(flexclust)
data(Nclus)
k <- 4
family <- flexclust::kccaFamily("angle")
model <- flexclust::kcca(Nclus, k, family)
现在我想优化集群的数量。使用fpc::cluster.stats 似乎可以找到最全面的集群模型性能指标集。该函数需要两个输入:一个距离矩阵和分配的簇。
后者很容易;只是model@cluster。
我正在为距离矩阵提供什么而苦苦挣扎。 kcca 不返回距离对象(如果有,我也没有找到)。
我想我通常会使用dist(Nclus)。在这种情况下,我不想要欧几里得距离(或dist 可用的任何其他方法)——我想要聚类算法使用的距离度量。我可以使用该函数中的代码重新创建kcca 使用的距离矩阵。
control <- as(list(), "flexclustControl")
centers <- flexclust:::initCenters(Nclus, k, family, control)
distmat <- distAngle(Nclus, centers$centers)
然后我应该能够使用
计算集群模型统计信息fpc::cluster.stats(distmat, model@cluster)
问题是给我两个关于距离参数的警告。
Warning messages:
1: In as.dist.default(d) : non-square matrix
2: In as.matrix.dist(d) :
number of items to replace is not a multiple of replacement length
这让我怀疑我给了它错误的东西。
我应该如何将距离矩阵传递给cluster.stats?
【问题讨论】:
-
顺便提一下,
fpc::cluster.stats需要大量内存,因此即使是中等大小的数据集也不实用。最后我选择了cluster::silhouette。
标签: r cluster-analysis