怎么理解聚类算法的评价指标Rand Index(RI)?

  统计/机器学习 无监督学习 模型验证    浏览次数: 459
1

怎么理解聚类算法的评价指标Rand Index(RI)?谢谢!

 

huanx8t   2018-06-02 02:41



   2个回答 
3

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面经 问答 实战

kidd23   2018-08-08 11:55

谢谢! - huanx8t   2018-08-19 10:56
2

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))


SofaSofa数据科学社区 DS面经 问答 实战

sasa   2018-08-10 03:09

谢谢您的代码! - huanx8t   2018-08-19 10:57


  相关主题

聚类问题需不需要分出测试集?   1回答

怎么评价一个聚类算法?   2回答

谱聚类中的相似矩阵是怎么定义的?   0回答

聚类问题可以用stacking model的方法吗?   2回答

层次聚类中的Ward's method是什么意思   1回答

软聚类,硬聚类?   1回答

什么是K-Modes(K众数)聚类法?   1回答

层次聚类里的linkage是什么意思?   2回答

python中实现k-modes的包   1回答

有没有对聚类成员个数有限制的聚类算法?   2回答

一维的数据可以做聚类吗?   3回答

离群点、孤立点、异常点有什么区别吗?   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!