什么是兰德指数? (定义和示例)
兰德指数是一种比较两种不同聚类方法结果相似度的方法。
兰德指数通常表示为R ,计算公式如下:
R = (a+b) / ( nC 2 )
金子:
- a:根据两种聚类方法,一对元素属于同一簇的次数。
- b:根据两种聚类方法,一对元素属于不同簇的次数。
- n C 2 : n 个元素的集合中无序对的数量。
Rand 索引始终采用 0 到 1 之间的值,其中:
- 0:表示两种聚类方法对一对元素的聚类不一致。
- 1:表示两种聚类方法在每对元素的聚类上完全一致。
以下示例说明如何计算简单数据集的两种聚类方法之间的 Rand 指数。
示例:如何计算兰德指数
假设我们有以下由五个元素组成的数据集:
- 数据集:{A、B、C、D、E}
假设我们使用两种聚类方法将每个元素放入以下聚类中:
- 方法 1 聚类:{1, 1, 1, 2, 2}
- 聚类方法2:{1,1,2,2,3}
为了计算这些聚类方法之间的兰德指数,我们首先需要写下五元素数据集中所有可能的无序对:
- 无序对:{A, B}, {A, C}, {A, D}, {A, E}, {B, C}, {B, D}, {B, E}, {C, D } , {C, E}, {D, E}
有10 个无序对。
接下来,我们需要计算a ,它表示两种聚类方法中属于同一簇的无序对的数量:
- {AB}
在这种情况下, a = 1 。
接下来,我们需要计算b ,它表示两种聚类方法中属于不同簇的无序对的数量:
- {A,D},{A,E},{B,D},{B,E},{C,E}
在这种情况下,b = 5 。
最后,我们可以计算出兰德指数如下:
- R = (a+b) / ( nC 2 )
- R = (1+5) / 10
- R = 6/10
兰德指数为0.6 。
如何计算R中的兰德指数
我们可以使用化石包中的rand.index()函数来计算 R 中两种聚类方法之间的 Rand 指数:
library (fossil)
#define clusters
method1 <- c(1, 1, 1, 2, 2)
method2 <- c(1, 1, 2, 2, 3)
#calculate Rand index between clustering methods
rand. index (method1, method2)
[1] 0.6
兰德指数为0.6 。这对应于我们手动计算的值。
如何在 Python 中计算 Rand 指数
我们可以在Python中定义以下函数来计算两个簇之间的Rand指数:
import numpy as np from scipy. special import comb #define Rand index function def rand_index (actual, pred): tp_plus_fp = comb(np. bincount (actual), 2). sum () tp_plus_fn = comb(np. bincount (pred), 2). sum () A = np. c_ [(actual, pred)] tp = sum(comb( np.bincount (A[A[:, 0] == i, 1]), 2) .sum () for i in set(actual)) fp = tp_plus_fp - tp fn = tp_plus_fn - tp tn = comb(len(A), 2) - tp - fp - fn return (tp + tn) / (tp + fp + fn + tn) #calculate Rand index rand_index([1, 1, 1, 2, 2], [1, 1, 2, 2, 3]) 0.6
兰德指数结果为0.6 。这对应于前面示例中计算的值。
其他资源
K 均值聚类简介
K-Medoids 聚类简介
层次聚类简介