Почему значение NMI мало при более высокой точности кластеризации и индексе Rand в кластеризации

Я использую https://www.mathworks.com/matlabcentral/fileexchange/32197-clustering-results-measurement для оценки моей точности кластеризации в MATLAB, он обеспечивает точность и rand_index, производительность нормальная, как и ожидалось. Однако, когда я пытаюсь использовать NMI в качестве метрики, производительность кластеризации оказывается крайне низкой, я использую исходный код (https://www.mathworks.com/matlabcentral/fileexchange/29047-normalized-mutual-information).

На самом деле у меня есть два вектора Nx1 в качестве входных данных, один из которых является фактической меткой, а другой - назначением меток. Я в основном проверяю каждый элемент изнутри и обнаружил, что даже у меня 82% rand_index, NMI составляет всего 0,3209. Ниже приведен пример набора данных Iris https://archive.ics.uci.edu/ml/datasets/iris со встроенными K-средними в MATLAB.

data = iris(:,1:data_dim);
k = 3;
[result_label,centroid] = kmeans(data,k,'MaxIter',10000);
actual_label = iris(:,end);

NMI = nmi(actual_label,result_label);
[Acc,rand_index,match] = AccMeasure(actual_label',result_label');

Результат:

Auto ACC: 0.820000 Rand_Index: 0.701818 NMI: 0.320912

1 ответ

Индекс Rand будет стремиться к 1 по мере увеличения количества точек данных (даже при сравнении случайных кластеров), поэтому вы никогда не ожидаете увидеть небольшие значения Rand, когда у вас большой набор данных.

В то же время точность может быть высокой, когда все ваши точки попадают в один и тот же большой кластер.

У меня такое чувство, что NMI дает более надежное сравнение. Чтобы проверить, попробуйте запустить уменьшение размерности и отобразить точки данных с цветом на основе двух кластеров. Визуальная статистика часто является лучшим средством развития интуиции о данных.

Если вы хотите узнать больше, удобный пакет Python для сравнения кластеров - CluSim.

Другие вопросы по тегам