聚类分析和matlab实现
聚类分析和matlab实现
一、定义
聚类分析又称群分析,是对多个样本(或指标)进行定量分类的一种多元统计分析方法。对样本进行分类称为Q型聚类分析,对指标进行分类称为R型聚类分析。
区别聚类与分类
- 聚类是将数据进行划分不同的类别,类别是未知的
- 分类是将数据进行分配到不同的类别中,此类别是已知的
二、Q型聚类分析
1 样本的相似性度量
一个样本往往由多个变量x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn进行描述。而当这些变量组合起来的时候:(x1,x2,...,xnx_1,x_2,...,x_nx1,x2,...,xn),则可看成是一个在RnR^nRn空间中的一个点,或者是n维向量空间中的一个向量。
由于聚类分析是要求使用定量化的方法对样本进行分类,所以需要用数量来描述样本之间的相似程度。由上一段所提,很自然想到使用距离来度量样本点之间的相似程度。
下面便是计算样本点之间距离的常用方法:
(一) 闵氏距离 (MinKowski)
dq(x,y)=[∑k=1p∣xk−yk∣q]1q, d_q(\boldsymbol x,\boldsymbol y)=[\sum_{k=1}^{p}|x_k-y_k|^q]^\frac{1}{q}, dq(x,y)=[k=1∑p∣xk−yk∣q]q1,
当q=1,2q=1,2q=1,2或q⟶+∞q\longrightarrow+\inftyq⟶+∞时,分别得到:
(二) 绝对值距离
d1(x,y)=∑k=1p∣xk−yk∣, d_1(\boldsymbol x,\boldsymbol y)=\sum_{k=1}^{p}|x_k-y_k|, d1(x,y)=k=1∑p∣xk−yk∣,
(三) 欧几里得距离
d2(x,y)=[∑k=1p(xk−yk)2]12, d_2(\boldsymbol x,\boldsymbol y)=[\sum_{k=1}^{p}(x_k-y_k)^2]^\frac{1}{2}, d2(x,y)=[k=1∑p(xk−yk)2]21,
(四) 切比雪夫距离
d∞(x,y)=max1≤k≤p∣xk−yk∣, d_\infty(\boldsymbol x,\boldsymbol y)=\max_{1\le k\le p}{|x_k-y_k|}, d∞(x,y)=1≤k≤pmax∣xk−yk∣,
在Minkowski距离中,最常用的是欧几里得距离,它的主要优点是当坐标轴进行正交旋转时,欧氏距离是保持不变的。因此,如果对原坐标系进行平移和旋转变换,变换后样本点间的距离和变换前完全相同。
同时要注意,采用Minkowski距离时,
-
一定要采用相同量纲的变量
-
尽可能避免变量的多重相关性。多重相关性会导致信息重叠,会片面强调某些变量的重要性。
由于Minkowski距离由这些缺点,便有了改进的马氏距离。
(五) 马氏距离 (Mahalanobis)
d(x,y)=(x−y)TΣ−1(x−y) d(\boldsymbol x,\boldsymbol y)=\sqrt{(\boldsymbol x-\boldsymbol y)^T\boldsymbol\Sigma^{-1}(\boldsymbol x-\boldsymbol y)} d(x,y)=(x−y)TΣ−1(x−y)
式中:x,y\boldsymbol x ,\boldsymbol yx,y 是来自p维总体 ZZZ 的样本观察值;Σ\boldsymbol\SigmaΣ 为 ZZZ 的协方差矩阵,实际中 Σ\boldsymbol\SigmaΣ 往往是未知的,常常需要同样本协方差来估计。
马氏距离对一切线性变化是不变的,故不受量纲的影响。
2 类的相似性度量
(一)最短距离法 (Nearest Neighbor or Single Linkage Method)
D(G1,G2)=minxi∈G1yj∈G2∣d(xi,yj)∣, D(G_1,G_2)=\min_{x_i\in G_1 \atop y_j\in G_2}{|d(\boldsymbol x_i,\boldsymbol y_j)|}, D(G1,G2)=yj∈G2xi∈G1min∣d(xi,yj)∣,
即两个类中最近的两点间的距离。
(二)最长距离法 (Farthest Neighbor or Complete Linkage Method)
D(G1,G2)=maxxi∈G1yj∈G2∣d(xi,yj)∣, D(G_1,G_2)=\max_{x_i\in G_1 \atop y_j\in G_2}{|d(\boldsymbol x_i,\boldsymbol y_j)|}, D(G1,G2)=yj∈G2xi∈G1max∣d(xi,yj)∣,
即两个类中最远的两点间的距离。
(三)重心法 (Centroid Method)
D(G1,G2)=d(xˉ,yˉ), D(G_1,G_2)=d(\boldsymbol{\bar x},\boldsymbol{\bar y}), D(G1,G2)=d(xˉ,yˉ),
其中,xˉ,yˉ\boldsymbol{\bar x},\boldsymbol{\bar y}xˉ,yˉ 分别为 G1,G2G_1,G_2G1,G2 的重心。
(四)类平均法 (Group Average Method)
D(G1,G2)=1n1n2∑xi∈G1∑xj∈G2d(xi,xj), D(G_1,G_2)=\frac{1}{n_1n_2}\sum_{x_i\in G_1}\sum_{x_j\in G_2}{d(\boldsymbol x_i,\boldsymbol x_j)}, D(G1,G2)=n1n21xi∈G1∑xj∈G2∑d(xi,xj),
它等于 G1,G2G_1,G_2G1,G2 中两样本点距离的平均,其中:n1,n2n_1,n_2n1,n2 分别为 G1,G2G_1,G_2G1,G2 中的样本点个数。
(五)离差平方和法 (Sum of Squares Method)
若记:
D1=∑xi∈G1(xi−xˉ1)T(xi−xˉ1) D_1=\sum_{x_i\in G_1}{(\boldsymbol x_i-\boldsymbol{\bar x_1})^T(\boldsymbol x_i-\boldsymbol{\bar x_1})} D1=xi∈G1∑(xi−xˉ1)T(xi−xˉ1)
D2=∑xj∈G2(xj−xˉ2)T(xj−xˉ2) D_2=\sum_{x_j\in G_2}{(\boldsymbol x_j-\boldsymbol{\bar x_2})^T(\boldsymbol x_j-\boldsymbol{\bar x_2})} D2=xj∈G2∑(xj−xˉ2)T(xj−xˉ2)
D12=∑xk∈G1∪G2(xk−xˉ)T(xk−xˉ) D_{12}=\sum_{x_k\in G_1\cup G_2}{(\boldsymbol x_k-\boldsymbol{\bar x})^T(\boldsymbol x_k-\boldsymbol{\bar x})} D12=xk∈G1∪G2∑(xk−xˉ)T(xk−xˉ)
式中:
xˉ1=1n1∑xi∈G1xi \boldsymbol{\bar x_1}=\frac{1}{n_1}\sum_{x_i\in G_1}{\boldsymbol x_i} xˉ1=n11xi∈G1∑xi
xˉ2=1n2∑xj∈G2xj \boldsymbol{\bar x_2}=\frac{1}{n_2}\sum_{x_j\in G_2}{\boldsymbol x_j} xˉ2=n21xj∈G2∑xj
xˉ=1n1+n2∑xk∈G1∪G2xk \boldsymbol{\bar x}=\frac{1}{n_1+n_2}\sum_{x_k\in G_1 \cup G_2}{\boldsymbol x_k} xˉ=n1+n21xk∈G1∪G2∑xk
所以则定义:
D(G1,G2)=D12−D1−D2 D(G_1,G_2)=D_{12}-D_1-D_2 D(G1,G2)=D12−D1−D2
若 G1,G2G_1,G_2G1,G2 内部点与点距离很小,则它们能很好地各自聚为一类,并且这两类又能够充分分类(即 D12D_{12}D12 很大),这时必然有 D=D12−D1−D2D=D_{12}-D_1-D_2D=D12−D1−D2 很大。因此,按定义可以认为,两类 D1,D2D_1,D_2D1,D2 之间的距离很大。
又称为Ward方法。
3 Matlab聚类分析相关命令
(一)pdist
使用方法:Y = pdist(X, ‘metric’)
表示用’metric’指定的方法计算矩阵X中对象间的距离。其中:
- 矩阵X为 m×nm\times nm×n 矩阵,可看作 mmm 个 nnn 维行向量,每一个行向量就是样本点
- 输出的Y是包含距离信息的长度为 m(m−1)2\frac{m(m-1)}{2}2m(m−1) 的行向量,由于距离的两两组合后的距离,所以由排列组合可知共有 m(m−1)2\frac{m(m-1)}{2}2m(m−1) 个组合。
下面是’metric’常用字符串值:
| 字符串 | 含义 |
|---|---|
| ‘euclidean’ | 欧式距离(默认) |
| ‘seuclidean’ | 标准欧几里得距离 |
| ‘cityblock’ | 绝对值距离 |
| ‘minkowski’ | 闵氏距离 |
| ‘chebychev’ | 切比雪夫距离 |
| ‘mahalanobis’ | 马氏距离 |
注意:使用闵氏距离时,Y = pdist(X, ‘minkowski’, p),其中p为闵氏距离计算需要用到的指数值,默认为2.
(二)linkage
使用方法:Z = linkage(Y, ‘method’)
表示使用由’method’指定的算法计算生成聚类树,其中:
- Y为pdist函数输出的 m(m−1)2\frac{m(m-1)}{2}2m(m−1) 维距离行向量
- Z为包含聚类树信息的 (m−1)×3(m-1)\times3(m−1)×3 矩阵。每一行表示一个类(样本)和另一个类(样本)的合并,所以相当于每一个样本都要合并一次,而第一次合并是两个样本进行的,所以总共有 m−1m-1m−1 行。
- 第一二列表示两个合并类(样本),其中:1∼m1\thicksim m1∼m 表示初始样本;超过 mmm 的是由样本组成的类,记作 m+jm+jm+j ,其中 mmm 为样本总数,jjj 表示该类是在第 jjj 行新形成的。
- 第三列表示对应两个类(样本)间的距离。
下面是’method’常用的字符串:
| 字符串 | 含义 |
|---|---|
| ‘single’ | 最短距离(默认) |
| ‘average’ | 无权平均距离 |
| ‘centroid’ | 重心距离 |
| ‘complete’ | 最大距离 |
| ‘median’ | 赋权重心距离 |
| ‘ward’ | 离差平方和方法 |
| ‘weighted’ | 赋权平均距离 |
(三)cluster
使用方法:T = cluster(Z, ‘cutoff’, c)
表示将由linkage产生的信息矩阵Z分成c类,其中:
- Z为linkage函数生成的 (m−1)×3(m-1)\times3(m−1)×3 矩阵
- c 表示分成类的数量
- T为长度为 mmm 的列向量,其中每行对应着X中的行(样本),T中数字相同的为同一类
(四)dendrogram
使用方法(常用):
- H = dendrogram(Z, P)
- H = dendrogram(Z, P, ‘ColorThreshold’, cutoff)
表示画出由linkage产生的信息矩阵Z对应的聚类树状图。其中:
- Z为linkage函数生成的 (m−1)×3(m-1)\times3(m−1)×3 矩阵
- P为树状图显示的最大基础类数量(结点数量),默认值为30,0表示全部画出
- ‘ColorThreshold’ 表示不同类显示不同颜色
- cutoff与’ColorThreshold’ 配合使用,表示不同颜色类的最小距离
4 举例
(一)
clc, clear; % 清除页面和工作区
a = [1,0;1,1;3,2;4,3;2,5]; % 5组样本
Y = pdist(a); % 计算两两样本之间的欧式距离
Z = linkage(Y); % 使用最短距离算法生成具有层次结构的聚类树
T = cluster(Z,3); % 将聚类树分成3类
H = dendrogram(Z,0); % 将聚类树Z全部画出
得到下聚类图:
(二)
clc, clear; % 清除页面和工作区
a = [1,0;1,1;3,2;4,3;2,5]; % 5组样本
Y = pdist(a); % 计算两两样本之间的欧式距离
Z = linkage(Y); % 使用最短距离算法生成具有层次结构的聚类树
T = cluster(Z,3); % 将聚类树分成3类
cutoff = median([Z(end-2,3) Z(end-1,3)]); % 让其最小距离在倒数第二三行中,其取倒数第二行,即分成三类
H = dendrogram(Z,0,'ColorThreshold',cutoff);% 将Z带不同颜色画出
得到下聚类图:
参考资料:
[1] 司守奎, 孙兆亮. 数学建模算法与应用[M].北京:国防工业出版社,2020:2.
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)