了解聚类结果的比较

机器算法验证 r 聚类
2022-03-17 04:03:15

我正在尝试将数据分组。我对这个话题很陌生,并试图理解一些分析的输出。

使用Quick-R中的示例,建议使用几个R包。我尝试过使用其中两个包(fpc使用kmeans函数和mclust)。我不明白这个分析的一个方面是结果的比较。

# comparing 2 cluster solutions
library(fpc)
cluster.stats(d, fit1$cluster, fit2$cluster)

我已经阅读了fpc 手册的相关部分,但仍然不清楚我的目标是什么。例如,这是比较两种不同聚类方法的输出:

$n
[1] 521

$cluster.number
[1] 4

$cluster.size
[1] 250 119  78  74

$diameter
[1]  5.278162  9.773658 16.460074  7.328020

$average.distance
[1] 1.632656 2.106422 3.461598 2.622574

$median.distance
[1] 1.562625 1.788113 2.763217 2.463826

$separation
[1] 0.2797048 0.3754188 0.2797048 0.3557264

$average.toother
[1] 3.442575 3.929158 4.068230 4.425910

$separation.matrix
          [,1]      [,2]      [,3]      [,4]
[1,] 0.0000000 0.3754188 0.2797048 0.3557264
[2,] 0.3754188 0.0000000 0.6299734 2.9020383
[3,] 0.2797048 0.6299734 0.0000000 0.6803704
[4,] 0.3557264 2.9020383 0.6803704 0.0000000

$average.between
[1] 3.865142

$average.within
[1] 1.894740

$n.between
[1] 91610

$n.within
[1] 43850

$within.cluster.ss
[1] 1785.935

$clus.avg.silwidths
         1          2          3          4 
0.42072895 0.31672350 0.01810699 0.23728253 

$avg.silwidth
[1] 0.3106403

$g2
NULL

$g3
NULL

$pearsongamma
[1] 0.4869491

$dunn
[1] 0.01699292

$entropy
[1] 1.251134

$wb.ratio
[1] 0.4902123

$ch
[1] 178.9074

$corrected.rand
[1] 0.2046704

$vi
[1] 1.56189

我的主要问题是更好地理解如何解释这个集群比较的结果。


之前,我曾询问过更多关于缩放数据的效果以及计算距离矩阵的问题。但是 mariana soffer 清楚地回答了这个问题,我只是重新组织我的问题以强调我对我的输出的解释感兴趣,这是对两种不同聚类算法的比较。

问题的上一部分:如果我正在做任何类型的聚类,我应该总是缩放数据吗?例如,我dist()在我的缩放数据集上使用该函数作为该cluster.stats()函数的输入,但是我并不完全理解发生了什么。dist() 我在这里读到,它指出:

此函数计算并返回通过使用指定的距离度量计算出的距离矩阵,以计算数据矩阵的行之间的距离。

2个回答

首先让我告诉你,我不会在这里解释所有的度量,但我会给你一个关于如何比较聚类方法有多好的想法(假设我们正在比较具有相同数量的 2 个聚类方法簇)。

  1. 例如簇的直径越大,聚类越差,因为属于簇的点越分散。
  2. 每个聚类的平均距离越高,聚类方法越差。(假设平均距离是簇中每个点到簇中心的距离的平均值。)

这是最常用的两个指标。检查这些链接以了解它们的含义:

  • 簇间距离(越高越好,是不同簇质心之间距离的总和)
  • 簇内距离(越低越好,是簇成员到簇中心距离的总和)

为了更好地理解上述指标,请检查

然后,您应该阅读您正在使用的库和函数的手册,以了解哪些度量代表了这些中的每一个,或者如果未包含这些,请尝试查找包含的含义。但是,我不会打扰并坚持我在这里所说的那些。

让我们继续你提出的问题:

  1. 关于缩放数据:是的,您应该始终缩放数据以进行聚类,否则不同维度(变量)的不同比例将对数据的聚类方式产生不同的影响,变量中的值越高,该变量的影响越大将在于如何完成聚类,而实际上它们都应该具有相同的影响(除非出于某种特殊的奇怪原因,您不希望那样)。
  2. 距离函数计算从一个点(实例)到另一个点的所有距离。最常见的距离度量是欧几里得,例如,假设您要测量从实例 1 到实例 2 的距离(为简单起见,假设您只有 2 个实例)。还让我们假设每个实例有 3 个值(x1, x2, x3),所以从 I1I1=0.3, 0.2, 0.5I2=0.3, 0.3, 0.4I2 的欧几里得距离将是:sqrt((0.3-0.2)^2+(0.2-0.3)^2+(0.5-0.4)^2)=0.17,因此距离矩阵将导致:

        i1    i2
    i1  0     0.17
    i2  0.17  0
    

请注意,距离矩阵始终是对称的。

欧几里得距离公式并不是唯一存在的。还有许多其他距离可用于计算此矩阵。例如,查看 Wikipedia Manhattain Distance以及如何计算它。欧几里得距离的维基百科页面的末尾(您也可以在其中查看其公式),您可以检查存在哪些其他距离。

我认为聚类的最佳质量度量是聚类假设,正如 Seeger 在Learning with labeled and unlabeled data中给出的那样:

例如,假设 X = Rd 和“集群假设”的有效性,即两个点 x, x 应该具有相同的标签 t,如果在 X 中它们之间存在一条仅通过相对较高 P(x )。

是的,这降低了质心和中心的整个概念。毕竟,如果您考虑到您的数据可能位于您实际操作的空间的非线性子流形内,那么这是相当随意的概念。

您可以轻松构建混合模型分解的合成数据集。例如这个:云中的圆圈

长话短说:我会以极小极大方式衡量聚类算法的质量。最好的聚类算法是最小化一个点到同一个簇的最近邻的最大距离,同时最大化一个点到另一个簇的最近邻的最小距离的算法。

您可能还对A Nonparametric Information Theoretic Clustering Algorithm感兴趣。