2017-05-08 152 views
0

我目前正在關注文檔主題中的層次結構。作爲第一步,我找到了我的文檔的向量表示,然後使用分層聚類來確定文檔的主題內是否有主題。我只想考慮(嵌套的)至少包含2個原始數據的集羣。爲了達到這個目的,我使用R.獲取集羣層次結構和嵌套集羣分配

現在,我正在努力從聚類結果中有效地提取集羣層次結構。集羣使用「fastcluster」軟件包完成,它提供與原始「hclust」功能類似的結果。

對於我的最終輸出應該看起來像這樣;將有兩個表

集羣分配:

docID , ClusterLabel 
1, A 
2, A 
3, B 
4, B 
5, B 
3, C 
4, D 
5, C 
... 

集羣層次:

Parent, Child 
B, C 
B, D 
... 

正如你所看到的,觀察3,4和5發生在集羣分配表多次,其中一個羣集是其父羣集的子羣集。這可以在Hierarchy表中看到。

我目前的方法是使用「Dendextend」包中的cutree.dendogram函數來查找k值網格的聚類分配,然後從輸出中推導聚類分層結構和分配。然而,這種方法非常天真,對於大量的觀測和聚類變得非常緩慢。

有關如何有效解決此問題的建議,最好使用一些現成的軟件包將不勝感激。

編輯:考慮下面的例子中,對應於所述採樣輸出數據:

data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2) 
plot(data) 

hc<- hclust(dist(data)) 
plot(hc) 

如果我們將削減樹在高度6,我們將獲得2簇,在輸出命名爲A和B.但是,如果我們在高度爲4的樹上砍樹,我們將有3個簇,輸出中命名爲A,C和D.現在,例如,docID 3的觀察結果在集羣B中與集羣C中(取決於我們切割樹的高度)相對應,這與樣本輸出集羣分配中的兩個條目相對應。集羣B分爲兩個集羣C和D,這可以在集羣Hierachy輸出中看到。

現在我的目標是獲取聚類分配和層次結構的完整列表,向下移動樹狀圖。 (最好在(子)簇中的觀測量少於一定量的觀測值時停止)

直到現在我還沒有想出一個合理有效的方法來做到這一點,希望任何人都可以提供給我一個理念。

+0

Hi @ Bartdp1,你能否用一個自包含可重現的例子更新你的問題? –

+0

@TalGalili @TalGalili我更新了這個問題,感謝您看看 – BDP1

回答

1

cutree功能k參數可接收值的向量和輸出應該是這樣的:

> data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2) 
> hc<- hclust(dist(data)) 
> cutree(hc, k = 1:5) 
    1 2 3 4 5 
[1,] 1 1 1 1 1 
[2,] 1 1 1 2 2 
[3,] 1 1 2 3 3 
[4,] 1 2 3 4 4 
[5,] 1 2 3 4 5 

這是否回答你的問題?

+0

不完全是,請注意,當從2個簇到3個簇時,第2列中的簇「1」被拆分爲兩個簇,分別命名爲簇「1」和簇「2」在第3欄。後兩個是第一個「孩子」。我想保持兩者之間的區別,所以他們應該有不同的標籤(現在,情況並非如此,因爲標籤「1」出現兩次)。 當然,我可以看到可以從您提供的輸出中得出所有這些信息,但考慮到樹狀圖很容易獲得這些信息,這可能相當昂貴。我只是看不到如何有效地提取它。 – BDP1

+0

我不確定我關注。你想要第二列只有2和3,第三列有3,4,5 - 等等? –

+0

不支持。起初,我正在尋找從hclust輸出中提取原始問題中顯示的示例輸出。所以我想要一個列表集羣分配。觀察在這個列表中多次出現,因爲當一個clusers在層級聚類中合併時,觀察結果既在「父」又在「子」聚類中。此外,我想獲得一個partent-> child關係清單。爲了記錄,我不確定dendextend是否具有此功能(或部分功能將被使用),但我希望能夠在正確的方向上推動如何有效地對此進行編碼。 – BDP1