聚类在分割和约简中的应用

时间:2013-11-01 02:59:58

标签: matlab compression cluster-analysis dimensionality-reduction

我有多维时间序列数据,是动作识别的功能。我有20个变量代表3D关节位置,四元数值,平均值,关节之间的欧氏距离。我已经应用了k = 4的kmeans聚类。在聚类之后,我想将共同发生的聚类id组合在一起,使得与它们相对应的数据点也被该聚类id聚合在一起。例如,考虑10个数据样本的以下聚类索引,

IDX = [1 1 2 1 3 3 3 2 2 4]'

让数据如下,其中A,B,C,D,E,F,G,H是3个特征变量,其中(AC)表示特定关节的(x,y,z)坐标,D表示关节相对于头部的欧氏距离,(EH)是关节的四元数值。让数值为元素。 Data =

A   B   C   D    E   F    G   H
a1  b1  c1  d1   e1  f1   g1  h1
a2  b2  c2  d2   e2  f2   g2  h2
a3  b3  c3  d3   e3  f3   g3  h3
a4  b4  c4  d4   e4  f4   g4  h4
a5  b5  c5  d5   e5  f5   g5  h5
a6  b6  c6  d6   e6  f6   g6  h6
a7  b7  c7  d7   e7  f7   g7  h7
a8  b8  c8  d8   e8  f8   g8  h8
a9  b9  c9  d9   e9  f9   g9  h9
a10 b10 c10 d10  e10 f10  g10 h10

然后,结果将是一个简化的向量(数据的压缩版本),其中前两行数据将由集群id 1表示,第三行数据由集群id 2,第4行= 1,第五行表示第六行和第七行将被组合并由第3,8和9行乘以2并且最后一行由4表示。因此,最终数据表示变为压缩字符串,其维度和长度也减小:Compressed_Data = [1 2 1 3 2 4]'。我该如何进行映射和转换?提前谢谢。

1 个答案:

答案 0 :(得分:1)

要压缩索引数组IDX,您可以尝试以下操作:

a = IDX; % for clarity, use a different variable, a
a(find(diff(IDX)==0)+1) = []; % remove repeating elements
Compressed_Data = a;

可替换地,

Compressed_Data = IDX([1; find(diff(IDX(:))~=0)+1])

如果这不是您想要的,请告诉我。