• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数模学习7聚类老哥

武飞扬头像
ChristianLuu
帮助1

一、什么是聚类分析

聚类是一个将数据集划分为若干组(class)或类(cluster)的的过程,并使得同一个组内的数据对象具有较高的相识度;而不同组中的数据对象是不相似的。

1、相似或不相似是基于数据描述属性的取值来确定的,通常利用各数据对象间的距离来表示。
2、剧烈分析尤其是和用来探讨样本间的相互关联关系从而对一个样本结构做一个初步的评价。

聚类与分类的区别

1)聚类是一种无监督的学习方法。其不依赖于事先确定的数据类别,以及标有数据类别的学习训练样本集合。
2)聚类是观察式学习,不是示例式学习。

什么是好的聚类

聚类结果质量依靠所使 用度量的相似性和它的执行。
好的聚类方法产生以下的高聚类:
1)最大化类内的相似性
2)最小化类间的相似性

两种聚类分析

一种是对样品的分类————Q类
一种是对变量(指标)的分类——R型~常用的统计量是距离

二、样品间的相似度量——距离

常用距离定义

学新通

几种距离

学新通
学新通

✨实战例题

学新通

✍MATLAB代码

 a=[7.9 39.77 8.49 12.94 19.27 11.05 2.04 13.29
7.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87
9.42 27.93 8.2 8.14 16.17 9.42 1.55 9.76
9.16 27.98 9.01 9.32 15.99 9.1 1.82 11.35
10.06 28.64 10.52 10.05 16.18 8.39 1.96 10.81];
d1=pdist(a);				% 此时计算出各行之间的欧氏距离,
D= squareform(d1)			% 注意此时d1必须是一个行向量,结果是实对称矩阵
S=tril(squareform (d1))		% 得到书中的三角阵

同理:
d2=pdist(a,'cityblock');	% 此时计算出各行之间的绝对距离,
S2=tril(squareform(d2))

d3=pdist(a,'minkowski',3);	% 此时计算出各行之间的明氏距离,
S3=tril(squareform(d3))

结果如下

d1 =

   11.6726   13.8054   13.1278   12.7983   24.6353   24.0591   23.5389    2.2033    3.5037    2.2159

D =

         0   11.6726   13.8054   13.1278   12.7983
   11.6726         0   24.6353   24.0591   23.5389
   13.8054   24.6353         0    2.2033    3.5037
   13.1278   24.0591    2.2033         0    2.2159
   12.7983   23.5389    3.5037    2.2159         0

S =

         0         0         0         0         0
   11.6726         0         0         0         0
   13.8054   24.6353         0         0         0
   13.1278   24.0591    2.2033         0         0
   12.7983   23.5389    3.5037    2.2159         0

d2 =

   19.8900   27.2000   24.5800   26.5200   47.0500   43.3900   42.3100    4.6600    8.0800    5.3800

S2 =

         0         0         0         0         0
   19.8900         0         0         0         0
   27.2000   47.0500         0         0         0
   24.5800   43.3900    4.6600         0         0
   26.5200   42.3100    8.0800    5.3800         0

d3 =

   10.8098   12.2808   12.0241   11.4086   22.7511   22.6032   21.9971    1.8440    2.8187    1.7515

S3 =

         0         0         0         0         0
   10.8098         0         0         0         0
   12.2808   22.7511         0         0         0
   12.0241   22.6032    1.8440         0         0
   11.4086   21.9971    2.8187    1.7515         0

学新通

三、变量间的相似度量——相似系数

学新通

①夹角余弦

学新通

②相关系数

学新通

✨实战例题

学新通

✍MATLAB代码

 R=corrcoef(a);		%指标之间的相关系数
 a1=normc(a);		%将a的各列转化为单位向量
 J=a1'*a1			%计算a中各列之间的夹角余弦

结果如下

R =

    1.0000   -0.8946   -0.1555   -0.8466   -0.9320   -0.8810   -0.7005   -0.8989
   -0.8946    1.0000    0.5475    0.9103    0.9246    0.9730    0.9210    0.9572
   -0.1555    0.5475    1.0000    0.4758    0.2748    0.5145    0.8134    0.5404
   -0.8466    0.9103    0.4758    1.0000    0.9500    0.7955    0.8526    0.9545
   -0.9320    0.9246    0.2748    0.9500    1.0000    0.8456    0.7534    0.9096
   -0.8810    0.9730    0.5145    0.7955    0.8456    1.0000    0.8826    0.9006
   -0.7005    0.9210    0.8134    0.8526    0.7534    0.8826    1.0000    0.9231
   -0.8989    0.9572    0.5404    0.9545    0.9096    0.9006    0.9231    1.0000

a1 =

    0.3974    0.4932    0.3959    0.5290    0.4941    0.4601    0.4422    0.4890
    0.3863    0.6247    0.5292    0.5437    0.4936    0.6074    0.5961    0.5471
    0.4738    0.3464    0.3823    0.3327    0.4146    0.3922    0.3360    0.3591
    0.4608    0.3470    0.4201    0.3810    0.4100    0.3789    0.3945    0.4176
    0.5060    0.3552    0.4905    0.4108    0.4149    0.3493    0.4249    0.3977

