使用与地面实况定义相同的颜色为集群着色以进行可视化

Posted

技术标签:

【中文标题】使用与地面实况定义相同的颜色为集群着色以进行可视化【英文标题】:Coloring the cluster with same colors as defined for ground truth for visualization 【发布时间】:2020-03-19 17:30:16 【问题描述】:

示例:(考虑平台 = MATLAB)

Ground_Truth_Indices = [ 1, 1, 1, 2, 2, 2, 3, 3, 3];

对于 GT 中的每个唯一索引,我定义了一个颜色数组。

Color_Array = [ 0, 255, 0;  255, 0, 0;  0, 0, 255]; %assuming (in this eg.) the max. cluster size is 3

接下来,我使用了一个聚类算法(在我的例子中是 DBSCAN),它给出了以下索引:

Clustered_Indices = [2, 2, 2, 3, 3, 3, 1, 1, 1];

现在,我需要将结果与基本事实一起可视化。 但聚类后得到的指标与ground truth指标不同。

因此,根据定义的颜色数组,在可视化过程中,我不会得到与地面实况相同的颜色模式并获得聚类。有什么解决方案可以使两种颜色保持一致吗?

Figure with ground truth and obtained clusters

上面的图链接也说明了这一点(不是 MatLab 绘图!为了说明目的而创建),其中集群 1 在基本实况以及获得的集群结果中应该具有相同的颜色。但是,这里不是这样,因为定义了与颜色数组相关的索引号。

注意:聚类后得到的索引不能预先定义,取决于聚类算法和聚类输入。

【问题讨论】:

能否请您edit 您的帖子并添加一些数字来显示您期望获得什么集群以及您正在获得什么?附带说明一下,MATLAB 中的 cmets 以 % 而不是 # 开头。 【参考方案1】:

灵感来自这篇文章的答案: How can I match up cluster labels to my 'ground truth' labels in Matlab,我的问题有以下解决方案代码:

N = length(Ground_Truth_Indices);

cluster_names = unique(Clustered_Indices);
accuracy = 0;
maxInd = 1;

perm = perms(unique(Ground_Truth_Indices));
[perm_nrows perm_ncols] = size(perm);

true_labels = Ground_Truth_Indices;

for i=1:perm_nrows
    flipped_labels = zeros(1,N);
    for cl = 1 : perm_ncol
        flipped_labels(Clustered_Indices==cluster_names(cl)) = perm(i,cl);
    end

    testAcc = sum(flipped_labels == Ground_Truth_Indices')/N;
    if testAcc > accuracy
        accuracy = testAcc;
        maxInd = i;
        true_labels = flipped_labels;
    end

end

其中“true_labels”包含根据变量“Ground_Truth_Indices”重新排列的变量“Clustered_Indices”的标签。

原始帖子中解释的此代码使用基于排列的 匹配(它适用于我在这篇文章中给出的示例。我还测试了其他变体)。但是,当集群的大小变大时,这段代码 效果不好。对此代码有何看法?有没有更好的 怎么写呢?还是优化一下?

【讨论】:

【参考方案2】:

您可以使用 Kuhn-Munkres 最大匹配 (Hungarian Algorithm) 来找到集群标签的最佳 1:1 对齐方式。

由于生成的聚类可能具有不同数量的聚类,因此您需要一个能够在非方阵中找到对齐的强大实现。

但您可能对可视化聚类之间的差异更感兴趣。我在以下论文中看到了这一点,但我不确定这是否适用于玩具数据集:

聚类评估——度量​​和视觉支持 Elke Achtert、Sascha Goldhofer、+2 位作者 Arthur Zimek 发表于 IEEE 第 28 届国际… 2012 DOI:10.1109/ICDE.2012.128

(对不起,参考文献不完整,责怪语义学者,但从论文中链接一个图最容易,我无法在此设备上截取更好的屏幕截图)。

这似乎可视化了 k-means 和 EM 聚类之间的差异,其中灰色点是它们在聚类上达成一致的点。这种方法似乎适用于点对,就像评估措施一样。

【讨论】:

以上是关于使用与地面实况定义相同的颜色为集群着色以进行可视化的主要内容,如果未能解决你的问题,请参考以下文章

用于训练的线性变换输出和地面实况的损失

地面实况图像到一个热编码阵列(语义分割)

使用相同的标签和颜色为不同的图形手动斜体和着色图例

SceneKit - 在着色器修改器中访问目标颜色以进行混合

不是二进制交叉熵中的二进制地面实况标签?

Flutter GoogleMaps - 自定义标记的动态着色