在MATLAB中对kmeans中的簇数进行排序
问题描述:
kmeans(X,k)
的idx
输出参数包含唯一值1:k
,但以任意顺序;例如对于已经连续索引的簇的数据(即kmeans
用于识别间隙/边界),唯一值不反映数据中簇的顺序。如何将idx
输出的每个值重新编号,以使唯一值以升序显示,即unique(idx,'stable') == unique(idx)
?在MATLAB中对kmeans中的簇数进行排序
答
重新编号可以通过使用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
,即idx == C(ic)
导出unique
的输入。通常C
进行排序,但对于setOrder
输入参数提供'stable'
,C
包含出场顺序在idx
独特的价值观,所以从idx
每个唯一值将在离开ic
排序的方式进行重新编号。
的想法使用单独ic
是基于post通过上的tumblr笨Matlab的黑客到的输入向量v
的唯一值映射到1:length(unique(v))
。