问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

聚类分析详解:相似性度量与系统聚类法的MATLAB实现

创作时间:
作者:
@小白创作中心

聚类分析详解:相似性度量与系统聚类法的MATLAB实现

引用
CSDN
1.
https://m.blog.csdn.net/2501_90186640/article/details/145804442

聚类分析是一种无监督学习方法,用于将数据集中的对象划分为若干组(簇),使得同一簇内的对象相似性较高,不同簇间差异显著。本文详细解析聚类分析的核心方法,涵盖样本与类间相似性度量(欧氏距离、马氏距离、类平均法等)及层次聚类流程。通过销售员业绩案例,逐步演示MATLAB中pdist、linkage、cluster函数的实战应用,包括数据标准化、距离矩阵计算、聚类树生成与结果划分。结合代码示例与可视化解读,帮助读者掌握多维数据分群的核心技能。

1. 聚类分析概述

聚类分析(Cluster Analysis)是一种无监督学习方法,旨在将数据集中的对象划分为若干组(簇),使得同一簇内的对象相似性较高,不同簇间差异显著。其核心步骤包括相似性度量聚类算法设计。本节重点介绍样本与类间相似性度量方法,以及基于层次聚类的系统聚类法(Hierarchical Clustering),并结合MATLAB函数pdist、linkage、cluster进行实战演示。

2. 相似性度量方法

方法
公式
特点
适用场景
欧氏距离
$d(x,y) = \sqrt{\sum_{k=1}^{p} (x_k - y_k)^2}$
对量纲敏感,需标准化;坐标旋转后距离不变。
空间直线距离计算
马氏距离
$d(x,y) = \sqrt{(x-y)^T \Sigma^{-1}(x-y)}$
解决变量相关性与量纲影响;计算复杂度高。
高相关性变量
绝对值距离
$d(x,y) = \sum_{k=1}^{p}
x_k - y_k
$
Chebyshev距离
$d_{\infty}(x,y) = \max_{1 \leq k \leq p}
x_k - y_k
$
最短距离法
$D(G_1, G_2) = \min_{x_i \in G_1, y_j \in G_2} d(x_i, y_j)$
易形成链状结构,对噪声敏感。
噪声较少的数据
最长距离法
$D(G_1, G_2) = \max_{x_i \in G_1, y_j \in G_2} d(x_i, y_j)$
倾向于生成紧凑簇,抗噪声能力强。
噪声较多的数据
类平均法
$D(G_1, G_2) = \frac{1}{n_1 n_2} \sum_{x_i \in G_1} \sum_{y_j \in G_2} d(x_i, y_j)$
平衡最短与最长距离,鲁棒性较好。
一般数据
Ward法
$D(G_1, G_2) = D_{12} - D_1 - D_2$
倾向于生成方差小的簇。
方差较小的簇

3. 系统聚类法(层次聚类)

3.1 算法流程

  1. 初始化:每个样本自成一类,计算距离矩阵D。
  2. 迭代合并
  • 找到距离最小的两类$G_p$和$G_q$,合并为新类$G_r$。
  • 更新距离矩阵,重新计算$G_r$与其他类的距离。
  1. 终止条件:所有样本聚为一类,生成聚类树(Dendrogram)。

3.2 MATLAB核心函数详解

函数
功能
语法
参数说明
输出
pdist
计算样本间距离
Y = pdist(X, 'metric', '参数')
-X:m×n数据矩阵,每行为一个样本。
-'metric':距离类型,如'euclidean'、'cityblock'。
Y:长度为$(m-1)\cdot m/2$的距离向量。
linkage
生成层次聚类树
Z = linkage(Y, 'method')
-Y:pdist输出的距离向量。
-'method':类间距离方法,如'single'、'complete'。
Z:$(m-1) \times 3$矩阵,记录聚类过程。
cluster
从聚类树中划分指定数量的簇
T = cluster(Z, 'maxclust', K)
-Z:linkage输出的聚类树。
-'maxclust', K:指定最终簇的数量K。
T:m×1向量,元素表示对应样本所属的簇编号。
dendrogram
绘制聚类树
dendrogram(Z)
-Z:linkage输出的聚类树。
生成聚类树状图。
squareform
将距离向量转换为方阵
D = squareform(Y)
-Y:pdist输出的距离向量。
D:m×m对称距离矩阵。

MATLAB核心函数示例

函数
示例代码
功能说明
pdist
dist = pdist(data, 'cityblock');
计算数据矩阵data中样本间的绝对值距离。
linkage
Z = linkage(dist, 'average');
使用类平均法生成层次聚类树。
cluster
T = cluster(Z, 'maxclust', 3);
将数据划分为3个簇。
dendrogram
dendrogram(Z);
绘制聚类树状图。
squareform
dist_matrix = squareform(dist);
将距离向量转换为对称距离矩阵。

3.3 完整案例:销售员业绩聚类

数据准备

5名销售员的销售业绩如下:

销售员
销售量(百件)
回款额(万元)
$w_1$
1
0
$w_2$
1
1
$w_3$
3
2
$w_4$
4
3
$w_5$
2
5

步骤详解

  1. 计算绝对值距离矩阵
data = [1,0; 1,1; 3,2; 4,3; 2,5];
dist = pdist(data, 'cityblock'); % 绝对值距离
dist_matrix = squareform(dist);  % 转换为方阵

输出距离矩阵:

$$
\begin{bmatrix}
0 & 1 & 4 & 6 & 6 \
1 & 0 & 3 & 5 & 5 \
4 & 3 & 0 & 2 & 4 \
6 & 5 & 2 & 0 & 6 \
6 & 5 & 4 & 6 & 0 \
\end{bmatrix}
$$

  1. 生成聚类树
Z = linkage(dist, 'single'); % 最短距离法
dendrogram(Z); % 绘制聚类树

  1. 划分3个簇
T = cluster(Z, 'maxclust', 3);
disp(T'); % 输出:[1, 1, 2, 2, 3]

结果解读

  • 第1类:$w_1, w_2$(业绩较差)
  • 第2类:$w_3, w_4$(业绩中等)
  • 第3类:$w_5$(业绩最佳)

4. 总结

  1. 相似性度量:欧氏、马氏距离适用于不同场景,需结合数据特性选择。
  2. 层次聚类流程:pdist→linkage→dendrogram→cluster四步完成分析。
  3. MATLAB优势:函数简洁高效,支持多种距离与聚类方法,适合快速验证算法。

核心代码模板

data = [样本数据矩阵];
dist = pdist(data, 'metric');    % 计算距离
Z = linkage(dist, 'method');     % 生成聚类树
dendrogram(Z);                   % 可视化
T = cluster(Z, 'maxclust', K);  % 划分K个簇

掌握上述方法,可灵活应用于客户分群、图像分割、生物分类等场景,为数据分析提供有力支持。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号