聚类系列:

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

不管是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

聚类(2)——层次聚类 Hierarchical Clustering相关推荐

  1. 聚类系列-层次聚类(Hierarchical Clustering)

    上篇k-means算法却是一种方便好用的聚类算法,但是始终有K值选择和初始聚类中心点选择的问题,而这些问题也会影响聚类的效果.为了避免这些问题,我们可以选择另外一种比较实用的聚类算法-层次聚类算法.顾 ...

  2. 聚类之层次聚类、基于划分的聚类(…

    5.聚类之层次聚类.基于划分的聚类(k-means).基于密度的聚类.基于模型的聚类 目录(?)[-] 1.      一层次聚类 1.      层次聚类的原理及分类 2.      层次聚类的流程 ...

  3. 【R】【密度聚类、层次聚类、期望最大化聚类】

    文章目录 1.对数据集进行加载.预处理集可视化 1.1 加载数据集 1.2 数据预处理 1.3 将样本点进行可视化 2.密度聚类(DBSCAN 算法) 2.1 加载程序包 2.2 设置聚类参数阈值并可 ...

  4. 【机器学习】聚类【Ⅴ】密度聚类与层次聚类

    主要来自周志华<机器学习>一书,数学推导主要来自简书博主"形式运算"的原创博客,包含自己的理解. 有任何的书写错误.排版错误.概念错误等,希望大家包含指正. 由于字数限 ...

  5. Python计算机视觉编程第六章——图像聚类(K-means聚类,DBSCAN聚类,层次聚类,谱聚类,PCA主成分分析)

    Python计算机视觉编程 图像聚类 (一)K-means 聚类 1.1 SciPy 聚类包 1.2 图像聚类 1.1 在主成分上可视化图像 1.1 像素聚类 (二)层次聚类 (三)谱聚类 图像聚类 ...

  6. 了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类

    聚类 1.什么是聚类 2.聚类方法 2.1 划分式聚类方法 k-means k-means++ bi-kmeans 基于密度的方法 DBSCAN OPTICS算法 层次化聚类算法 核聚类 支持向量聚类 ...

  7. 聚类算法——层次聚类算法

    每篇一句: You must strive to find your own voice. Because the longer you wait to begin, the less likely ...

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

    谱聚类和层次聚类 在讯飞实习了一个月了,做了点说话人聚类的工作,现在总结一下主要用到的谱聚类和层次聚类. 层次聚类 在层次聚类这块,我主要学习了 凝聚型层次聚类和 BIRCH方法,主要参考的博客有 [ ...

  9. KMEANS均值聚类和层次聚类:亚洲国家地区生活幸福质量异同可视化分析和选择最佳聚类数...

    阅读全文:http://tecdat.cn/?p=24198 <世界幸福报告>是可持续发展解决方案网络的年度报告,该报告使用盖洛普世界民意调查的调查结果研究了150多个国家/地区的生活质量 ...

最新文章

  1. 全屏四摄颜值王荣耀9青春版炫美开售 1199元起
  2. 平台资源表 表和表字段的命名规范——JEPLUS软件快速开发平台
  3. Exchange日常管理之二十二:配置保留策略
  4. Z80 CPU的寄存器结构图示
  5. 计算机右键管理显示没权限,解决右键 选择打开方式提示没有权限
  6. 淘淘商城之技术选型、开发工具和环境、人员配置
  7. hive sql 报错后继续执行_Hive优化之Spark执行引擎参数调优(二)
  8. 【贪心】牛客网:把数组排成最小的数
  9. hdu4857 拓扑排序
  10. Rust基础概念之数据类型
  11. 网页视频之H264打包为fmp4调研
  12. git cherry pick用法
  13. 图片选择器ImagePicker
  14. 汽车软件通信中间件iceoryx和它的零拷贝技术
  15. 三星s3 android8.0,三星最新安卓8.0升级计划:这款老机子有戏
  16. 剪辑视频调整视频播放倍速,改变视频时长
  17. Android新技术-热门技术
  18. 适合新手看的安卓开发书android studio
  19. Word粘贴图片只显示下面底部一部分
  20. 免费域名注册-(Free domains for all)

热门文章

  1. 使用网络打印机进行“属性”和“首选项”设置时,弹出个浏览器.exe错误对话框
  2. xCode 编写C++程序
  3. Socket编程、协议理解
  4. 《视频解密》中文版(第四版) 第七章 数字视频处理(第二部分)
  5. Python基础之Linux基础入门(Ubuntu)——其他命令
  6. 「弟子入則孝,出則弟,謹而信,泛愛眾,而親仁,行有餘力,則以學文。」...
  7. 申请国家发明专利费用是多少?
  8. 广州积分入户需要满足哪些条件
  9. 2020外地人如何把户口迁入广州
  10. IntelliJ IDEA 2019从入门到癫狂