说话人聚类--谱聚类和层次聚类

谱聚类和层次聚类

在讯飞实习了一个月了,做了点说话人聚类的工作,现在总结一下主要用到的谱聚类和层次聚类。

层次聚类

在层次聚类这块,我主要学习了 凝聚型层次聚类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得要好,不过这也是跟数据集有关的 (在其他数据集中也不是很好)。

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