MATLAB实现系统聚类分析数学建模算法

系统聚类(Hierarchical Clustering)是一种用于对数据进行聚类的方法,也叫层次聚类,其主要特点是通过构建层次结构的树形图(树状图或树状结构)来表示数据点之间的关系。这种层次结构可以是自上而下的划分(分裂),也可以是自下而上的合并。系统聚类方法不需要预先设定聚类的数量,而是通过构建层次结构树,形成不同层次的聚类。

系统聚类的基本思想是:

1. **开始阶段:** 将每个数据点视为一个独立的簇。

2. **迭代过程:** 通过计算数据点之间的相似性或距离,合并或分裂簇,形成新的簇。

3. **层次结构的构建:** 通过反复迭代,建立层次结构,形成树状图。

4. **划分聚类:** 可以通过设定阈值,将层次结构树划分为不同层次的簇。

系统聚类可以分为两大类:

1. **凝聚性聚类(Agglomerative Clustering):** 从底层开始,逐渐合并相似的数据点或簇,形成一个大的簇。这是一种自下而上的合并过程。

2. **分裂性聚类(Divisive Clustering):** 从顶层开始,逐渐分裂簇,形成小的簇。这是一种自上而下的划分过程。

系统聚类的常见距离度量包括欧氏距离、曼哈顿距离、切比雪夫距离等。合并或分裂的策略可以基于最小距离、最大距离、平均距离等。

系统聚类的优势在于它不需要事先确定聚类的数量,并且可以通过层次结构图直观地展示不同层次的聚类结果。然而,由于其计算复杂度较高,对于大规模数据集可能效率较低。另外,系统聚类对初始簇的选择敏感,因此可能受到初始条件的影响。

MATLAB的代码实现如下:

clc, clear, close all
a=load('anli10_1.txt');
b=zscore(a); %数据标准化
r=corrcoef(b) %计算相关系数矩阵
%d=tril(1-r); d=nonzeros(d)'; %另外一种计算距离方法
z=linkage(b','average','correlation');  %按类平均法聚类
h=dendrogram(z);  %画聚类图
set(h,'Color','k','LineWidth',1.3)  %把聚类图线的颜色改成黑色,线宽加粗
T=cluster(z,'maxclust',6)  %把变量划分成6类
for i=1:6
    tm=find(T==i);  %求第i类的对象
    fprintf('第%d类的有%s\n',i,int2str(tm')); %显示分类结果
end

结果如下:

clc,clear, close all
a = load('anli10_1.txt'); 
a(:,[3:6])=[]; %删除数据矩阵的第3列~第6列,即使用变量1,2,7,8,9,10
b=zscore(a); %数据标准化
z=linkage(b,'average');  %按类平均法聚类
h=dendrogram(z);  %画聚类图
set(h,'Color','k','LineWidth',1.3)  %把聚类图线的颜色改成黑色,线宽加粗
for k=3:5
    fprintf('划分成%d类的结果如下:\n',k)
    T=cluster(z,'maxclust',k);  %把样本点划分成k类
    for i=1:k
      tm=find(T==i);  %求第i类的对象
      fprintf('第%d类的有%s\n',i,int2str(tm')); %显示分类结果
    end
    fprintf('**********************************\n');
end

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI Dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值