Bootstrap

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

内容摘要:
本文详细解析聚类分析的核心方法,涵盖样本与类间相似性度量(欧氏距离、马氏距离、类平均法等)及层次聚类流程。通过销售员业绩案例,逐步演示MATLAB中 pdistlinkagecluster 函数的实战应用,包括数据标准化、距离矩阵计算、聚类树生成与结果划分。结合代码示例与可视化解读,帮助读者掌握多维数据分群的核心技能。

关键词:聚类分析 相似性度量 层次聚类 MATLAB函数 距离矩阵


1. 聚类分析概述

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


2. 相似性度量方法

方法公式特点适用场景
欧氏距离 d ( x , y ) = ∑ k = 1 p ( x k − y k ) 2 d(x,y) = \sqrt{\sum_{k=1}^{p} (x_k - y_k)^2} d(x,y)=k=1p(xkyk)2 对量纲敏感,需标准化;坐标旋转后距离不变。空间直线距离计算
马氏距离 d ( x , y ) = ( x − y ) T Σ − 1 ( x − y ) d(x,y) = \sqrt{(x-y)^T \Sigma^{-1}(x-y)} d(x,y)=(xy)TΣ1(xy) 解决变量相关性与量纲影响;计算复杂度高。高相关性变量
绝对值距离 d ( x , y ) = ∑ k = 1 p ∣ x k − y k ∣ d(x,y) = \sum_{k=1}^{p} |x_k - y_k| d(x,y)=k=1pxkyk适用于网格状路径数据(如城市街区)。网格数据、城市街区距离
Chebyshev距离 d ∞ ( x , y ) = max ⁡ 1 ≤ k ≤ p ∣ x k − y k ∣ d_{\infty}(x,y) = \max_{1 \leq k \leq p} |x_k - y_k| d(x,y)=max1kpxkyk适用于棋盘距离计算。棋盘距离、最大差异度量
最短距离法 D ( G 1 , G 2 ) = min ⁡ x i ∈ G 1 , y j ∈ G 2 d ( x i , y j ) D(G_1, G_2) = \min_{x_i \in G_1, y_j \in G_2} d(x_i, y_j) D(G1,G2)=minxiG1,yjG2d(xi,yj)易形成链状结构,对噪声敏感。噪声较少的数据
最长距离法 D ( G 1 , G 2 ) = max ⁡ x i ∈ G 1 , y j ∈ 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(G1,G2)=maxxiG1,yjG2d(xi,yj)倾向于生成紧凑簇,抗噪声能力强。噪声较多的数据
类平均法 D ( G 1 , G 2 ) = 1 n 1 n 2 ∑ x i ∈ G 1 ∑ y j ∈ 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) D(G1,G2)=n1n21xiG1yjG2d(xi,yj)平衡最短与最长距离,鲁棒性较好。一般数据
Ward法 D ( G 1 , G 2 ) = D 12 − D 1 − D 2 D(G_1, G_2) = D_{12} - D_1 - D_2 D(G1,G2)=D12D1D2倾向于生成方差小的簇。方差较小的簇


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

3.1 算法流程

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

3.2 MATLAB核心函数详解

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

MATLAB核心函数示例

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

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

数据准备

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

销售员销售量(百件)回款额(万元)
w 1 w_1 w110
w 2 w_2 w211
w 3 w_3 w332
w 4 w_4 w443
w 5 w_5 w525
步骤详解
  1. 计算绝对值距离矩阵

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

    输出距离矩阵:
    [ 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 ] \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} 0146610355430246520665460

  2. 生成聚类树

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

    聚类树

  3. 划分3个簇

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

    结果解读

    • 第1类: w 1 , w 2 w_1, w_2 w1,w2(业绩较差)
    • 第2类: w 3 , w 4 w_3, w_4 w3,w4(业绩中等)
    • 第3类: w 5 w_5 w5(业绩最佳)

4. 总结

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

核心代码模板

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

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

;