我正在使用适当的距离测量和纵向数据的聚类算法对时间序列数据进行聚类。 我的目标是通过群集结果统计信息验证此数据集的最佳群集数。我在这个主题上阅读了关于stackoverflow的一些文章和帖子,特别是:Determining the Optimal Number of Clusters。只能对我的数据子集进行目视检查;我不能依赖它来代表我的整个数据集,因为我正在处理大数据。
我的方法如下: 1.我使用不同数量的聚类进行多次聚类,并计算每个选项的聚类统计数据 2.我使用FPC的cluster.stats R包计算集群统计指标:Cluster.Stats from FPC Cran Package。我绘制这些并确定每个指标是最佳的簇编号(参见下面的代码)。
我的问题是这些指标各自评估群集“良好”的不同方面,并且一个度量的最佳群集数可能与不同度量的最佳群集数不一致。例如,Dunn的索引可能指向使用3个聚类,而正方形的和可能表示75个聚类是更好的选择。
我理解基础知识:群集内点之间的距离应该很小,群集之间应该有很好的分离,应该最小化平方和,不同群集中的观察值应该很大理想情况下,不相似/不同的群体应具有很强的差异性。但是,我不知道在评估群集质量时,哪些指标最重要。
如何处理此问题,请记住我的数据的性质(时间序列)以及将具有强烈相似模式区域的相同系列/系列聚集在一起的目标 ?
我是以正确的方式解决群集问题,还是我错过了关键的一步?或者我误解了如何使用这些统计数据?
以下是我如何使用统计信息确定最佳群集数量: cs_metrics是我的数据框,其中包含统计信息。
Average.within.best <- cs_metrics$cluster.number[which.min(cs_metrics$average.within)]
Average.between.best <- cs_metrics$cluster.number[which.max(cs_metrics$average.between)]
Avg.silwidth.best <- cs_metrics$cluster.number[which.max(cs_metrics$avg.silwidth)]
Calinsky.best <- cs_metrics$cluster.number[which.max(cs_metrics$ch)]
Dunn.best <- cs_metrics$cluster.number[which.max(cs_metrics$dunn)]
Dunn2.best <- cs_metrics$cluster.number[which.max(cs_metrics$dunn2)]
Entropy.best <- cs_metrics$cluster.number[which.min(cs_metrics$entropy)]
Pearsongamma.best <- cs_metrics$cluster.number[which.max(cs_metrics$pearsongamma)]
Within.SS.best <- cs_metrics$cluster.number[which.min(cs_metrics$within.cluster.ss)]
以下是比较不同群集数量的群集统计信息的图表: