聚类(2)——层次聚类 Hierarchical Clustering

原创 2012年06月23日 11:09:39

聚类系列:

--------------------------------

 

不管是GMM,还是k-means,都面临一个问题,就是k的个数如何选取?比如在bag-of-words模型中,用k-means训练码书,那么应该选取多少个码字呢?为了不在这个参数的选取上花费太多时间,可以考虑层次聚类。


假设有N个待聚类的样本,对于层次聚类来说,基本步骤就是:

       1、(初始化)把每个样本归为一类,计算每两个类之间的距离,也就是样本与样本之间的相似度;

       2、寻找各个类之间最近的两个类,把他们归为一类(这样类的总数就少了一个);

       3、重新计算新生成的这个类与各个旧类之间的相似度;

       4、重复2和3直到所有样本点都归为一类,结束。

 

整个聚类过程其实是建立了一棵树,在建立的过程中,可以通过在第二步上设置一个阈值,当最近的两个类的距离大于这个阈值,则认为迭代可以终止。另外关键的一步就是第三步,如何判断两个类之间的相似度有不少种方法。这里介绍一下三种:

        SingleLinkage:又叫做 nearest-neighbor ,就是取两个类中距离最近的两个样本的距离作为这两个集合的距离,也就是说,最近两个样本之间的距离越小,这两个类之间的相似度就越大。容易造成一种叫做 Chaining 的效果,两个 cluster 明明从“大局”上离得比较远,但是由于其中个别的点距离比较近就被合并了,并且这样合并之后 Chaining 效应会进一步扩大,最后会得到比较松散的 cluster 。

       CompleteLinkage:这个则完全是 Single Linkage 的反面极端,取两个集合中距离最远的两个点的距离作为两个集合的距离。其效果也是刚好相反的,限制非常大,两个 cluster 即使已经很接近了,但是只要有不配合的点存在,就顽固到底,老死不相合并,也是不太好的办法。这两种相似度的定义方法的共同问题就是指考虑了某个有特点的数据,而没有考虑类内数据的整体特点。

       Average-linkage:这种方法就是把两个集合中的点两两的距离全部放在一起求一个平均值,相对也能得到合适一点的结果。

       average-linkage的一个变种就是取两两距离的中值,与取均值相比更加能够解除个别偏离样本对结果的干扰。


这种聚类的方法叫做agglomerative hierarchical clustering(自下而上,@2013.11.20 之前把它写成自顶而下了,我又误人子弟了。感谢4楼的网友指正)的,描述起来比较简单,但是计算复杂度比较高,为了寻找距离最近/远和均值,都需要对所有的距离计算个遍,需要用到双重循环。另外从算法中可以看出,每次迭代都只能合并两个子类,这是非常慢的。尽管这么算起来时间复杂度比较高,但还是有不少地方用到了这种聚类方法,在《数学之美》一书的第14章介绍新闻分类的时候,就用到了自顶向下的聚类方法。

       是这样的,谷歌02年推出了新闻自动分类的服务,它完全由计算机整理收集各个网站的新闻内容,并自动进行分类。新闻的分类中提取的特征是主要是词频因为对不同主题的新闻来说,各种词出现的频率是不一样的, 比如科技报道类的新闻很可能出现的词就是安卓、平板、双核之类的,而军事类的新闻则更可能出现钓鱼岛、航母、歼15、歼20这类词汇。一般对每篇文章提取TF-IDF(词频-逆文本频率值)特征,组成一个高维的特征向量(每一维表示一个词出现的TF-IDF值),然后采用监督学习或者非监督学习的方法对新闻进行分类。在已知一些新闻类别的特征的情况下,采用监督学习的方法是很OK的。但是在未知的情况下,就采用这种agglomerative hierarchical clustering进行自动分类。 这种分类方法的动机很有意思。1998年雅让斯基是某个国际会议的程序委员会主席,需要把提交上来的几百篇论文发给各个专家去评审是否录用。虽然论文的作者自己给定了论文的方向,但方向还是太广,没有什么指导意义。雅让斯基就想到了这个将论文自动分类的方法,由他的学生费罗里安很快实现了。

        另外有一种聚类方法叫做divisive hierarchical clustering(自顶而下),过程恰好是相反的,一开始把所有的样本都归为一类,然后逐步将他们划分为更小的单元,直到最后每个样本都成为一类。在这个迭代的过程中通过对划分过程中定义一个松散度,当松散度最小的那个类的结果都小于一个阈值,则认为划分可以终止。这种方法用的不普遍,原文也没有做更多介绍。

        由于这种层次结构,普通的k-means也被称为一种flat clustering。

 

add@2013.9.11 

        层次聚类如何使用呢,借助matlab就可以实现了,十分简单。首先需要构造距离矩阵Y。这是一个对称矩阵,且对角线元素为0(自己与自己的距离为0)。假设所有样本保存为X,则通过:

Y=pdist(X);
Y=squareform(Y);

      就能够得到距离矩阵。注意pdist可以选择距离度量的方法,例如欧式距离,内积或者余弦夹角。在很多时候这个参数十分重要。

      然后通过Z=linkage(Y)就能产生层次聚类的树结构了。

Z=linkage(Y);

      Z的结果描述起来需要借助实际的例子,大家可以通过matlab help查看,并结合实际结果领悟一下。这棵树可以通过以下指令可视化:

dendrogram(Z) 

      这样就完成了一次层次聚类了(虽然我们什么都没有做大笑

 

---------------------------

jiang1st2010

原文地址:http://blog.csdn.net/jiang1st2010/article/details/7685809

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

GMM, Gaussian Mixture Model, 高斯混合模型

聚类的方法有很多种,k-means要数最简单的一种聚类方法了,其大致思想就是把数据分为多个堆,每个堆就是一类。每个堆都有一个聚类中心(学习的结果就是获得这k个聚类中心),这个中心就是这个类中所有数据的...

GMM的EM算法实现

在 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证...

yuan

我要制作一个完整的源 大小:35G   网速:245kb  时间:41小时 201网费:42元 所以我只能使用E信 空出50空白空间作为源空间  完成  注:NTFS格式 Windows下新建F...

【机器学习】高斯混合聚类python实现

高斯混合聚类算法的原理如下: 由于在对数函数里面又有加和,我们没法直接用求导解方程的办法直接求得最大值。为了解决这个问题,我们采取之前从 GMM 中随机选点的办法:分成两步,实际上也就类似于 K-...

聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster...

高斯混合模型学习笔记

0 预备知识 l  设离散型随机变量X的分布律为 则称为X的数学期望或均值 l  设连续型随机变量X的概率密度函数(PDF)为 其数学期望定义为 l  称为随机变量X的方差,称为X的标准差 l  ...

聚类算法之高斯混合模型

上一次我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM)。事实上,GMM 和 k-means 很像,不过 GMM...

聚类(1)——混合高斯模型 Gaussian Mixture Model

聚类系列: 聚类(序)----监督学习与无监督学习 聚类(1)----混合高斯模型 Gaussian Mixture Model 聚类(2)----层次聚类 Hierarchi...

斯坦福大学机器学习——EM算法求解高斯混合模型

EM算法(Expection-Maximizationalgorithm,EM)是一种迭代算法,通过E步和M步两大迭代步骤,每次迭代都使极大似然函数增加。但是,由于初始值的不同,可能会使似然函数陷入局...

高斯混合模型学习笔记

0 预备知识 l  设离散型随机变量X的分布律为   则称  为X的 数学期望 或 均值 l  设连续型随机变量X的概率密度函数(PDF)为  其 数学期望 定义为  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)