Индекс Рэнда — это способ сравнить сходство результатов между двумя разными методами кластеризации.
Часто обозначаемый R , индекс Рэнда рассчитывается как:
R = (a+b) / ( n C 2 )
куда:
- a: количество раз, когда пара элементов принадлежит одному и тому же кластеру при использовании двух методов кластеризации.
- b: количество раз, когда пара элементов принадлежит разностным кластерам по двум методам кластеризации.
- n C 2 : количество неупорядоченных пар в наборе из n элементов.
Индекс Рэнда всегда принимает значение от 0 до 1, где:
- 0: Указывает, что два метода кластеризации не согласуются с кластеризацией любой пары элементов.
- 1: Указывает, что два метода кластеризации полностью согласуются в отношении кластеризации каждой пары элементов.
В следующем примере показано, как вычислить индекс Рэнда между двумя методами кластеризации для простого набора данных.
Пример: как рассчитать индекс Рэнда
Предположим, у нас есть следующий набор данных из пяти элементов:
- Набор данных: {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} , {С, Е}, {Д, Е}
Есть 10 неупорядоченных пар.
Далее нам нужно вычислить a , которое представляет собой количество неупорядоченных пар, принадлежащих одному и тому же кластеру в обоих методах кластеризации:
- {А, Б}
В этом случае а = 1 .
Далее нам нужно вычислить b , который представляет собой количество неупорядоченных пар, принадлежащих разным кластерам в обоих методах кластеризации:
- {А, Г}, {А, Е}, {Б, Г}, {Б, Е}, {В, Е}
В этом случае b = 5 .
Наконец, мы можем рассчитать индекс Рэнда как:
- R = (a+b) / ( n C 2 )
- Р = (1+5) / 10
- Р = 6/10
Индекс Рэнда равен 0,6 .
Как рассчитать индекс Рэнда в R
Мы можем использовать функцию rand.index() из пакета ископаемых для вычисления индекса Rand между двумя методами кластеризации в R:
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.Это соответствует значению, которое мы рассчитали вручную.
Как рассчитать индекс Rand в Python
Мы можем определить следующую функцию в 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
Введение в иерархическую кластеризацию