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

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

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

 

huanx8t   2018-06-02 02:41



   2个回答 
1

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,就表示两个聚类结果完全一样。

kidd23   2018-08-08 11:55

0

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


sasa   2018-08-10 03:09



  相关主题

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

如何用K Means做异常点检测?   1回答

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

K-MEANS初始点选择的问题   2回答

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

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

K Means初始点必须是样本中的点吗   2回答

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

通俗地解释c-means以及fuzzy c-means是什么意思   1回答

Jenks和K Means在一维数据时,是不是等价的?   2回答

关于小批量K均值(mini-batch K Means)的问题   2回答

k-medoids和k-means区别   3回答



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

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

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

我们谢绝答非所问。

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

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