Songjinghe的个人博客分享 http://blog.sciencenet.cn/u/Songjinghe

博文

凝聚法层次聚类之ward linkage method

已有 35541 次阅读 2015-9-18 22:22 |系统分类:科研笔记| 聚类, 分层, Ward, ESS

凝聚法分层聚类中有一堆方法可以用来算两点(pair)之间的距离:欧式,欧式平方,manhattan等,还有一堆方法可以算类(cluster)与类之间的距离,什么single-linkage、complete-linkage、还有这个ward linkage。(即最短最长平均,离差平方和)


其他的好像都挺好理解,就是最后这个有点麻烦。。。


这个方法说白了叫离差平方和(这是个啥?)。是ward写那篇文章时候举的一个特例。这篇文章是说分层凝聚聚类方法的一个通用流程。在选择合并类与类时基于一个object function optimise value,这个object function可以是任何反应研究目的的方程,所以许多标准的方法也被归入了。为了阐明这个过程,ward举了一个例子,用的object function 是error sum of squares(ESS),这个例子就成为ward's method。


找了N多资料,终于把这个算法的过程搞清楚了。首先输入的是一个距离矩阵,知道每两个点之间的距离。然后初始化是每个点做为一个cluster,假设总共N组,此时每个组内的ESS都是0,ESS的公式,如下(从原稿《Hierarchical Grouping To Optimize An Objective Function》上摘的):

$ESS=\sum_{i=1}^n x_i^2 - \frac{1}{n}\left ( \sum_{i=1}^n x_i \right ) ^2$

我当时还有点蒙ESS是个啥?——我现在知道了,凡是蒙的都是概率没学好(我是说我)……先从wiki上转个公式过来:


这是方差的公式,写的再通俗点,就是:

$Var(X)=\frac{1}{n}\sum_{i=1}^{n} x_i^2 - \left ( \frac{\sum_{i=1}^{n} x_i}{n} \right )^2$

等号两边同时乘上n,好了,你应该知道ESS是啥了——ESS就是【方差×n】!so easy了~~



但是等下——这看起来是个一维的公式啊——因为你已经知道ESS是【方差×n】了,那多维的还不会算吗?先求所有点的均值点 $(x_i,y_i,z_i,...)$ ,然后再算所有点到这个均值点(central)的距离(距离公式你得自己定,见开头,但是最后算出来就是一个数),然后把所有距离平方后加起来(此时即为方差乘上n),就得到ESS了。


说了半天光说ESS了,列位看官,人只有一张嘴,故ESS此处按下不表,接着说ward method。ward method是要求每次合并后ESS的增量最小,这怎么讲呢?还是上图吧(图是从youtube上的一个教程里截的):


只看最下面ward's method的两个图好了,先看下面的图,合并前红色组和黄色组分别能算各自的ESS,总的ESS是什么呢?很简单,加起来就好了,即:

ESS(总-合并前)=ESS(红)+ESS(黄)+ESS(其他没画出来的组)

如果合并这两个组,则可以作为一个新组再算一个ESS,此时

ESS(总-合并后)=ESS(红黄)+ESS(其他没画出来的组)

你注意这里还没有真的合并,只是算了一下合并红黄两组的“成本”(即:ESS(总-合并后)-ESS(总-合并前),当然这个成本肯定是增加的),如果总共有N个组,必须把每两个组合并的成本都算一遍,也就是算N×(N-1)/2个数出来(是不是感觉运算量很大?不要紧,有快速算法),然后找里面合并后成本最小的两组合并。然后再重复这个过程。

我说清楚了吧!?


嗯,至于画的那个树状图的高度,可以认为是上面说的这个“成本”。


对了,还得说一下这个公式:

$TD_{c_1 \cup c_2} = \sum_{x \in c_1 \cup c_2 } D(x,\mu_{c_1 \cup c_2 })^2$

啥意思呢,就是说,如果用ward's method来度量两个cluster之间的距离,那么两个cluster之间的距离就是把这两个cluster合并后新cluster的ESS,其中x就表示合并前两个cluster中所有点,而 $\mu_{c_1 \cup c_2}$ 就是合并后那个新cluster的中心点(均值点), $D(x, \mu_{c_1 \cup c_2})$ 就表示每个点x到中心点的距离,平方后加起来,就是ESS了。


好了,总结一下,ward's method是凝聚法分层聚类中一种度量cluster之间距离的方法。按照这个方法,任意两个cluster之间的距离就是这两个cluster合并后新cluster的ESS——说了这么多还真是惭愧,估计这些东西随便找一个数据挖掘的视频教程估计都有,我居然搞了这么长时间才弄懂。。。。


PS:附一段代码上来(快速算法):http://my.oschina.net/songjinghe/blog/508553



https://wap.sciencenet.cn/blog-2827057-921772.html


下一篇:生物信息学中多重检验问题的一个例子(FDR、p值、q值)
收藏 IP: 106.39.42.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 02:10

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部