选择聚类方法


73

在对数据集进行聚类分析以将相似案例分组时,需要在大量聚类方法和距离度量中进行选择。有时,一种选择可能会影响另一种,但是方法有很多可能的组合。

是否有人对如何从各种聚类算法/方法距离度量中进行选择提出建议?这与变量的性质(例如分类或数字)和聚类问题有什么关系?有没有最佳技术?


1
您可以尝试对要集群的内容进行更具体的描述吗?还是仅仅是您需要的最新集群技术?
罗宾吉拉德

2
我没有立即申请的想法。我只是对选择聚类方法和相似性度量的通用方法感兴趣。
Brett 2010年

还要检查这个类似的问题。
ttnphns

还有一些警告特别针对分层聚类方法。
ttnphns

Answers:


43

您的问题没有明确的答案,因为即使在相同的方法中,代表个体(不相似)的距离选择也会产生不同的结果,例如,在分层聚类中使用欧几里得与平方欧几里得时。再举一个例子,对于二进制数据,您可以选择Jaccard索引作为相似性度量,然后继续进行经典的层次聚类。但是还有其他方法,例如《蒙娜(Monthetic Analysis))算法一次只考虑一个变量,而其他分层方法(例如,经典的HC,Agnes,Diana)则在每个步骤使用所有变量。k均值方法已经以多种方式扩展,包括围绕质体(PAM)或代表性对象而不是质心进行分区(Kaufman和Rousseuw,1990),或模糊聚类(Chung和Lee,1992)。例如,k均值和PAM之间的主要区别在于PAM最小化了相异之和而不是欧几里德距离的平方之和。模糊聚类允许考虑“部分成员资格”(我们为每个观察值关联一个反映类成员资格的权重)。对于依赖概率框架的方法,或所谓的基于模型的聚类(或潜在特征分析)对于心理测量师来说),有一个很好的包装:Mclust。因此,绝对地,您需要考虑如何定义个体的相似度以及将个体链接在一起的方法(递归或迭代聚类,严格或模糊类成员,无监督或半监督方法等)。

通常,要评估聚类稳定性,比较几个基本上“共享”某种相似性的算法(例如,k均值和分层聚类,因为欧几里德距离对两者均有效)是很有趣的。为了评估两个群集解决方案之间的一致性,针对此问题提出了一些建议,即在哪里切割树状图?(另请参阅本网站上其他链接的交叉引用)。如果您使用的是R,则将在Cluster Analysis的“任务视图”中看到几个软件包,并且几个软件包中包含用于解释特定方法或提供案例研究的小插图。

聚类分析:基本概念和算法很好地概述了聚类分析中使用的几种技术。至于一本带有R插图的新书,我会推荐Izenman的第12章,《现代多元统计技术》(Springer,2008年)。下面提供了几个其他标准参考:

  • Cormack,R.,1971年。分类综述。皇家统计学会杂志,A 134,321-367。
  • Everitt,B.,1974年。聚类分析。伦敦:Heinemann Educ。图书。
  • Gordon,A.,1987年。层次分类法综述。皇家统计学会杂志,A 150,119–137。
  • 戈登,A.,1999年。《分类》,第二版。查普曼和霍尔。
  • Kaufman,L.,Rousseuw,P.,1990年。在数据中查找组:聚类分析简介。纽约,威利。

30

引用Hastie,Tibshirani和Friedman的话, 《统计学习的要素》,第1页。506:

“适当的差异度量比使用聚类算法对获得聚类成功要重要得多。问题的这一方面……取决于领域特定的知识,不适合进行一般研究。”

(也就是说,如果(wibni)有一个站点,学生可以在一些小的标准数据集上尝试一些算法和指标,那会不会很好呢?)


谢谢你 您可以为“示例可以在网络上运行”标签建议吗?
denis

您的意思是重新标记问题(我不认为这是一个好主意,因为OP并不是在使用在线基准测试工具IMO)还是要提出一个新问题?无论如何,我目前不知道一个好的标签。在Meta上提问?
chl

