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

  统计/机器学习 无监督学习 模型验证    浏览次数:7522        分享
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面试题库 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面试题库 DS面经

sasa   2018-08-10 03:09

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


  相关讨论

怎么评价一个聚类算法?

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

软聚类,硬聚类?

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

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

dbscan 中的参数值如何确定?

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

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

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

k-fold cross validation的k怎么选

  随便看看

训练神经网络中经常提到的epoch是什么意思

tsne被忽视?tsne有什么缺点?

pandas报错ValueError: Cannot convert non-finite values (NA or inf) to integer

xgboost怎么调参?

NLP里的OOV是什么意思?