具有混合类型数据的分层聚类-使用什么距离/相似性?


34

在我的数据集中,我们有连续变量和自然离散变量。我想知道我们是否可以使用两种类型的变量进行层次聚类。如果是的话,哪种距离测量是合适的?


您正在使用什么软件?
rolando2 2011年

@ rolando2:我正在使用R(hclus包)。
Beta

1
有使用分层集群的理由吗?
suncoolsu 2011年

娜。为了我的知识,我只是问这个问题。当我们混合使用数据类型时,可以进行分层吗?如果是,那为什么呢?如果没有,那为什么呢?
Beta

@ user4278好吧,您的目标什么?您是否要确定(个人)集群?
chl

Answers:


45

一种方法是使用Gower相似系数,它是一个综合量度1;它需要定量(如等级量表),二进制(如当前/缺席)和名义(如工人/教师/文员)变量。后来Podani 2添加了一个选项,也可以采用序数变量。12

即使没有公式,该系数也很容易理解。您可以通过考虑变量的类型,然后通过对所有变量求平均值,来计算每个变量在个体之间的相似度值。通常,计算Gower的程序将允许您加权变量,即变量对复合公式的贡献。但是,对不同类型的变量进行适当的加权是一个问题,没有明确的指导方针,这会使高尔或其他接近度指数的“综合”指数面临挑战。

高尔相似度(GS)的方面:

  • 当所有变量都是定量的(区间)时,系数就是转换为相似度的距离归一化曼哈顿距离。由于标准化,可以安全地使用不同单位的变量。但是,您不应忘记异常值。(您可能还决定通过除范围以外的另一种度量扩散来进行归一化。)由于通过诸如范围之类的统计量进行归一化,对数据集中的个体组成敏感,因此某些两个个体之间的高尔相似性可能会改变其值如果您在数据中删除或添加了其他一些个人。
  • 当所有变量都为序数时,则首先对它们进行排名,然后像上面使用定量变量一样对曼哈顿进行计算,但要对关系进行特殊调整。
  • 当所有变量都是二元变量时(类别的不对称意义为:“存在”与“不存在”),则系数为Jaccard匹配系数(当两个人都缺少属性时,该系数既不匹配也不匹配)。
  • 当所有变量都是名义变量(此处也包括具有对称意义的二分式:“ this” vs“ that”)时,系数为 从名义变量获得 Dice匹配系数,如果将它们重新编码为虚拟变量(请参阅此答案以了解更多) 。

(很容易扩展类型列表。例如,可以使用转换为相似性的标准化卡方距离为计数变量添加一个求和。)

系数范围为0到1。

高尔距离 ”。不存在序数变量(即不使用Podani选项)1GS表现为欧几里德距离,它完全支持欧几里德空间。但是1GS仅是度量(支持三角不等式),不是欧几里得。存在序数变量(使用Podani选项)1GS仅是度量标准,不是欧几里得;和1GS是不是在所有度量。另请参阅

利用欧几里得距离(支持欧几里德空间的距离),几乎任何经典的聚类技术都可以做到。包括K均值(当然,如果您的K均值程序可以处理距离矩阵),还包括Ward's,质心,分层聚类的试探性地允许使用K-means或其他基于欧几里德距离和非欧几里德公制距离的方法。对于非公制距离,不得使用此类方法。

上一段讨论了在数学上(几何上)使用高尔距离,K均值或Ward或此类聚类是否合法。从测量范围(“心理”)的角度来看,不应在任何分类(名义,二进制和有序)数据中计算均值或欧氏距离偏差;因此,从这种立场出发,您可能无法通过K均值,沃德等方法处理高尔系数。这种观点警告说,即使存在欧几里得空间,它也可能是颗粒状的,而不是光滑的(请参阅参考资料)。


1

2


谢谢ttnphns!您能告诉我R中的hclus软件包中集成了“高相似度系数”吗?R中是否有任何具有此功能的软件包。
Beta

我不是R用户,所以不知道,也不认为您会在hclus中找到它。但是,如果您使用Google“ Gower相似度R”,那么您一定会找到所需的!
ttnphns 2011年

user4278,以防万一您不避开SPSS,我的网页上有一个用于Gower相似性的宏。它接受加权和丢失数据。
ttnphns 2011年

@ user4278关于R,请从以下位置
chl

@ttnphns:谢谢!我已经访问了您的网站,它是SPSS的绝佳资源。但不幸的是,我使用SPSS的次数不多。但是如果我在R. @ chl中什么都没得到,我一定会使用它:谢谢!但这是一个巨大的清单。我读过某个地方,雏菊在群集程序包中具有高尔相似性的功能。
Beta

15

如果您偶然发现了这个问题,并且想知道要下载哪个软件包以在R中使用Gower度量标准,则该cluster软件包具有一个名为daisy()的函数,默认情况下,只要使用了混合类型的变量,该函数就默认使用Gower度量标准。或者,您可以手动将其设置为使用高尔度量。

daisy(x, metric = c("euclidean", "manhattan", "gower"),
      stand = FALSE, type = list(), weights = rep.int(1, p))

4
除了Zhubarb的答案,如果您希望从两个数据集中获取所有对之间的高尔距离,请参阅R包StatMatch
James Hirschorn 2015年
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.