在对数据集进行聚类分析以将相似案例分组时,需要在大量聚类方法和距离度量中进行选择。有时,一种选择可能会影响另一种,但是方法有很多可能的组合。
是否有人对如何从各种聚类算法/方法和距离度量中进行选择提出建议?这与变量的性质(例如分类或数字)和聚类问题有什么关系?有没有最佳技术?
在对数据集进行聚类分析以将相似案例分组时,需要在大量聚类方法和距离度量中进行选择。有时,一种选择可能会影响另一种,但是方法有很多可能的组合。
是否有人对如何从各种聚类算法/方法和距离度量中进行选择提出建议?这与变量的性质(例如分类或数字)和聚类问题有什么关系?有没有最佳技术?
Answers:
您的问题没有明确的答案,因为即使在相同的方法中,代表个体(不相似)的距离选择也会产生不同的结果,例如,在分层聚类中使用欧几里得与平方欧几里得时。再举一个例子,对于二进制数据,您可以选择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年)。下面提供了几个其他标准参考:
引用Hastie,Tibshirani和Friedman的话, 《统计学习的要素》,第1页。506:
“适当的差异度量比使用聚类算法对获得聚类成功要重要得多。问题的这一方面……取决于领域特定的知识,不适合进行一般研究。”
(也就是说,如果(wibni)有一个站点,学生可以在一些小的标准数据集上尝试一些算法和指标,那会不会很好呢?)
您无法预先知道哪种聚类算法会更好,但是有一些线索,例如,如果您想对图像进行聚类,则应首先尝试某些算法,例如“模糊艺术”,或者如果要对人脸进行分组,则应该开始(GGCI)用于图像的全局几何聚类。
无论如何,这不能保证最好的结果,所以我要做的是使用一个程序,该程序可以有条不紊地运行不同的群集算法,例如weka,RapidMiner或什至R(不可视),在那里我将程序设置为启动我可以使用的所有不同的聚类算法,并具有所有可能的不同距离,并且如果需要参数,请使用各种不同的参数值进行实验(如果我不知道聚类的数量,请使用各种参数运行每个的数量)。解决实验后,让它继续运行,但请记住将每个集群运行结果存储在某个地方。
然后比较结果以获得最佳结果聚类。这很棘手,因为您可以比较多个指标,而并非每种算法都提供所有指标。例如,模糊聚类算法与非模糊算法具有不同的度量标准,但仍可以通过将模糊结果组视为非模糊算法进行比较,我将坚持与经典度量标准进行比较,例如:
•SSE:每个聚类项的平方误差之和。
•群集间距离:每个群集质心之间的平方距离之和。
•每个群集的群集内距离:每个群集的项到其质心的平方距离之和。
•最大半径:实例到群集质心的最大距离。
•平均半径:实例到其群集质心的最大距离之和除以群集数。
选择正确的距离不是一项基本任务。当我们要对数据集进行聚类分析时,使用不同的距离可能会出现不同的结果,因此务必谨慎选择选择的距离,因为我们可以制作出能够很好地捕获可变性的假制品,但实际上却没有解决我们的问题。
当我有连续的数值变量并且我想反映绝对距离时,欧氏距离是合适的。该距离考虑了每个变量,并且不会消除冗余,因此,如果我有三个解释相同(相关)的变量,则可以将此效果加权三。而且,该距离不是比例不变的,因此通常我必须先进行比例缩放才能使用该距离。
生态学示例:我们在许多地方有不同的观察结果,专家们从其中取样了一些微生物,物理和化学因素。我们想找到生态系统中的模式。这些因素具有高度相关性,但是我们知道每个人都相关,因此我们不想删除这些冗余。我们将欧几里德距离与缩放数据一起使用,以避免单位的影响。
该马氏距离是合适的,当我有连续的数值变量,我想反映绝对距离,但是我们要消除冗余。如果我们重复变量,它们的重复作用将消失。
当我们想要强调变量之间的差异时,当我们想要区分轮廓时,Hellinger族,Species Profile和Chord距离是合适的。这些距离以每个观测值的总量加权,以这种方式使得距离在个体间可变时会更小,尽管个体的绝对大小差异很大,但它们更相似。小心!这些距离很好地反映了轮廓之间的差异,但失去了幅度效应。当我们有不同的样本量时,它们可能非常有用。 生态学示例:我们想研究许多土地的动物,并且我们有腹足纲动物清单的数据矩阵(行中的采样位置和列中的物种名称)。矩阵的特征是具有许多零和不同的大小,因为某些位置具有某些物种,而另一些具有其他物种。我们可以使用赫林格距离。
Bray-Curtis非常相似,但是当我们要区分轮廓并考虑相对幅度时,它更合适。
这是几种可以帮助回答问题的聚类算法的摘要
“我应该使用哪种聚类技术?”
有没有客观的“正确”的聚类算法参考
可以基于聚类算法的“聚类模型”对其进行分类。为特定种类的模型设计的算法通常会在不同种类的模型上失败。例如,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函数。