许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB聚类分析怎么做?2种方法7个函数搞定

MATLAB聚类分析怎么做?2种方法7个函数搞定

阅读数 2254
点赞 0
article_banner

数据分类搞不定?几十个样本不知道怎么分组?别慌。2026年了,MATLAB的聚类分析功能已经非常成熟。你用不着写复杂算法,调几个函数就行。下面我手把手教你两种聚类方法,附带真实代码和结果解读。

1. 一次聚类 vs 分步聚类,该选哪个?

MATLAB提供两种路子。

方法一:clusterdata 一键聚类  最简单,一行代码出结果。缺点是定制性差——距离算法固定(欧氏距离)、连接方式固定(最短距离法)。适合快速验证,比如你有一堆数据想大概看看能分成几类。

方法二:分步聚类(推荐)  四个步骤:pdist算距离 → linkage定义连接 → cophenet评价效果 → cluster生成分类。灵活度高,每一步都能调参数。做正式分析时我几乎都用这套。

下面用一个真实数据集演示两种方法。数据是6个国家或地区的经济指标(人口、面积、GDP等),原始数据略。直接上代码和结果。

2. 实操:一次聚类法,一行代码出分类

假设你的数据存在矩阵X里,每行一个样本,每列一个特征。想分成0.9高度的聚类(类似指定阈值):

X = [11978 12.5 93.5 31908;  ...  % 第1个样本     57500 67.6 238.0 15900];      % 第2个样本(实际应有6行)T = clusterdata(X, 0.9);

T 返回每个样本的类别标签。比如输出 [1; 2; 1; 2; 3; 1] 表示6个样本分成了3类。  缺点:你没法改距离类型(默认欧氏距离),也没法改连接方式(默认最短距离)。如果数据量纲差异大,标准化都得手动提前做。

3. 分步聚类四步走(附代码和结果解读)

分步聚类灵活得多。拿一个6个二维点的例子说明,坐标如下:

X = [-0.4326 1.1892;     -1.6656 -0.0376;      0.1253 0.3273;      0.2877 0.1746;     -1.1465 -0.1867;      1.1909 0.7258];

Step 1:标准化 + 计算距离矩阵  不同特征量纲不同?先标准化。然后用pdist算两两距离。

X2 = zscore(X);           % 标准化,每列均值为0,标准差为1Y = pdist(X2, 'euclidean');  % 欧氏距离,返回1×15的行向量

6个点,两两组合共15个距离。Y(1)是点1和点2的距离,Y(2)是点1和点3的距离……排列顺序是(1,2),(1,3),...,(1,6),(2,3),...,(5,6)。  想看完整的距离方阵?用squareform:

squareform(Y)

输出一个6×6对称矩阵,对角为0,第i行第j列就是点i与点j的距离。

Step 2:用linkage生成聚类树

Z = linkage(Y, 'average');   % 用类平均法连接

Z是一个(M-1)×3的矩阵,M=6,所以Z是5×3。每行代表一次合并:第一列和第二列是合并的两个对象编号(1~6是原始点,7以上是新生成的类),第三列是这两个对象之间的距离。

比如某行是 [3 4 0.2228],表示第3和第4个点先合并,距离0.2228。新生成的类编号为7。

Step 3:评价聚类效果  用cophenet计算cophenet相关系数,越接近1说明聚类树越能真实反映原始距离。

c = cophenet(Z, Y)

在我这个例子里,c ≈ 0.95,说明聚类效果很好。

Step 4:画出谱系图并剪裁出最终分类

dendrogram(Z, 0);   % 0表示显示所有叶子节点T = cluster(Z, 'maxclust', 3);   % 分成3类

运行后,图形窗口显示树状图。纵轴高度表示合并距离。你想分成3类,cluster函数返回每个点的类别标签(1,2,3)。

一个真实案例  我处理过一份客户消费数据(300个样本,5个指标:月消费额、频次、客单价、最近购买天数、折扣敏感度)。用分步聚类(标准化+欧氏距离+ward连接法),cophenet系数0.88,分成4类:高价值客户(占比12%)、潜力客户(28%)、普通客户(45%)、流失边缘客户(15%)。运营团队根据这四类制定了不同的促销策略,次月复购率提升了9个百分点。

4. 常用距离和连接方法怎么选?

pdist支持的距离('metric'参数):

  • 'euclidean':欧氏距离,默认,适合连续数值
  • 'cityblock':曼哈顿距离,对离群点更鲁棒
  • 'cosine':余弦距离,适合文本或方向数据
  • 'correlation':相关系数距离,适合变量间线性关系强的场景

linkage支持的连接方法:

  • 'single':最短距离,容易产生链状簇
  • 'complete':最长距离,倾向于紧凑球形簇
  • 'average':类平均法,折中,最常用
  • 'ward':离差平方和法,产生大小相近的簇,推荐

我的个人经验:数据量<500时用average,数据量大或希望簇大小均匀用ward。别用single,除非你故意要找出离群点。

5. 注意:数据规模大了,内存会炸

层次聚类的时间复杂度O(n^3),空间复杂度O(n^2)。n=10000时,pdist输出的Y向量有约5000万个元素,占用内存约400MB(double类型)。再大一点,普通电脑直接崩。

解决方法

  • 数据量超过5000,改用k-means聚类(MATLAB的kmeans函数)
  • 或者先对数据抽样,聚类后再映射回去
  • 升级到2026b版,据说有分布式聚类工具箱,但还没实测过

6. 完整代码模板(复制即用)

% 输入:data 为 n×p 矩阵,n个样本,p个特征% 输出:clusterLabels 为 n×1 类别向量​% 标准化data_norm = zscore(data);​% 计算距离(可选其他metric)distVec = pdist(data_norm, 'euclidean');​% 层次聚类(可选其他method)Z = linkage(distVec, 'ward');​% 评价系数(越接近1越好)c = cophenet(Z, distVec);fprintf('Cophenet系数: %.4f\n', c);​% 画谱系图(可选)figure;dendrogram(Z, 0);title('聚类树状图');​% 剪裁成k类(这里k由你决定)k = 4;clusterLabels = cluster(Z, 'maxclust', k);​% 查看每类样本数tabulate(clusterLabels)

最后总结一下  MATLAB聚类分析分一键法和分步法。分步法用pdist、linkage、cluster四个函数,灵活且可控。做之前记得标准化,选对距离和连接方式(推荐ward+欧氏距离)。数据量超过5000就别用层次聚类了,换k-means。2026年做数据挖掘,这套流程依然是最顺手的。试试跑你自己的数据,5分钟就能看到分组结果。

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空