Hierarchical Clustering
图0 层次聚类用于生物基因统计(R绘制出的Heatmap图)
层次聚类(HC)有两种方法: Agglomorative and Divisive。Agglomerative(自底向上)Methods,通常叫做“bottom-up” methods,初始化时每一个样本独自归为一类,然后按照不同的规则进行组合,最后形成一个聚类树;Divisive(自顶向下)Methods,通常叫做“top-down” methods,初始化时所有样本全部归为一类,然后按照不同的规则进行拆分,最后形成一个聚类树。目前较常用的是Agglomerative方法,在此主要分享Agglomerative的内容。
Agglomerative Method(bottom-up)
有\(N\)个待聚类样本, Agglomerative方法的基本步骤如下:
- 将每个样本独自归为一类, 共得到\(N\)类, 每类仅包含一个对象。
Input:\(\Gamma = \{ x_i,i=1,2,...,n \},n=N\)即为聚类个数。 - 计算每两个类之间的距离\(D=(d_{ij})\),则类与类之间的距离就是它们所包含对象之间的距离\(d_{ij}=d(x_i,x_j),i,j=1,2,...,n\);
- 找到各个类之间相似度最大(距离最小)的两个类\(I和J\)并合并成一新类\(IJ\);
- 重新计算新类\(IJ\)与所有旧类\(K \neq IJ\)之间的距离\(d_{IJ,K}\),此时每类包含不止一个样本,则在衡量类与类之间的距离时产生了一系列不同的规则;
- 重复第2步和第3步, 直到最后合并成一个类为止(此类包含了\(N\)个对象)。
1~4就是层次聚类算法的步骤,那么问题就来了!此时我们最少需要问自己两个问题!
问题一:常用的距离的计算方法有哪些?
在机器学习领域,做分类时常常需要估算不同样本之间的相似性度量(Similarity or Proximity),这时通常采用的方法就是计算样本间的“距离”(Distance)。一般根据样本的不同需要选择不同的"相似度衡量方法"。Matlab中的距离函数 D = pdist(X, DISTANCE)提供的距离计算方法有:欧氏距离(Euclidean)、标准化欧氏距离( Standardized Euclidean)、曼哈顿距离(Manhattan/City Block)、切比雪夫距离(Chebychev)、闵可夫斯基距离(Minkowski)、马氏距离(Mahalanobis)、夹角余弦(Cosine)、汉明距离(Hamming)、杰卡德距离 & 杰卡德相似系数(Jaccard coefficient)、相关距离(Correlation)、信息熵(Information Entropy)等。另外MATLAB还支持自己定义距离函数,定义距离函数需要满足一下四个准则。
(1)、\(d(x_i,x_j)\ge 0\)
(2)、\(d(x_i,x_i) = 0\)
(3)、\(d(x_j,x_i) = d(x_i,x_j)\)
(4)、\(d(x_i,x_j) \le d(x_i,x_k) + d(x_k,x_j)\)
通常在做分类数据时常用的也就欧氏距离和曼哈顿距离及马氏距离,有人对距离做了详细的介绍,本人仅分享其中几种。
详见:1、http://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html
2、http://www.cnblogs.com/ronny/p/4080442.html
1、欧氏距离(Euclidean Distance)
直角坐标系中
(1)、两点间的距离
两个\(n\)维向量\(a(x_1,x_2,…,x_n)\)与 \(b(y_1,y_2,…,y_n)\)
二维距离:\(d = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2}\)
三维距离:\(d = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + (x_3 - y_3)^2}\)
N维距离:\(d = \sqrt{\sum_{i=1}^N(x_i - y_i)^2}=\sqrt{(X-Y)(X-Y)^T}\)
(2)、 范数
设在\(\mathbb{R}^m\)空間有两点,\(X = (x_1,x_2,...,x_m)\),\(Y = (y_1,y_2,...,y_m)\),不同的范数都是一种距离:
1-阶范数 = \(\sum \left| x_i - y_i \right|\)
2-阶范数 = \(\left( \sum \left| x_i - y_i \right|^2 \right)^\frac{1}{2}\)
''n''-阶范数 = \(\left( \sum \left| x_i - y_i \right|^n \right)^\frac{1}{n}\)
欧式距离有一个缺陷就是:当样本的各维度不是一个"量纲"时,按照公式计算出来的距离将意义不大。本人通常的做法是首先将数据进行"标准化"也叫"归一化",然后再用欧氏距离。
2、曼哈顿距离(Manhattan/City Block Distance)
站在帝国大厦上可以对整个曼哈顿一览无余,你绝对会很佩服这个区的建设——几乎就是一个棋盘,而每个Block就是一个棋格!曼哈顿距离又叫出租车几何,是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即
(1)、二维平面两点\(a(x_1,x_2)\)与\(b(y_1,y_2)\)间的曼哈顿距离
\(d(a,b)=\left|x_1- y_1\right| + \left|x_2- y_2\right|\)
(2)、\(n\)维平面两点\(a(x_1,x_2,...,x_n)\)与\(b(y_1,y_2,...y_n)\)间的曼哈顿距离
\(d(a,b)=\sum_{i=1}^n \left|x_1- y_1\right|\)
对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离因此曼哈顿距离又称为出租车距离,曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。曼哈顿距离示意图在早期的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂贵,很慢而且有误差,如果直接使用AB的欧氏距离,则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即可,这就大大提高了运算速度,而且不管累计运算多少次,都不会有误差。
3、马氏距离(Mahalanobis Distance)
马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。
对于一个均值为\(\mu = ( \mu_1, \mu_2, \mu_3, \dots , \mu_p )^T\),协方差矩阵为\(\Sigma\)的多变量向量\(x = ( x_1, x_2, x_3, \dots, x_p )^T\),其马氏距离为
\(D_M(x) = \sqrt{(x - \mu)^T \Sigma^{-1} (x-\mu)}\)
马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为\(\Sigma\)的随机变量\( \vec{x}\)与\(\vec{y}\)的差异程度:
\(d(\vec{x},\vec{y})=\sqrt{(\vec{x}-\vec{y})^T\Sigma^{-1} (\vec{x}-\vec{y})}\)
如果协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离;如果协方差矩阵为对角阵,其也可称为''正规化的欧氏距离''。
\(d(\vec{x},\vec{y})=\sqrt{\sum_{i=1}^p {(x_i - y_i)^2 \over \sigma_i^2}}\)
其中\(\sigma_i\)是\(x_i\)的标准差。
马氏优缺点:
问题二:步骤3中相似度的衡量方式有哪些(即当两类中不止有一个样本时,怎么计算两类的距离)?
按相似度的计算方法不同,可以将聚类分为一下几类: Single-Linkage、Complete-Linkage、 Average-Linkage 、Ward′s method、Centroid-Linkage、Median-Linkage等聚类方法,下面仅分享常用的方法。
例1:有八个样本如下
\(x_1=(1,3)^T,x_2=(2,4)^T,x_3=(1,5)^T,x_4=(5,5)^T\)
\(x_5=(5,7)^T,x_6=(4,9)^T,x_7=(2,8)^T,x_8=(3,10)^T\)
散点图为:
使用欧式距离(Euclidean distance),计算出每两点之间的距离并用\((8\times8)\)上三角形矩阵表示如下表\(D^{(0)}\)所示。
\(\begin{array}{|c|c|c|} \hline &1&2&3&4&5&6&7&8 \\ \hline 1&0&1.414&2.000&4.472&5.657&6.708&5.099&7.280 \\ \hline 2& &0&1.414&3.162&4.243&5.385&4.000&6.083\\ \hline 3& & &0&4.000&4.472&5.000&3.162&5.385\\ \hline 4& & & &0&2.000&4.123&4.243&5.385\\ \hline 5& & & & &0&2.236&3.162&3.606\\ \hline 6& & & & & &0&2.236&1.414\\ \hline 7& & & & & & &0&2.236\\ \hline 8& & & & & & & &0 \\\hline\end{array}\)
1、Single Linkage Clustering Method
- Single Linkage:又叫做 nearest-neighbor ,就是取两个集合中距离最近的两个点的距离作为这两个集合的距离,即\(d_{IJ,K}=min\{d_{I,K},d_{J,K}\}\)。此方法容易造成一种叫做 Chaining 的效果,两个 cluster 明明从“大局”上离得比较远,但是由于其中个别的点距离比较近就被合并了,并且这样合并之后 Chaining 效应会进一步扩大,最后会得到比较松散的 cluster 。
在矩阵\(D^{(0)}\)中\(d_{12}=d_{23}=d_{68}=1.414\),我们决定将\(x_2\)和\(x_3\)聚成一类"23",下一步计算新的类"23"与其余各类之间的距离\(d_{23,K}=min\{d_{2,K},d_{3,K}\},K=1,4,5,6,7,8。\)并用下述\((7\times7)\)上三角形矩阵表示如下表\(D^{(1)}\)所示。
\(\begin{array}{|c|c|c|} \hline &1&23&4&5&6&7&8 \\ \hline 1&0&1.414&4.472&5.657&6.708&5.099&7.280 \\ \hline 23& &0&3.162&4.243&5.000&3.162&5.385\\ \hline 4& & &0&2.000&4.123&4.243&5.385\\ \hline 5& & & &0&2.236&3.162&3.606\\ \hline 6& & & & &0&2.236&1.414\\ \hline 7& & & & & &0&2.236\\ \hline 8& & & & & & &0 \\\hline\end{array}\)
在矩阵\(D^{(1)}\)中\(d_{1,23}=d_{68}=1.414\),我们决定将\(x_1\)和"23"聚成一类"123",下一步计算新的类"123"与其余各类之间的距离\(d_{123,K}=min\{d_{1,K},d_{23,K}\},K=4,5,6,7,8。\)并用下述\((6\times6)\)上三角形矩阵表示如下表\(D^{(2)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&4&5&6&7&8 \\ \hline 123&0&3.162&4.243&5.000&3.162&5.385\\ \hline 4& &0&2.000&4.123&4.243&5.385\\ \hline 5& & &0&2.236&3.162&3.606\\ \hline 6& & & &0&2.236&1.414\\ \hline 7& & & & &0&2.236\\ \hline 8& & & & & &0 \\\hline\end{array}\)
在矩阵\(D^{(2)}\)中\(d_{68}=1.414\),我们决定将\(x_6\)和\(x_8\)聚成一类"68",下一步计算新的类"68"与其余各类之间的距离\(d_{68,K}=min\{d_{6,K},d_{8,K}\},K=123,4,5,7。\)并用下述\((5\times5)\)上三角形矩阵表示如下表\(D^{(3)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&4&5&68&7 \\ \hline 123&0&3.162&4.243&5.000&3.162 \\ \hline 4& &0&2.000&4.123&4.243\\ \hline 5& & &0&2.236&3.162 \\ \hline 68& & & &0&2.236\\ \hline 7& & & & &0\\\hline\end{array}\)
在矩阵\(D^{(3)}\)中\(d_{45}=2.000\),我们决定将\(x_4\)和\(x_5\)聚成一类"45",下一步计算新的类"45"与其余各类之间的距离\(d_{45,K}=min\{d_{4,K},d_{5,K}\},K=123,68,7。\)并用下述\((4\times 4)\)上三角形矩阵表示如下表\(D^{(4)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&68&7 \\ \hline 123&0&3.162&5.000&3.162 \\ \hline 45& &0&2.236&3.162 \\ \hline 68& & &0&2.236\\ \hline 7& & & &0\\\hline\end{array}\)
在矩阵\(D^{(4)}\)中\(d_{45,68}=d_{68,7}=2.236\),我们决定将"68"和\(x_7\)聚成一类"678",下一步计算新的类"678"与其余各类之间的距离\(d_{678,K}=min\{d_{68,K},d_{7,K}\},K=123,45。\)并用下述\((3\times 3)\)上三角形矩阵表示如下表\(D^{(5)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&678 \\ \hline 123&0&3.162&3.162 \\ \hline 45& &0&2.236 \\ \hline 678& & &0\\\hline\end{array}\)
在矩阵\(D^{(5)}\)中\(d_{45,678}=2.236\),我们决定将"45"和"678"聚成一类"45678",下一步计算新的类"45678"与其余各类之间的距离\(d_{45678,K}=min\{d_{45,K},d_{678,K}\},K=123。\)并用下述\((2\times 2)\)上三角形矩阵表示如下表\(D^{(6)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45678 \\ \hline 123&0&3.162 \\\hline 45678& &0\\\hline\end{array}\)
绘制出聚类树为:
1 %MATLAB相关Code
2 data=[1 3;2 4;1 5;5 5;5 7;4 9;2 8;3 10];
3 %V=pdist(data,'euclidean'); %用欧式距离得到一个数据中每两个样本之间的距离向量V
4 %D_0=squareform(V); %将距离向量V组合为距离对称矩阵
5 D=linkage(data,'single','euclidean'); %产生层次聚类树
6 dendrogram(D,'Orientation', 'top'); %绘出层次聚类树
1 #R相关Code
2 data <- matrix(c(1,2,1,5,5,4,2,3,3,4,5,5,7,9,8,10), 8,2)
3 hclust(dist(data), "single")->a
4 plot(a)
2、Complete Linkage Clustering Method
- Complete Linkage:又叫做 furthest-neighbor ,这个则完全是 Single Linkage 的反面极端,取两个集合中距离最远的两个点的距离作为两个集合的距离,即\(d_{IJ,K}=max\{d_{I,K},d_{J,K}\}\)。其效果也是刚好相反的,限制非常大,两个 cluster 即使已经很接近了,但是只要有不配合的点存在,就顽固到底,老死不相合并,也是不太好的办法。
在矩阵\(D^{(0)}\)中\(d_{12}=d_{23}=d_{68}=1.414\),我们决定将\(x_2\)和\(x_3\)聚成一类"23",下一步计算新的类"23"与其余各类之间的距离\(d_{23,K}=max\{d_{2,K},d_{3,K}\},K=1,4,5,6,7,8。\)并用下述\((7\times7)\)上三角形矩阵表示如下表\(D^{(7)}\)所示。
\(\begin{array}{|c|c|c|} \hline &1&23&4&5&6&7&8 \\ \hline 1&0&2.000&4.472&5.657&6.708&5.099&7.280 \\ \hline 23& &0&4.000&4.472&5.358&4.000&6.083\\ \hline 4& & &0&2.000&4.123&4.243&5.385\\ \hline 5& & & &0&2.236&3.162&3.606\\ \hline 6& & & & &0&2.236&1.414\\ \hline 7& & & & & &0&2.236\\ \hline 8& & & & & & &0 \\\hline\end{array}\)
在矩阵\(D^{(7)}\)中\(d_{68}=1.414\),我们决定将\(x_6\)和\(x_8\)聚成一类"68",下一步计算新的类"68"与其余各类之间的距离\(d_{68,K}=max\{d_{6,K},d_{8,K}\},K=1,23,4,5,7。\)并用下述\((6\times6)\)上三角形矩阵表示如下表\(D^{(8)}\)所示。
\(\begin{array}{|c|c|c|} \hline &1&23&4&5&68&7 \\ \hline 1&0&2.000&4.472&5.657&7.280&5.099\\ \hline 23& &0&4.000&4.472&6.083&4.000\\ \hline 4& & &0&2.000&5.385&4.243\\ \hline 5& & & &0&3.606&3.162\\ \hline 68& & & & &0&2.236\\ \hline 7& & & & & &0\\ \hline \end{array}\)
在矩阵\(D^{(8)}\)中最小距离\(d_{1,23}=d_{45}=2.000\),我们决定将"23"和\(x_1\)聚成一类"123",下一步计算新的类"123"与其余各类之间的距离\(d_{123,K}=max\{d_{1,K},d_{23,K}\},K=4,5,68,7。\)并用下述\((5\times5)\)上三角形矩阵表示如下表\(D^{(9)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&4&5&68&7 \\ \hline 123&0&4.472&5.657&7.280&5.099\\\hline 4& &0&2.000&5.385&4.243\\ \hline 5& & &0&3.606&3.162\\ \hline 68& & & &0&2.236\\ \hline 7& & & & &0\\ \hline \end{array}\)
在矩阵\(D^{(9)}\)中最小距离\(d_{45}=2.000\),我们决定将\(x_4\)和\(x_5\)聚成一类"45",下一步计算新的类"45"与其余各类之间的距离\(d_{45,K}=max\{d_{4,K},d_{5,K}\},K=123,68,7。\)并用下述\((4\times4)\)上三角形矩阵表示如下表\(D^{(10)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&68&7 \\ \hline 123&0&5.657&7.280&5.099\\\hline 45& &0&5.385&4.243\\ \hline 68& & &0&2.236\\ \hline 7& & & &0\\ \hline \end{array}\)
在矩阵\(D^{(10)}\)中最小距离\(d_{68,7}=2.236\),我们决定将"68"和\(x_7\)聚成一类"678",下一步计算新的类"678"与其余各类之间的距离\(d_{678,K}=max\{d_{68,K},d_{7,K}\},K=123,45。\)并用下述\((3times3)\)上三角形矩阵表示如下表\(D^{(11)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&678 \\ \hline 123&0&5.657&7.280\\\hline 45& &0&5.385\\ \hline 678& & &0\\ \hline \end{array}\)
在矩阵\(D^{(11)}\)中最小距离\(d_{45,678}=5.385\),我们决定将"45"和"678"聚成"45678",下一步计算新的类"45678"与其余各类之间的距离\(d_{45678,K}=max\{d_{45,K},d_{678,K}\},K=123。\)并用下述\((2\times2)\)上三角形矩阵表示如下表\(D^{(12)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45678 \\ \hline 123&0&7.280\\ \hline 45678& &0\\ \hline \end{array}\)
绘制出聚类树为:
3、(Group) Average Linkage Clustering Method:
- Average Linkage:又称为UPGMA(Unweighted Pair-Group Method using the Average approach)。这种方法看起来相对有道理一些,也就是把两个集合中的点两两的距离全部放在一起求一个平均值,相对也能得到合适一点的结果。,即\(d_{IJ,K}=\sum_{i\in I,J}\sum_{k\in K}d_{ik}/(N_{IJ}N_K)\)。
在矩阵\(D^{(0)}\)中最小距离\(d_{min}=d_{12}=d_{23}=d_{68}=1.414\),我们决定将\(x_1\)和\(x_2\)聚成一类 "12",下一步计算新的类 "12" 与其余各类之间的距离\(d_{12,K}=(d_{1,K}+d_{2,K})/2,K=3,4,5,6,7,8。\)例如,\(d_{12,3}=(d_{1,3}+d_{2,3})/2=(\sqrt{4}+\sqrt{2})/2=1.707\)并用下述\((7\times7)\)上三角形矩阵表示如下表\(D^{(13)}\)所示。
\(\begin{array}{|c|c|c|} \hline &12&3&4&5&6&7&8 \\ \hline 12&0&1.707&3.817&4.950&6.047&4.550&6.682\\ \hline 3& &0&4.000&4.472&5.000&3.162&5.385\\ \hline 4& & &0&2.000&4.123&4.243&5.385\\ \hline 5& & & &0&2.236&3.162&3.606\\ \hline 6& & & & &0&2.236&1.414\\ \hline 7& & & & & &0&2.236\\ \hline 8& & & & & & &0 \\\hline\end{array}\)
在矩阵\(D^{(13)}\)中最小距离\(d_{min}=d_{68}=1.414\),我们决定将\(x_6\)和\(x_8\)聚成一类 "68",下一步计算新的类 "68" 与其余各类之间的距离\(d_{68,12}=(d_{1,6}+d_{2,6}+d_{1,8}+d_{2,8})/4=6.364\),
\(d_{68,K}=(d_{6,K}+d_{8,K})/2,K=3,4,5,7\) 。并用下述\((6\times6)\)上三角形矩阵表示如下表\(D^{(14)}\)所示。
\(\begin{array}{|c|c|c|} \hline &12&3&4&5&68&7 \\ \hline 12&0&1.707&3.817&4.950&6.364&4.550 \\ \hline 3& &0&4.000&4.472&5.193&3.162\\ \hline 4& & &0&2.000&4.754&4.243\\ \hline 5& & & &0&2.921&3.162\\ \hline 68& & & & &0&2.236\\ \hline 7& & & & & &0\\\hline\end{array}\)
在矩阵\(D^{(14)}\)中最小距离\(d_{min}=d_{12,3}=1.707\),我们决定将 "12" 和\(x_3\)聚成一类 "123",下一步计算新的类 "123" 与其余各类之间的距离\(d_{123,68}=(d_{1,6}+d_{2,6}+d_{3,6}+d_{1,8}+d_{2,8}+d_{3,8})/6=5.974,\)
\(d_{123,K}=(d_{1,K}+d_{2,K}+d_{3,K})/3,K=4,5,7。\)并用下述\((5\times5)\)上三角形矩阵表示如下表\(D^{(15)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&4&5&68&7 \\ \hline 123&0&3.878&4.791&5.974&4.087\\ \hline 4& &0&2.000&4.754&4.243\\ \hline 5& & &0&2.921&3.162\\ \hline 68& & & &0&2.236\\ \hline 7& & & & &0\\\hline\end{array}\)
在矩阵\(D^{(15)}\)中最小距离\(d_{min}=d_{4,5}=2.000\),我们决定将 \(x_4\) 和\(x_5\)聚成一类 "45",下一步计算新的类 "45" 与其余各类之间的距离\(d_{45,123}=(d_{4,1}+d_{4,2}+d_{4,3}+d_{5,1}+d_{5,2}+d_{5,3})/6=4.334,\)
\(d_{45,68}=(d_{4,6}+d_{4,8}+d_{5,6}+d_{5,8})/4=3.837,\)
\(d_{45,7}=(d_{4,7}+d_{5,7})/2=3.702。\)并用下述\((4\times4)\)上三角形矩阵表示如下表\(D^{(16)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&68&7 \\ \hline 123&0&4.334&5.974&4.087\\ \hline 45& &0&3.837&3.702\\ \hline 68& & &0&2.236\\ \hline 7& & & &0\\\hline\end{array}\)
在矩阵\(D^{(16)}\)中最小距离\(d_{min}=d_{68,7}=2.236\),我们决定将 \(x_7\) 和 "68" 聚成一类 "678",下一步计算新的类 "678" 与其余各类之间的距离\(d_{678,123}=(d_{6,1}+d_{6,2}+d_{6,3}+d_{7,1}+d_{7,2}+d_{7,3}+d_{8,1}+d_{8,2}+d_{8,3})/9=5.345,\)
\(d_{678,45}=(d_{6,4}+d_{6,5}+d_{7,4}+d_{7,5}+d_{8,4}+d_{8,5})/6=3.792。\)并用下述\((3\times3)\)上三角形矩阵表示如下表\(D^{(17)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45&678\\ \hline 123&0&4.334&5.345\\ \hline 45& &0&3.792\\ \hline 678& & &0\\\hline\end{array}\)
在矩阵\(D^{(17)}\)中最小距离\(d_{min}=d_{45,678}=3.792\),我们决定将 "45" 和 "678" 聚成一类 "45678",下一步计算新的类 "45678" 与其余各类之间的距离\(d_{45678,123}=4.941。\)并用下述\((2\times2)\)上三角形矩阵表示如下表\(D^{(18)}\)所示。
\(\begin{array}{|c|c|c|} \hline &123&45678\\ \hline 123&0&4.941\\ \hline 45678& &0\\\hline\end{array}\)
绘制出聚类树为:
4、Ward's Minimum Variance Clustering Method
例2:有5个样本如下
\(x_1=(10,5)^T,x_2=(20,20)^T,x_3=(30,10)^T,x_4=(30,15)^T,x_5=(5,10)^T\)
和其他聚类方法一样,初始时将每个样本独自归为一类, 共得到\(N\)类, 每类仅包含一个对象,结束时将包含所有的样本。
第一步:初始化,每一个样本归为一类,则五个样本可归为五类。
令:
\(\Sigma_{(1,2,3,4,5)} =\underbrace{(10-10)^2+(5-5)^2}_{Cluster 1}+\underbrace{(20-20)^2+(20-20)^2}_{Cluster 2}+\)
\(\quad \underbrace{(30-30)^2+(10-10)^2}_{Cluster 3}+\underbrace{(30-30)^2+(15-15)^2}_{Cluster 4}+\underbrace{(5-5)^2+(10-10)^2}_{Cluster 5}\)
第二步:试图将其中两类合为一类,则共有\(\mathrm{C}^2_5=10\)种组合,并计算聚为一类的两个样本到其中心点的距离(此处采用欧式距离),然后求距离和,距离和最小的即为本次可行的聚类组合。
例如,当计算\(\Sigma_{((1,2),3,4,5)}\)时应首先计算:\(\frac{x_{1,1}+x_{2,1}}{2}=\frac{10+20}{2}=15\)和\(\frac{x_{1,2}+x_{2,2}}{2}=\frac{5+20}{2}=12.5\)
\(\Sigma_{((1,2),3,4,5)} =\underbrace{(10-15)^2+(5-12.5)^2+(20-15)^2+(20-12.5)^2}_{Cluster 12}+\)
\(\quad \underbrace{(30-30)^2+(10-10)^2}_{Cluster 3}+\underbrace{(30-30)^2+(15-15)^2}_{Cluster 4}+\underbrace{(5-5)^2+(10-10)^2}_{Cluster 5}\)
\(\quad =162.5\)
则10中聚类组合如下表:
\(\begin{array}{|c|c|c|} \hline \Sigma & 距离和\\ \hline \Sigma_{((1,2),3,4,5)} &162.6\\ \hline \Sigma_{((1,3),2,4,5)} &212.5 \\ \hline \Sigma_{((1,4),2,3,5)} &250 \\ \hline \Sigma_{((1,5),2,3,4)} &25 \\ \hline \Sigma_{((2,3),1,4,5)} &100 \\ \hline \Sigma_{((2,4),1,3,5)} &62.5 \\ \hline \Sigma_{((2,5),1,3,4)} &162.5 \\ \hline \Sigma_{((3,4),1,2,5)} & \color{Red} \star 12.5 \color{Red} \star \\ \hline \Sigma_{((3,5),1,2,4)} &312.5 \\ \hline \Sigma_{((4,5),1,2,3)} &325.0\\\hline\end{array}\)
由上表可知
\(\Sigma_{min}=\Sigma_{((3,4),1,2,5)}=12.5 \)
则此步可得出可行聚类组合为:(3,4),1,2,5,即\(x_3,x_4\)作为一类,\(x_1,x_2,x_5\)各为一类。
第三步:在上一步基础上,把34作为一类,试图将其中两类合为一类,则共有\(\mathrm{C}^2_4=6\)种组合。
例如,当计算\(\Sigma_{((1,34),2,5)}\)时应首先计算:\(\frac{x_{1,1}+x_{3,1}+x_{4,1}}{3}=\frac{10+30+30}{3}=23.3\)和\(\frac{x_{1,2}+x_{3,2}+x_{4,2}}{3}=\frac{5+10+15}{3}=10\)
\(\Sigma_{((1,34),2,5)} =\underbrace{(20-20)^2+(20-20)^2}_{Cluster 2}+\underbrace{(5-5)^2+(10-10)^2}_{Cluster 5}\)
\(\quad \underbrace{(10-23.3)^2+(5-10)^2+(30-23.3)^2+(10-10)^2+(30-23.3)^2+(15-10)^2}_{Cluster 134}\)
\(\quad =316.7\)
则6种聚类组合如下表:
\(\begin{array}{|c|c|c|} \hline \Sigma & 距离和\\ \hline \Sigma_{((34),(1,2),5)} &170.0\\ \hline \Sigma_{((34),(1,5),2)} & \color{Red} \star 37.5 \color{Red} \star\\ \hline \Sigma_{((34),(2,5),1)} &175 \\ \hline \Sigma_{((1,34),2,5)} & 316.7\\ \hline \Sigma_{((2,34),1,5)} &116.7 \\ \hline \Sigma_{((34,5),1,2)} &433.3 \\\hline\end{array}\)
由上表可知
\(\Sigma_{min}=\Sigma_{((3,4),(1,5),2)}=37.5 \)
则此步可得出可行聚类组合为:(3,4),(1,5),2,即\(x_3,x_4\)作为一类,\(x_1,x_5\)作为一类,\(x_2\)为一类。
第四步:在上一步基础上,得到三个新类34,15,2试图将其中两类合为一类,则共有\(\mathrm{C}^2_3=3\)种组合。
同上可以得到下表:
\(\begin{array}{|c|c|c|} \hline \Sigma & 距离和\\ \hline \Sigma_{((2,34),(15))} & \color{Red} \star 141.7 \color{Red} \star \\ \hline \Sigma_{((2,15),(34))} & 245.9 \\ \hline \Sigma_{((34,15),2)} &568.8 \\\hline\end{array}\)
由上表可知
\(\Sigma_{min}=\Sigma_{((2,34),(15))}=141.7 \)
则此步可得出可行聚类组合为:(234),(15),即\(x_2,x_3,x_4\)作为一类,\(x_1,x_5\)作为一类。
第五步:在上一步基础上,得到两个新类234,15试图将其中两类合为一类,则共有\(\mathrm{C}^2_2=1\)种组合。
同上可以得到下表:
\(\begin{array}{|c|c|c|} \hline \Sigma & 距离和\\ \hline \Sigma_{((15,234))} & \color{Red} \star 650 \color{Red} \star \\\hline\end{array}\)
则经过以上几步,最后将所有样本聚为一类。
绘制出聚类树为:
5、Lance-Williams Algorithm
图6 将其中两类合为一类并删除原类
- \(D={D_{ij}:Distance\ between\ x_i\ and\ x_j\ for\ i,j=1,2,...,N}\)
- For N iterations:
- \(i,j\)=arg \(\min\ D_{ij}\)...pair of closest clusters
- and cluster:(i+j),delete cluster \(i,j\).
- For Single linkage:
- \(D_{k,i+j}=min\{D_{k,i},D_{k,j}\}=\frac{1}{2}(D_{k,i}+D_{k,j}-|D_{k,i}-D_{k,j}|)\)
- For Complete linkage:
- \(D_{k,i+j}=max\{D_{k,i},D_{k,j}\}=\frac{1}{2}(D_{k,i}+D_{k,j}+|D_{k,i}-D_{k,j}|)\)
- For each remaining cluster k
则:\(D_{k,ij}=\alpha_i D_{k,i}+\alpha_j D_{k,j} + \beta D_{i,j} + \gamma |D_{k,i}-D_{k,j}|\)
\(\begin{array}{|c|c|c|} \hline Method & \alpha_i & \alpha_j & \beta & \gamma \\ \hline Single\ Linkage & 0.5 & 0.5 & 0 & -0.5 \\ \hline Complete\ Linkage & 0.5 & 0.5 & 0 & 0.5 \\ \hline Group\ Average\ Linkage_{(UPGMA)} & \frac{n_i}{n_i + n_j} & \frac{n_j}{n_i + n_j} & 0 & 0\\ \hline Weighted\ Group\ Average_{(WPGMA)} & 0.5 & 0.5 & 0 & 0 \\ \hline Centroid & \frac{n_i}{n_i + n_j} & \frac{n_j}{n_i + n_j} & \frac{-n_in_j}{(n_i + n_j)^2} & 0 \\ \hline Ward & \frac{n_i + n_k}{n_i + n_j + n_k} & \frac{n_j + n_k}{n_i + n_j + n_k} & \frac{-n_k}{n_i + n_j + n_k} & 0\\\hline\end{array}\)
附录:
1、什么是Chaining效果?
The Chaining is the following situation:"At the first cluster step,two objects merge to form one cluster,and throughout the ramaining clustering steps.This cluster grows progressively larger through the annexation of lone objects that have not yet clustered."Because SLINK embodies the nearest neighbor philosophy,it is most likely to cause Chaining.And because CLINK is the antithesis of SLINK,CLINK is the least likely to cause Chaining.Both Average and Ward's method should produce results between these extremes.其实就是像链条一样,把数据一个挨着一个串起来。
%Matlab Code data=[1 6;4 4;11 2;20 5;25 18;9 25]; L={'1','2','3','4','5','6','7','8'}; plot(data(:,1),data(:,2),'r*'); set(gca, 'XLim',[0 30]); % X轴的数据显示范围 set(gca, 'YLim',[0 30]); % X轴的数据显示范围 for ii=1:6 text(data(ii,1)+0.5,data(ii,2)+0.5,L{ii}); end xlabel('X','FontName','Times New Roman','FontSize',14); ylabel('Y','FontName','Times New Roman','FontSize',14); figure D=linkage(data,'single','euclidean'); %产生层次聚类树 dendrogram(D,'Orientation', 'top'); %绘出层次聚类树 xlabel('Single Linkage Chaining','FontName','Times New Roman','FontSize',14); ylabel('Euclidean Distance','FontName','Times New Roman','FontSize',14);
图7 不同算法聚类结果
Bibliography:
1、Izenman, Alan J. Modern multivariate statistical techniques: regression, classification, and manifold learning. Springer, 2009.
2、Romesburg, Charles. Cluster analysis for researchers. Lulu. com, 2004.
3、Murtagh, Fionn, and Pierre Legendre. "Ward's Hierarchical Clustering Method: Clustering Criterion and Agglomerative Algorithm." arXiv preprint arXiv:1111.6285 (2011).
5、机器学习中的相似性度量:http://blog.sina.com.cn/s/blog_5caa94a00100ya8t.html