在 MATLAB 中对 kmeans 中的簇数进行排序
Sort cluster numbers from kmeans in MATLAB
kmeans(X,k)
的 idx
输出参数包含唯一值 1:k
但顺序任意;例如对于具有已经连续索引的簇的数据(即 kmeans
用于标识 gaps/boundaries),唯一值不反映数据中簇的顺序。 idx
输出的每个值如何重新编号,以便唯一值按升序显示,即 unique(idx,'stable') == unique(idx)
?
可以使用unique
的ic
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 来映射输入向量的唯一值 v
到 1:length(unique(v))
。
kmeans(X,k)
的 idx
输出参数包含唯一值 1:k
但顺序任意;例如对于具有已经连续索引的簇的数据(即 kmeans
用于标识 gaps/boundaries),唯一值不反映数据中簇的顺序。 idx
输出的每个值如何重新编号,以便唯一值按升序显示,即 unique(idx,'stable') == unique(idx)
?
可以使用unique
的ic
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 来映射输入向量的唯一值 v
到 1:length(unique(v))
。