J =

    1.0000    0.9410    0.9847    0.9613    0.9824    0.9546    0.9620    0.9695
    0.9410    1.0000    0.9782    0.9939    0.9853    0.9977    0.9947    0.9935
    0.9847    0.9782    1.0000    0.9859    0.9911    0.9840    0.9931    0.9909
    0.9613    0.9939    0.9859    1.0000    0.9944    0.9919    0.9947    0.9981
    0.9824    0.9853    0.9911    0.9944    1.0000    0.9901    0.9901    0.9968
    0.9546    0.9977    0.9840    0.9919    0.9901    1.0000    0.9952    0.9953
    0.9620    0.9947    0.9931    0.9947    0.9901    0.9952    1.0000    0.9968
    0.9695    0.9935    0.9909    0.9981    0.9968    0.9953    0.9968    1.0000
学新通

四、类间距离

学新通
学新通
学新通
学新通

谱系聚类法

步骤👇

学新通

✍MATLAB实现

  1. 输入数据矩阵,注意行与列的实际意义
  2. 计算各样品间的距离
  3. 选择不同的类间距离进行聚类
    学新通
  4. 做出谱系聚类图 H=dendrogram( z , d ) %注意若样本少于30,可以省去d,否则必须填写
  5. 根据分类数目,输出聚类结果
    T=cluster( z , k ) %注意k是分类数目
    Find( T == k0 ) %找出属于第k0类的样品编号

✨实战例题

学新通
学新通
学新通

学新通
学新通

✍MATLAB代码:

五种类间距离聚类
z1=linkage(d1);
z2=linkage(d1,'complete');
z3=linkage(d1,'average');
z4=linkage(d1,'centroid');
z4=linkage(d1,'ward');

结果如下👇

z1 =

    3.0000    4.0000    2.2033		%在2.2033的水平,G3、G4合成一类为G6
    5.0000    6.0000    2.2159		%在2.2159的水平,G5、G6合成一类为G6
    1.0000    2.0000   11.6726		%在11.6726的水平,G1、G2合成一类为G6
    7.0000    8.0000   12.7983		%在12.7983的水平,G7、G8合成一类为G6

z2 =

    3.0000    4.0000    2.2033
    5.0000    6.0000    3.5037
    1.0000    2.0000   11.6726
    7.0000    8.0000   24.6353

z3 =

    3.0000    4.0000    2.2033
    5.0000    6.0000    2.8598
    1.0000    2.0000   11.6726
    7.0000    8.0000   18.6608

z4 =

    3.0000    4.0000    2.2033
    5.0000    6.0000    3.1367
    1.0000    2.0000   11.6726
    7.0000    8.0000   28.6180
学新通

做谱系聚类图

H=dendrogram(z1)

得到下图👇
学新通
输出分类结果

T=cluster(z1,3)

也就是说,若分成3类:辽宁分为1类,浙江分为1类,河南甘肃青海分为1类。

K-平均聚类算法

K-means算法以K为参数,把n个对象分为k个簇,以使簇内对象具有较高的相似度,而簇间的相似度较低。
【相似度的计算根据一个簇中对象的平均值(被看做簇的重心)来进行。】

输入:聚类个数k,以及包含n个数据对象的数据库
输出:满足方差最小标准的k个聚类

处理流程学新通

特点

学新通

✍MATLAB代码演示

>> x=[0 1 0 1 2 1 2 3 6 7 8 6 7 8 9 7 8 9 8 9;0 0 1 1 1 2 2 2 6 6 6 7 7 7 7 8 8 8 9 9];
figure(1)
plot(x(1,:),x(2,:),'r*')    %横轴为第一行所有列,纵轴为第二行所有列,红色星号表示
%%第一步选取聚类中心,即令k=2
Z1=[x(1,1);x(2,1)];
Z2=[x(1,2);x(2,2)];      %聚类中心为z1(0,0),z2(0,1)
R1=[];
R2=[];            %分为两个聚类,用于存储成员
t=1;
K=1;%记录迭代的次数
dif1=inf;         %inf为正无穷
dif2=inf;
%%第二步计算各点与聚类中心的距离
%(inf表示最大值,eps表示最小值)只要两次聚类中心不等构成无限循环
while(dif1>eps&dif2>eps)
for i=1:20
dist1=sqrt((x(1,i)-Z1(1)).^2 (x(2,i)-Z1(2)).^2);
dist2=sqrt((x(1,i)-Z2(1)).^2 (x(2,i)-Z2(2)).^2);
temp=[x(1,i),x(2,i)]';
if dist1<dist2
R1=[R1,temp];
else
R2=[R2,temp];
end
end
Z11=mean(R1,2);     %mean(A,2)包含每一行的平均值的列向量(对行求平均值)
Z22=mean(R2,2);     %得到新的聚类中心
t1=Z1-Z11;          %测试两次是不是相等,可以有多种方法这里只简单列举一种
t2=Z2-Z22;
dif1=sqrt(dot(t1,t1));   %dot两个向量的点积
dif2=sqrt(dot(t2,t2));
Z1=Z11;
Z2=Z22;
K=K 1;
R1=[];
R2=[];
end
hold on
plot([Z1(1),Z2(1)],[Z1(2),Z2(2)],'g ')     %最终得到的聚类中心用绿色加号
学新通

结果如下👇
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhghfhgb
系列文章
更多 icon
同类精品
更多 icon
继续加载