聚类分析一般思路
- 数据标准化;
- 确定相似性度量(距离)算法;
①Q型算法(样本距离->类之间距离)
②R型算法(变量距离->类之间距离) - 生成聚类树;
- 画出聚类图;
- 显示分类结果;
数据标准化
对数据矩阵X=(xij)m×n进行标准化处理,处理方式: x ^ i j = x i j − x j — s j 其 中 x j — , s j 为 矩 阵 X = ( x i j ) m × n 每 一 列 的 均 值 和 标 准 差 ; \hat x_{ij}=\frac{x_{ij}-\overset{—}{x_{j}}}{s_{j}}\\其中\overset{—}{x_{j}},s_{j}为矩阵X=(x_{ij})_{m×n}每一列的均值和标准差; x^ij=sjxij−xj—其中xj—,sj为矩阵X=(xij)m×n每一列的均值和标准差;
zscre(X);%对矩阵X进行列标准化处理
相似性度量(距离)算法
- 根据数据矩阵Xm×n(看作m个n维行向量),每一个n维行向量即是一个∈Rn的对象,利用matlab内置函数,
pdist(X,'metric')
计算两两对象间的距离;
得到m(m-1)/2维距离行向量d; - 根据距离行向量d,利用matlab内置函数,
squareform(d)
得到m×m的距离矩阵D;
X = [ x 1 → x 2 → ⋮ x m → ] ; d = [ d 1 , d 2 , ⋯ , d m ( m − 1 ) 2 ] (1) X= \left[ \begin{matrix}\overset{\rightarrow}{x_{1}}\\ \overset{\rightarrow}{x_{2}} \\ \vdots \\ \overset{\rightarrow}{x_{m}}\end{matrix}\right] ;d=\left[ \begin{matrix}d_{1}, d_{2} , \cdots , d_{\frac{m(m-1)}{2}}\end{matrix}\right] \tag{1} X=⎣⎢⎢⎢⎢⎡x1→x2→⋮xm→⎦⎥⎥⎥⎥⎤;d=[d1,d2,⋯,d2m(m−1)](1)
%数据矩阵
X=[1,0;1,1;3,2;4,3;2,5];
%距离向量
d=pdist(X,'cityblock');%cityblock:计算绝对值距离
%距离矩阵
D=squareform(Y);
结果如下:
d
=
[
1
4
6
6
3
5
5
2
4
4
]
D
=
x
→
1
x
→
2
x
→
3
x
→
4
x
→
5
x
→
1
0
1
4
6
6
x
→
2
0
3
5
5
x
→
3
0
2
4
x
→
4
0
4
x
→
5
0
(2)
d=[\begin{matrix} 1& 4 & 6 & 6 & 3 & 5 & 5 & 2 & 4 & 4\end{matrix}]\\D=\begin{matrix} & \overset{\rightarrow}x_{1}& \overset{\rightarrow}x_{2}& \overset{\rightarrow}x_{3}& \overset{\rightarrow}x_{4}& \overset{\rightarrow}x_{5} \\ \overset{\rightarrow}x_{1}&0&1&4&6&6\\ \overset{\rightarrow}x_{2}& &0&3&5&5\\ \overset{\rightarrow}x_{3}& & &0&2&4\\ \overset{\rightarrow}x_{4}& & & &0&4\\ \overset{\rightarrow}x_{5}& & & & &0 \\ \end{matrix}\tag{2}
d=[1466355244]D=x→1x→2x→3x→4x→5x→10x→210x→3430x→46520x→565440(2)
明显:距离向量(d)与距离矩阵(D)的关系如下图
- 参数
metric
指定计算样本距离的方法:
字符串 | 含义 | 字符串 | 含义 |
---|---|---|---|
euclidean | 欧氏距离(默认) | hamming | 海明距离 |
seuclidean | 标准欧几里得距离 | custom distance function | 自定义函数距离 |
cityblock | 绝对值距离 | cosine | 1-两个向量夹角的余弦 |
minkowski | 闵氏距离 | correlation | 1-样本的相关系数 |
chebychev | 切比雪夫距离 | spearman | 1-样本的Spearman秩相关系数 |
mahalanobis | 马氏距离 | jaccard | 1-Jaccard系数 |
生成聚类(二叉)树
- 根据距离行向量d,利用matlab内置函数,
linkage(d,'method')
生成聚类树;
在matlab中利用信息矩阵Z来描述聚类树;
%聚类(二叉)树信息矩阵
Z=linkage(d);%默认使用最短距离法
结果如下:
Z
=
[
1
2
1
3
4
2
6
7
3
5
8
4
]
⟶
含
义
Z
=
[
j
h
a
h
b
d
h
m
+
j
1
1
2
1
6
2
3
4
2
7
3
6
7
3
8
4
5
8
4
9
]
(3)
Z= \left[\begin{matrix} 1&2&1\\ 3&4&2\\ 6&7&3\\ 5&8&4 \end{matrix}\right] \overset{含义}\longrightarrow Z= \left[ \begin{array}{c|ccc|c} j&h_{a}&h_{b}&d&h_{m+j}\\ 1&1&2&1&6\\ 2&3&4&2&7\\ 3&6&7&3&8\\ 4&5&8&4&9 \end{array}\right]\tag{3}
Z=⎣⎢⎢⎡136524781234⎦⎥⎥⎤⟶含义Z=⎣⎢⎢⎢⎢⎡j1234ha1365hb2478d1234hm+j6789⎦⎥⎥⎥⎥⎤(3)其中:**表示第j次融合,ha表示融合的节点a,hb表示融合的节点b,d表示平台的高度, hm+j 表示生成的新节点;
- 参数
method
指定计算类之间距离的算法:
字符串 | 含义 | 字符串 | 含义 |
---|---|---|---|
single | 最短距离(默认) | median | 赋权重心距离 |
average | 无权平均距离 | ward | 离差平方和方法 |
centroid | 重心距离 | weighted | 赋权平均距离 |
complete | 最大距离 |
画出聚类图
- 根据聚类树信息矩阵,利用matlab内置函数
dendrogrom(Z)
生成聚类图H;
%画出聚类图
H=dendrogram(Z);
结果如下:
显示分类结果
- 根据聚类树信息矩阵,利用matlab内置函数
cluster(Z,'cutpff',c)
生成聚类信息向量T。
%进行聚类,生成聚类信息向量T
T=cluster(Z,'maxclust',3);
结果如下:
T
=
[
1
1
2
2
3
]
⟶
含
义
T
=
[
j
k
1
1
2
1
3
2
4
2
5
3
]
T=\left[\begin{matrix} 1\\1\\2\\2\\3 \end{matrix}\right] \overset{含义}\longrightarrow T=\left[\begin{matrix} j&k\\ 1&1\\ 2&1\\ 3&2\\ 4&2\\ 5&3\\ \end{matrix}\right]
T=⎣⎢⎢⎢⎢⎡11223⎦⎥⎥⎥⎥⎤⟶含义T=⎣⎢⎢⎢⎢⎢⎢⎡j12345k11223⎦⎥⎥⎥⎥⎥⎥⎤
式中:j表示为第j个对象即xj;k表示xj从属聚类后的第几类;
-
参数
c
指定聚类后类的个数:
如前叙例子中,c=3,T取值{1,2,3},聚类后类的个数为3; -
参数
cutpff
xxx:
一般直接使用cutpff=maxclust
-
参数意义详解