聚类分割结果图固定颜色表示
在我们使用聚类分割时,由于每次聚类中心顺序不一样,结果图中同一类别的颜色表示总是不同,这样很不便于比较。比如类别有3种,用3种不同的颜色表示,随机的结果会有
A
3
3
A_{3}^{3}
A33种,很烦,所以希望每种类别固定一种颜色表示。
问题的关键是类别跟聚类中心不总是对应的。比如说三个类别对应的位置为上、中、下;聚类中心为1,2,3;每次的聚类中心不一定是123、321还是231等等,所以不能给聚类中心固定颜色表示。
我这里的思路是在标签矩阵中,第1次出现的标签被认为是第1类,第2次出现的标签被认为是第2类,第3次出现的标签被认为是第3类,而不是等于聚类中心的类别。
代码
function out_label = standLabel(label)
% 输出:标签矩阵out_label(1*n),n为样本数目
% 输入:标签矩阵label(1*n),n为样本数目
% out_label保存的是 每个元素在 原label中 出现的次序(非下标)
% 比如:label = [3 3 1 3 2 2];
% 不同元素出现的次序:3是第1次出现,1是第2次出现,2是第3次出现,
% 则out_label = [1 1 2 1 3 3];
% 初始化和label大小一样的out_label
out_label = zeros(size(label));
% 删除数组中重复的元素,只保留第一个,且结果不排序
% 即把数组 转换为 集合,'stable'表示结果不排序
l = unique(label,'stable');
for i = 1:length(l)
% out_label保存的是 每个元素在 原label中 出现的次序(非下标)
out_label(label == l(i)) = i;
end
end