您如何根据 Python 中的相似性或重叠来比较两个集群分组?
How can you compare two cluster groupings in terms of similarity or overlap in Python?
我正在尝试做的简化示例:
假设我有 3 个数据点 A、B 和 C。我 运行 对这些数据进行 KMeans 聚类并得到 2 个聚类 [(A,B),(C)]
。然后我 运行 对此数据进行 MeanShift 聚类并得到 2 个聚类 [(A),(B,C)]
。很明显,这两种聚类方法以不同的方式对数据进行了聚类。我希望能够量化这种差异。换句话说,我可以使用什么指标来确定从两种算法获得的两个集群分组之间的百分比 similarity/overlap?以下是可能给出的分数范围:
[(A,B),(C)]
对比 [(A,B),(C)]
得分为 100%
- ~
[(A,B),(C)]
与 [(A),(B,C)]
的 50% 分数
- ~
[(A,B),(C)]
与 [(A,B,C)]
的 20% 分数
这些分数有点武断,因为我不确定如何衡量两个不同集群分组之间的相似性。请记住,这是一个简化的示例,在实际应用程序中,您可以有很多数据点,每个集群分组也可以有 2 个以上的集群。在尝试将聚类分组与带标签的数据分组进行比较时(当您有带标签的数据时),拥有这样的指标也很有用。
编辑:我的一个想法是获取第一个集群分组中的每个集群,并获得其与第二个集群分组中每个集群的重叠百分比。这将为您提供第一个集群分组中的集群与第二个集群分组中的集群的相似性矩阵。但是我不确定你会用这个矩阵做什么。也许在每一行或每一列中取最高的相似度分数并用它做点什么?
好吧,确定聚类的数量是数据分析中的问题,与聚类问题本身不同。这个 AIC 有很多标准
或立方聚类标准。我认为使用 scikit-learn 没有选项可以默认计算这些两个,但我知道 R 中有包。
使用评估指标。
许多指标是对称的。例如,adjusted Rand index.
接近 1 的值表示它们非常相似,接近 0 表示它们是随机的,远小于 0 表示一个的每个簇 "evenly" 分布在另一个的所有簇中。
我正在尝试做的简化示例:
假设我有 3 个数据点 A、B 和 C。我 运行 对这些数据进行 KMeans 聚类并得到 2 个聚类 [(A,B),(C)]
。然后我 运行 对此数据进行 MeanShift 聚类并得到 2 个聚类 [(A),(B,C)]
。很明显,这两种聚类方法以不同的方式对数据进行了聚类。我希望能够量化这种差异。换句话说,我可以使用什么指标来确定从两种算法获得的两个集群分组之间的百分比 similarity/overlap?以下是可能给出的分数范围:
[(A,B),(C)]
对比[(A,B),(C)]
得分为 100%
- ~
[(A,B),(C)]
与[(A),(B,C)]
的 50% 分数
- ~
[(A,B),(C)]
与[(A,B,C)]
的 20% 分数
这些分数有点武断,因为我不确定如何衡量两个不同集群分组之间的相似性。请记住,这是一个简化的示例,在实际应用程序中,您可以有很多数据点,每个集群分组也可以有 2 个以上的集群。在尝试将聚类分组与带标签的数据分组进行比较时(当您有带标签的数据时),拥有这样的指标也很有用。
编辑:我的一个想法是获取第一个集群分组中的每个集群,并获得其与第二个集群分组中每个集群的重叠百分比。这将为您提供第一个集群分组中的集群与第二个集群分组中的集群的相似性矩阵。但是我不确定你会用这个矩阵做什么。也许在每一行或每一列中取最高的相似度分数并用它做点什么?
好吧,确定聚类的数量是数据分析中的问题,与聚类问题本身不同。这个 AIC 有很多标准 或立方聚类标准。我认为使用 scikit-learn 没有选项可以默认计算这些两个,但我知道 R 中有包。
使用评估指标。
许多指标是对称的。例如,adjusted Rand index.
接近 1 的值表示它们非常相似,接近 0 表示它们是随机的,远小于 0 表示一个的每个簇 "evenly" 分布在另一个的所有簇中。