聚类分析详解:相似性度量与系统聚类法的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 算法流程
- 初始化:每个样本自成一类,计算距离矩阵D。
- 迭代合并:
- 找到距离最小的两类$G_p$和$G_q$,合并为新类$G_r$。
- 更新距离矩阵,重新计算$G_r$与其他类的距离。
- 终止条件:所有样本聚为一类,生成聚类树(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 |
步骤详解
- 计算绝对值距离矩阵:
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}
$$
- 生成聚类树:
Z = linkage(dist, 'single'); % 最短距离法
dendrogram(Z); % 绘制聚类树
- 划分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. 总结
- 相似性度量:欧氏、马氏距离适用于不同场景,需结合数据特性选择。
- 层次聚类流程:pdist→linkage→dendrogram→cluster四步完成分析。
- MATLAB优势:函数简洁高效,支持多种距离与聚类方法,适合快速验证算法。
核心代码模板:
data = [样本数据矩阵];
dist = pdist(data, 'metric'); % 计算距离
Z = linkage(dist, 'method'); % 生成聚类树
dendrogram(Z); % 可视化
T = cluster(Z, 'maxclust', K); % 划分K个簇
掌握上述方法,可灵活应用于客户分群、图像分割、生物分类等场景,为数据分析提供有力支持。
热门推荐
血糖仪被“冻”也会“罢工” 糖友冬天测血糖需注意这几点
治疗左下腹部疼的妙招
掌握微动画制作:流程、技巧与工具
交强险赔偿金额怎么算?一文详解交强险理赔与保费计算
环环相扣!起底高薪招聘货车司机背后的"套路运"
食管癌:症状、诊断与治疗全解析
金翅雀:一种常见的观赏鸣禽
保安过滤器的工艺原理
板楼的结构特点及优势解析
传承好家风,弘扬好家教
护手霜对手裂口:修复与呵护的秘诀
银行的风险管理策略调整:如何平衡风险与收益?
投资小知识:房地产泡沫:成因、现状与风险
关于火锅的英语口语表达
电缆桥架到底需不需要跨接?今天终于搞清楚了(附规范依据)
幸福树的养护方法
创新联合体:推动技术创新共生式发展
余姚,真不愧是江浙沪天选后花园
中国历史上的十大宦官
写给小白的大模型入门科普
被印度“围剿”的中国CAR-T:不仅是药企不“争气”
干货:对公账户是干什么用的?公司对公账户为什么会被冻结?
血府逐瘀胶囊:成分、功效与临床应用全解析
孕妇吸氧需谨慎:5小时长时吸氧带来的风险与应对措施
家庭装修必知:水性漆和油漆的区别、相同点及特点
跑高速的标准胎压,不是2.0也不是2.1,那么到底保持哪个胎压安全又省油
战术板|16场进55球的巴萨,传中都是满满的细节
潼关古城:不只是景点,更是一段活色生香的历史!
葱爆海参家常做法:六步教你做出鲁菜经典
急性肠胃炎止泻快的方法