我发现了广泛的文献提出了各种标准(例如Glenn等,1985(pdf)和Jung等,2002(pdf))。但是,其中大多数都不容易实现(至少从我的角度来看)。我正在使用scipy.cluster.hierarchy获取群集层次结构,现在我试图确定如何从中形成平面群集。我的目标是发现观察结果中的常见模式,因此我没有参考将获得的聚类与之进行比较。谁能建议一个务实的解决方案?
我发现了广泛的文献提出了各种标准(例如Glenn等,1985(pdf)和Jung等,2002(pdf))。但是,其中大多数都不容易实现(至少从我的角度来看)。我正在使用scipy.cluster.hierarchy获取群集层次结构,现在我试图确定如何从中形成平面群集。我的目标是发现观察结果中的常见模式,因此我没有参考将获得的聚类与之进行比较。谁能建议一个务实的解决方案?
Answers:
实际上,以下Wikipedia条目可以很好地解释最流行且相对简单的方法:
所述弯头方法启发式描述有可能是再加上目视检查最流行的,由于其简单的解释(方差量由群集的数量解释)。该信息论方法并不难实现要么和页面有一些伪代码,你可以用它来启动。后者类似于基于模型复杂度的惩罚可能性,如众所周知的信息标准(如AIC,BIC等)。
无论您使用哪种聚类方法,都很难为您提供一个关于如何选择数据中“最佳”聚类的明确解决方案,因为聚类分析旨在隔离统计单位组(无论是个体还是变量) ),本质上是出于探索或描述目的。因此,您还必须解释集群方案的输出,并且几个集群解决方案可能同样有趣。
现在,关于通常用来决定何时停止聚集数据的统计标准,如@ars所指出的,大多数是视觉引导的标准,包括对树状图的分析或聚类轮廓的检查,也称为轮廓图(Rousseeuw,1987)。 。还提出了几个数值标准,也称为有效性指数,例如Dunn有效性指数,Davies-Bouldin有效性指数,C指数,Hubert伽玛等等。分层聚类通常与k-means一起运行(实际上,k-means的多个实例,因为它是随机算法),因此它为找到的聚类解决方案增加了支持。我不知道所有这些东西是否都可以在Python中轻松获得,但是R中可以使用大量方法(请参见@mbq已经为一个相关问题引用了群集任务视图,可以使用哪些工具在MovieLens上应用群集算法?)。其他方法包括模糊聚类和基于模型的聚类(在心理计量学社区中也称为潜在性状分析),如果您寻求更可靠的方法来选择数据中的聚类数量。
顺便说一句,我刚遇到了scipy-cluster这个网页,它是Scipy的扩展,用于生成,可视化和分析层次集群。也许它包括其他功能?我也听说过PyChem,它为多变量分析提供了相当不错的东西。
以下参考可能也有帮助:
Steinley,D.和Brusco,MJ(2008)。聚类分析中变量的选择:八个过程的经验比较。Psychometrika,73,125-144。