【matlab小白训练】凝聚层次聚类分析

  马上就要数学建模国赛了,趁还有几天整理一下代码,到时候方便自己使用。主要参考司守奎的《数学建模算法与应用》,matlab是2020版本。


目录 

    本例主要摘自司守奎《数学建模算法与应用》第3版p271页的例题,数据取了前9行,所以结果会和书里的不大一样,到时候跟据题目修改自己需要的数据即可。

    简单说明一下聚类分析,聚类分析又称群分析,聚类分析分为Q型聚类分析和R型聚类分析。其中,Q型聚类分析是对样本进行分类;R型聚类分析是对指标进行分类。


一、数据

下表数据就是等会matlab需要用的data。

地区x1x2x3x4x5x6x7x8x9x10
北京5.96310461155793131944.3626152.213631
上海3.39234308103549816135.0230520.912665
天津2.351572297139510938.430310.869385
陕西1.35811113641505830.4526991.227881
辽宁1.5881284211445834.328080.547733
吉林1.67861203701535833.5322150.767480
黑龙江1.1761932961174435.2225280.588570
湖北1.0567922971154332.8928350.667262
江苏0.9564942871023931.5430080.397786

二、R型聚类

代码

%R型聚类
a=data;
b=zscore(a);                               %数据标准化
r=corrcoef(b);                             %计算相关系数矩阵
%d=(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);
    fprintf('第%d类的有%s\n',i,int2str(tm'));
end

结果

第1类的有10
第2类的有1  2  3  4  6
第3类的有5
第4类的有7
第5类的有9
第6类的有8


三、Q型聚类

代码

%Q型聚类
a=data;
a(:,[3:6])=[];                      %根据自己情况选择需要的指标,本例只需要x1,x2,x7,x8,x9,x10
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);
    for i = 1:k
        tm=find(T==i);%求第i类的对象
        fprintf('第%d类的有%s\n',i,int2str(tm'));    %显示分类结果
    end
    fprintf('**********************\n');
end

结果

划分成3类的结果如下:
第1类的有2  3
第2类的有4  5  6  7  8  9
第3类的有1
**********************
划分成4类的结果如下:
第1类的有6  7
第2类的有4  5  8  9
第3类的有2  3
第4类的有1
**********************
划分成5类的结果如下:
第1类的有2
第2类的有3
第3类的有6  7
第4类的有4  5  8  9
第5类的有1
**********************

  • 1
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值