怎么理解聚类算法的评价指标Rand Index(RI)?谢谢!
2个回答
Rand Index是比较两个聚类结果的,也可以比较一个聚类算法的结果和真实分类情况。
Rand Index的想法是枚举样本中的所有的pair,然后看有多少个pair在聚类算法1和聚类算法2的情况是一致的。
比如说,有五个数据点,x是聚类1返回的结果,y是聚类2返回的结果
x:[1, 1, 2, 3, 3]
y:[2, 2, 3, 1, 2]
x[0, 1] = [1, 1],在同一簇中
y[0, 1] = [2, 2],也在同一簇中。
所以[0, 1]这一对在聚类1和聚类2中是一致的。
x[0, 2] = [1, 2],不在同一簇中
y[0, 2] = [2, 3],也不在同一簇中。
所以[0, 2]这一对在聚类1和聚类2中也是一致的。
如果有$n$个数据点,那么
$$\text{Rand Index}=\frac{\text{一致的对数}}{\frac{1}{2}n(n-1)}$$
分母上就是说$n$个数据点,一共有$\frac{1}{2}n(n-1)$个pair。
以上面的例子来说,Rand Index=0.7。因为一共有10对,其中3对不一致,分别是
x[0, 4]与y[0, 4]
x[1, 4]与y[1, 4]
x[3, 4]与y[3, 4]
很显然, Rand Index是0到1之间的数。如果是1,就表示两个聚类结果完全一样。
SofaSofa数据科学社区DS面试题库 DS面经
谢谢!
-
huanx8t
2018-08-19 10:56
rand index的python实现。
代码很简单,看懂代码了就理解rand index了
def RandIndedx(x, y):
l = len(x)
agrees = 0
for i in range(l-1):
for j in range(i+1, l):
x_status = int(x[i] == x[j])
y_status = int(y[i] == y[j])
agrees += int(x_status == y_status)
return agrees * 2 / (l * (l - 1))
谢谢您的代码!
-
huanx8t
2018-08-19 10:57