1
这句话可能会引起误解-显然不适用于Wikipedia上的(公认做作)示例。由于第二个数据集中有很强的非线性聚类,因此链接和密度聚类算法的效果远远优于任何基于质心的方法。没有相似性度量可以使质心聚类方案更好地工作。仅当您假设群集大致呈线性时(有时是安全的假设),此引用才适用。如果可能,我建议您先目视检查您的数据。
naught101

@ naught101,可以肯定– 目视检查数据查看相似/相异是最重要的,但说起来容易做起来

此报价来自哪个版本?你能给出它的引用吗
MonsterMMORPG'Aug

12

您无法预先知道哪种聚类算法会更好,但是有一些线索,例如,如果您想对图像进行聚类,则应首先尝试某些算法,例如“模糊艺术”,或者如果要对人脸进行分组,则应该开始(GGCI)用于图像的全局几何聚类。

无论如何,这不能保证最好的结果,所以我要做的是使用一个程序,该程序可以有条不紊地运行不同的群集算法,例如weka,RapidMiner或什至R(不可视),在那里我将程序设置为启动我可以使用的所有不同的聚类算法,并具有所有可能的不同距离,并且如果需要参数,请使用各种不同的参数值进行实验(如果我不知道聚类的数量,请使用各种参数运行每个的数量)。解决实验后,让它继续运行,但请记住将每个集群运行结果存储在某个地方。

然后比较结果以获得最佳结果聚类。这很棘手,因为您可以比较多个指标,而并非每种算法都提供所有指标。例如,模糊聚类算法与非模糊算法具有不同的度量标准,但仍可以通过将模糊结果组视为非模糊算法进行比较,我将坚持与经典度量标准进行比较,例如:

•SSE:每个聚类项的平方误差之和。

•群集间距离:每个群集质心之间的平方距离之和。

•每个群集的群集内距离:每个群集的项到其质心的平方距离之和。

•最大半径:实例到群集质心的最大距离。

•平均半径:实例到其群集质心的最大距离之和除以群集数。


4

选择正确的距离不是一项基本任务。当我们要对数据集进行聚类分析时,使用不同的距离可能会出现不同的结果,因此务必谨慎选择选择的距离,因为我们可以制作出能够很好地捕获可变性的假制品,但实际上却没有解决我们的问题。

当我有连续的数值变量并且我想反映绝对距离时,欧氏距离是合适的。该距离考虑了每个变量,并且不会消除冗余,因此,如果我有三个解释相同(相关)的变量,则可以将此效果加权三。而且,该距离不是比例不变的,因此通常我必须先进行比例缩放才能使用该距离。
生态学示例:我们在许多地方有不同的观察结果,专家们从其中取样了一些微生物,物理和化学因素。我们想找到生态系统中的模式。这些因素具有高度相关性,但是我们知道每个人都相关,因此我们不想删除这些冗余。我们将欧几里德距离与缩放数据一起使用,以避免单位的影响。

马氏距离是合适的,当我有连续的数值变量,我想反映绝对距离,但是我们要消除冗余。如果我们重复变量,它们的重复作用将消失。

当我们想要强调变量之间的差异时,当我们想要区分轮廓时,Hellinger族,Species ProfileChord距离是合适的。这些距离以每个观测值的总量加权,以这种方式使得距离在个体间可变时会更小,尽管个体的绝对大小差异很大,但它们更相似。小心!这些距离很好地反映了轮廓之间的差异,但失去了幅度效应。当我们有不同的样本量时,它们可能非常有用。 生态学示例:我们想研究许多土地的动物,并且我们有腹足纲动物清单的数据矩阵(行中的采样位置和列中的物种名称)。矩阵的特征是具有许多零和不同的大小,因为某些位置具有某些物种,而另一些具有其他物种。我们可以使用赫林格距离。

Bray-Curtis非常相似,但是当我们要区分轮廓并考虑相对幅度时,它更合适。


1
请注册和/或合并您的帐户1 2(您可以在我们的帮助中心的“ 我的帐户”部分中找到有关如何执行此操作的信息)。然后,您将能够跟踪您的答案,对它们的答复等,以及其他好处。由于您是新来的,您可能想参加我们的游览,其中包含有关新用户的信息。
gung

