什么是兰德指数? (定义和示例)


兰德指数是一种比较两种不同聚类方法结果相似度的方法。

兰德指数通常表示为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 聚类简介
层次聚类简介

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注