轮廓公式会根据距离度量而变化吗?

机器算法验证 聚类 数据挖掘 Python 距离函数
2022-03-29 18:43:49

我正在使用轮廓宽度来计算 k 均值中 k 的最佳值。在执行文档聚类时,我在 Python 中计算 和 的值,a如下b所示:

a = distance(data[index], centroids[clusters[index]], metric=metric, p=p)
b = min([distance(data[index], c) for i,c in enumerate(centroids) if i != currentindex])
score = float(b - a) / max(a, b) if max(a, b) > 0 else 0.0

维基百科页面的原始公式如下:

在此处输入图像描述

我正在使用cosine相似性度量来计算距离,并且想知道这个公式是否需要更改或者可以保持原样。在上面的代码片段中,该函数distance计算余弦相似度度量。

2个回答

剪影统计适用于距离,而不是相似性。人们应该将相似性还原为距离。执行此操作的一般步骤:1)将对角线设置为 0,2)恢复元素的符号,3)找到最小的元素并将其从每个元素中减去,4)将对角线设置为 0。

对于余弦或相关性,还有一种几何上更正确的方法distance = sqrt[2(1-similarity)]它来自三角函数“余弦定理”。

顺便说一句,如果你使用 SPSS,你可以在我的网页上找到一组宏,这些宏计算了许多聚类标准,包括剪影。

您可以计算相似度矩阵的轮廓。PJ Rousseeuw 关于剪影的开创性论文解释了如何从相似度矩阵计算剪影:

  1. 内聚力的计算保持不变。
  2. 对于计算分离,取最大值而不是最小值。
  3. 计算轮廓时,分子变化如下:凝聚-分离。

请参阅Peter Rousseeuw的论文《剪影:聚类分析的解释和验证的图形辅助》中的第 57 页