0

我正在使用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。下面是带有 MATLAB 内置 K-Means的 Iris 数据集https://archive.ics.uci.edu/ml/datasets/iris的示例。

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

4

1 回答 1

0

随着数据点数量的增加(即使在比较随机聚类时),兰德指数将趋于 1,因此当您拥有大数据集时,您永远不会真正期望看到较小的兰德值。

同时,当您的所有点都落入同一个大集群时,准确性可能会很高。

我感觉 NMI 正在产生更可靠的比较。为了验证,尝试运行降维并根据两个聚类用颜色绘制数据点。视觉统计通常最适合培养对数据的直觉。

如果你想探索更多,一个方便的用于聚类比较的 python 包是CluSim

于 2020-05-26T20:56:41.213 回答