您之前已经在类似的线程中发布了相同的答案stats.stackexchange.com/a/253268/3277。答案重复不公平。我建议您删除当前的。但是您可以并且也欢迎发布指向其他答案的链接-作为OP问题下方的评论或在当前主题中的一些答案。
ttnphns

2

就我而言,如果您想要一个安全的选择,那么光谱聚类方法近年来已达到最高的准确率-至少在图像聚类中。

至于距离度量,它很大程度上取决于数据的组织方式。安全的选择是简单的欧氏距离,但是如果您知道数据包含流形,则应该通过核方法映射这些点。

PS:它们都与数值有关,而不是分类。我不确定如何对分类数据进行聚类。


2

这是几种可以帮助回答问题的聚类算法的摘要

“我应该使用哪种聚类技术?”

有没有客观的“正确”的聚类算法参考

可以基于聚类算法的“聚类模型”对其进行分类。为特定种类的模型设计的算法通常会在不同种类的模型上失败。例如,k均值无法找到非凸簇,它只能找到圆形簇。

因此,了解这些“群集模型”成为了解如何在各种群集算法/方法中进行选择的关键。典型的集群模型包括:

[1]连通性模型:基于距离连通性构建模型。例如层次聚类。当我们需要基于树切割高度的不同分区时使用。R函数:stats包中的hclust。

[2]质心模型:通过用单个均值向量表示每个聚类来构建模型。当我们需要清晰的分区时使用(与稍后描述的模糊聚类相反)。R函数:统计软件包中的kmeans。

[3]分布模型:基于统计分布(例如期望最大化算法使用的多元正态分布)构建模型。当聚类形状可以是任意的时(与假设圆形聚类的k均值不同)时使用。R函数:emcluster软件包中的emcluster。

[4]密度模型:基于集群建立模型,作为数据空间中连接的密集区域。例如DBSCAN和OPTICS。当簇的形状可以是任意的时(与假设圆形簇的k均值不同)时使用。R dbscan软件包dbscan中的函数。

[5]子空间模型:基于集群成员和相关属性构建模型。例如,双聚类(也称为共聚或双模聚类)。当需要同时进行行和列群集时使用。R功能biclust装在biclust软件包中。

[6]分组模型:基于分组信息构建模型。例如协作过滤(推荐算法)。R函数推荐使用recommenderlab程序包。

[7]基于图的模型:基于派系构建模型。社区结构检测算法试图在有向图或无向图中找到密集的子图。例如,igraph软件包中的R函数cluster_walktrap。

[8] Kohonen自组织特征图:基于神经网络构建模型。kohonen软件包中的R function som。

[9]光谱聚类:基于非凸聚类结构或在中心度量值不适合完整聚类的描述时,构建模型。kernlab软件包中的R函数规范。

[10]子空间聚类:对于高维数据,距离函数可能会出现问题。集群模型包括集群的相关属性。例如,R包HDclassif中的hddc函数。

[11]序列聚类:对相关序列进行分组。rBlast程序包。

[12]相似性传播:基于数据点之间传递的消息构建模型。在运行算法之前,不需要确定簇数。对于某些计算机视觉和计算生物学任务,例如k均值,Ref Rpackage APCluster ,它比对人脸图片进行聚类并识别受监管的转录本要好。

[13]流聚类:基于连续到达的数据(例如电话记录,财务交易等)建立模型。例如R包BIRCH [ https://cran.r-project.org/src/contrib/Archive/birch/]

[14]文档聚类(或文本聚类):基于SVD构建模型。它已用于主题提取。例如Carrot [ http://search.carrot2.org]是一个开源搜索结果聚类引擎,可以将文档聚类为主题类别。

[15]潜在类模型:将一组观察到的多元变量与一组潜在变量相关联。LCA可用于协作过滤。Recommendationerlab软件包中的R函数Recommender具有协作过滤功能。

[16] Biclustering:用于同时对两模式数据的行和列进行聚类。例如,在包装biclust中的R function biclust。

[17]软聚类(模糊聚类):每个对象在一定程度上属于每个聚类。例如:f fclust软件包中的Fclust函数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.