在 MATLAB 中对 kmeans 中的簇数进行排序

Sort cluster numbers from kmeans in MATLAB

kmeans(X,k)idx 输出参数包含唯一值 1:k 但顺序任意;例如对于具有已经连续索引的簇的数据(即 kmeans 用于标识 gaps/boundaries),唯一值不反映数据中簇的顺序。 idx 输出的每个值如何重新编号,以便唯一值按升序显示,即 unique(idx,'stable') == unique(idx)?

可以使用uniqueic output argument进行重新编号:

% Find k clusters
idx = kmeans(X,k);

% Renumber idx for unique values in ascending order 
[~,~,ic] = unique(idx,'stable');

ic 包含用于从其默认输出参数 C 导出 unique 的输入的索引,即 idx == C(ic)。通常 C 是排序的,但是通过为 setOrder 输入参数提供 'stable'C 包含按出现顺序排列的 idx 中的唯一值,因此每个唯一值idx 中的值将按照 ic 排序的方式重新编号。

单独使用 ic 的想法是基于 Stupid Matlab Hacks 在 Tumblr 上的 post 来映射输入向量的唯一值 v1:length(unique(v))