說話人聚類--譜聚類和層次聚類

譜聚類和層次聚類

在訊飛實習了一個月了,做了點說話人聚類的工作,現在總結一下主要用到的譜聚類和層次聚類。

層次聚類

在層次聚類這塊,我主要學習了 凝聚型層次聚類BIRCH方法,主要參考的博客有 [ BIRCH聚類算法原理 ] 。

  • 定義:通過計算不同類別數據點間相似度來創建一棵有層次的嵌套聚類樹,主要有兩種方法:

分裂(Divisive):自頂向下的方法,先將所有數據歸爲一類,不斷分裂成不同簇形成樹狀圖。
凝聚(Agglomerative):自底向上的方法,先將每個數據單獨劃分爲一類,兩兩聚類形成樹狀圖。

  • Agglomeraitve算法:

1.初始時每個樣本爲一個cluster,計算距離矩陣D (簇間距離度量主要有三種:single linkage; complete linkage; average linkage);
2. 找到矩陣D中最小距離,將這兩個clusters合併成一個新的cluster並更新距離矩陣D;
3. 重複步驟2,直至最終只剩下一個cluster。

  • BIRCH算法:

1.BIRCH算法利用層次方法的平衡迭代規約和聚類,是層次聚類的一種,適合大規模數據集,只需要單遍掃描數據集就能進行聚類。
2.BIRCH算法是一種增量聚類方法,針對每一個點的聚類決策都是基於當前已經處理過的數據點,而不是全局的數據點;能夠識別出數據集中數據分佈的不均衡性,將分佈在稠密區域中的點聚類,將分佈在稀疏區域中的點視作異常點而移除。
3.BIRCH算法的核心是構造聚類特徵樹 (Clustering feature Tree,簡稱CF Tree),這棵樹的每一個節點是由若干個聚類特徵 (Clustering feature, 簡稱CF)組成,共有三個比較重要的參數:內部節點的最大CF數B,葉子節點的最大CF數L,葉節點每個CF的最大樣本半徑閾值T

關於BIRCH更詳細的介紹可以參見: BIRCH聚類算法原理

在 python 的 sklearn.cluster 庫中有 “AgglomerativeClustering” 和 “Birch”這兩種算法的實現。

譜聚類

譜聚類的原理相對複雜一些,詳見博客譜聚類(spectral clustering)原理總結,這個主要簡要介紹一下。

1.譜聚類的主要思想是把所有的數據看作空間中的點,這些點之間可以用邊連接起來,距離較遠的兩個點之間的權重值較低,而距離較近的兩個點之間的邊權重值較高,通過對所有數據點組成的圖進行切圖,讓切圖後不同的子圖間邊權重和儘可能的低,而子圖內的邊權重和儘可能的高,從而達到聚類的目的。
2.譜聚類的主要步驟包括:無向權重圖、相似矩陣 (方法包括ϵ\epsilon-鄰近法,k鄰近法和全連接法)、拉普拉斯矩陣、無向圖切圖。

譜聚類的“切圖聚類”這塊還沒有徹底弄懂,明天再看一遍,待更~

在這裏介紹一篇文章《Speaker diarization with LSTM》中介紹的spectral offline clustering:
SpecCluster_LSTM
該方法的主要思想也是先構造相似矩陣affinity matrix,然後對affinity matrix進行一系列refinement,而且基於eigen-gap來估計cluster number,作者在文章中也給出了做這些refinement的motivations,這裏進給出refinement操作對affinity matrix的可視化影響。
Refinement operations on the affinity matrix
實驗的時候,該文章中的spectral clustering方法比基本的譜聚類方法work得要好,不過這也是跟數據集有關的 (在其他數據集中也不是很好)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章