1

我有一個多維時間序列數據,它是動作識別的特徵。我有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特徵varaibles其中(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 

然後,結果將是一個減少的矢量(被壓縮的數據的版本),其中前2行數據將被集羣ID 1,由簇ID 2數據的第3行,第4行表示= 1,第5,第6和第7行將被組合並且由第9行2和最後一行4表示。因此,最終的數據表示變成壓縮的字符串,其維數和長度也被減少:Compressed_Data = [1 2 1 3 2 4]'。我如何進行映射和轉換?先謝謝你。

+0

目前尚不清楚你在做什麼。您是否嘗試過針對該問題的任何編碼,並且可以展示如何從輸入中獲取輸出的示例?你的輸出的倒數第二行不應該是2而不是1? – chappjc

+0

我無法弄清楚編碼這就是爲什麼我問這個問題。這個想法受到啓發http://homepages.abdn.ac.uk/yaji.sripada/pages/teaching/CS4031/information/SAX.pdf –

+0

這很好。如果這是'Compressed_Data'中的錯誤,我想知道輸出。 – chappjc

回答

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]) 

請讓我知道這是不是你在找什麼。

+0

我不認爲這是我正在尋找的。爲什麼羣集ID會成爲分配中的壓縮數據Compressed_Data = IDX;讓我再解釋一下。 IDX是對原始數據的聚類分配,所以我知道數據的row1屬於聚類#1,行2屬於聚類#1等等。然後類似於texxt挖掘,我合併&代表IDX的前兩行劃分爲1行並用符號1表示。這反過來會使我的原始數據的前2行由符號1表示。 –

+0

因此,IDX變量中的任何共同符號將由該集羣的ID表示它屬於這種變化。這種變化也將被映射到原始數據,並且數據行將由單個集羣id來表示。因此,原始數據被符號表示並且被饋送到分類器中,並且我可以應用文本相似性度量來進行分類。 –

+0

這個概念非常類似於谷歌提到的方法http://stackoverflow.com/questions/18095542/nearest-point-between-two-clusters-matlab?rq=1。在這個鏈接中,聚集的數據被合併,但我想合併聚集的數據+基於聚集信息的原始數據。希望我能說清楚。感謝您的耐心和幫助。 –