(一)   引言:

“物以类聚,人以群分”,聚类分析作为一种重要的多元统计方法,广泛地应用于自然科学、社会科学、工农业生产的各个领域。本文仅以一个案例讲述在利用MATLAB软件实现聚类分析时所使用的函数以及聚类的方法和过程。

(二)案例重述:

我们对苏州所辖张家港市2003年七条河流中的主要污染因子(指标),即CODmn,BOD5,非离子氨,氨氮,挥发酚,石油类共6个变量(资料见下表,来源于张家港市2003年环境质量报告书),进行聚类分析。

河流

CODmn

BOD5

非离子氨

氨氮

挥发酚

石油类

张家港河

3.14

8.41

23.78

25.79

4.17

6.47

二干河

5.47

9.57

26.48

23.79

6.42

6.58

东横河

3.1

4.31

21.2

22.48

5.34

6.54

横套河

5.67

9.54

10.23

20.87

4.2

6.8

四干河

6.81

9.05

16.18

24.56

5.2

5.45

华妙河

6.21

7.08

21.05

31.56

6.15

8.21

盐铁塘

4.87

8.97

26.54

34.56

5.58

8.07

(三)函数解释:

1)  pdist函数

调用格式:Y=pdist(X,’metric’)

说明:用‘metric’指定的方法计算 X 数据矩阵中对象之间的距离。

metric’取值如下:

‘euclidean’:  欧氏距离(默认);  ‘seuclidean’:标准化欧氏距离;

‘mahalanobis’:马氏距离;         ‘cityblock’:  洛克距离;

‘minkowski’: 明可夫斯基距离;

X是一个m×n的矩阵,Y是一个长为m(m–1)/2的行向量.

可以这样理解 Y的生成:首先生成一个 X 的距离方阵,由于该方阵是对称的,且对角线上的元素为0,所以取此方阵的下三角元素,按照Matlab中矩阵的按列存储原则,此下三角各元素的索引排列即为(2,1), (3,1),..., (m,1), (3,2), ..., (m,2), ..., (m,m–1).

2) squareform函数

调用格式:D=squareform(Y)
说明:  强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。将pdist函数生成的行向量转化为方阵,其中 t(i,j)表示第 i个样本与第 j个样本之的距离,对角线均为 0.

3) linkage函数

调用格式:Z=linkage(Y,’method’)

说 明:用‘method’参数指定的算法计算系统聚类树。

method:可取值如下:

‘single’:最短距离法(默认); ‘complete’:最长距离法;

‘average’:未加权平均距离法;‘weighted’: 加权平均法;

‘centroid’:质心距离法;     ‘median’:加权质心距离法;

‘ward’:内平方距离法(最小方差算法)

其中Y是pdist函数返回的距离向量;

返回:Z为一个包含聚类树信息的(m-1)×3的矩阵。其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了m个样本以外,对于每次新产生的类,依次用 m+1、 m+2、 …来标识。

4) dendrogram函数

调用格式:[H,T,…]=dendrogram(Z,p,…)

说明:生成只有顶部p个节点的冰柱图(谱系图)。

5) cluster函数

调用格式:T=cluster(Z,…)

说明:根据linkage函数的输出Z 创建分类。

(四)聚类方法及过程:

Ø Step1: 数据无量纲化

在多元统计分析中,各个指标由于计量单位和数量级不尽相同,从而使得各指标间不具有综合性,不能直接进行综合分析,这时就必须采用某种方法对各指标数值进行无量纲化处理,解决各指标数值不可综合性问题。消除量纲影响的方法有多种,在本案例的程序中采用的是标准差化方法,即每一变量值分别处以该变量的标准差,此外,还可以采用标准化方法(可以直接调用zscore函数)、均值化方法等。

ØStep2:寻找变量之间的相似性

利用pdist函数计算样本之间的距离,本案例中默认为欧氏距离,pdist生成一个 7*(7-1)/2个元素的行向量,分别表示 7个样本两两间的距离。

D(2,1)=3.1688;

D(3,1)=2.6754;

D(4,1)=3.1361;

D(5,1)=3.2909;

D(6,1)=3.8705;

D(7,1)=3.1923;

D(3,2)=3.5882;

D(4,2)=3.8141;

D(5,2)=2.7127;

D(6,2)=2.8664;

D(7,2)=2.8693;

D(4,3)=4.0272;

D(5,3)=3.8880;

D(6,3)=3.7359;

D(7,3)=4.1058;

D(5,4)=2.3515;

D(6,4)=4.1167;

D(7,4)=4.4553;

D(6,5)=3.6402;

D(7,5)=4.0572;

D(7,6)=1.8834;

利用squareform函数,将上面的数据转化为方阵,同时,为了使对应关系更为直观,将方阵转化为下面的表格:

七条河流个体间欧氏距离的相似矩阵

案例

1:张家港河

2:二干河

3:东横河

4:横套河

5:四干河

6:华妙河

7:盐铁塘

1:张家港河

0

3.1688

2.6754

3.1361

3.2909

3.8705

3.1923

2:二干河

3.1688

0

3.5882

3.8141

2.7127

2.8664

2.8693

3:东横河

2.6754

3.5882

0

4.0272

3.8880

3.7359

4.1058

4:横套河

3.1361

3.8141

4.0272

0

2.3515

4.1167

4.4553

5:四干河

3.2909

2.7127

3.8880

2.3515

0

3.6402

4.0572

6:华妙河

3.8705

2.8664

3.7359

4.1167

3.6402

0

1.8834

7:盐铁塘

3.1923

2.8693

4.1058

4.4553

4.0572

1.8834

0

Ø Step3 :定义变量之间的连接

样本6与样本7的距离最小(为1.8834),在层次聚类中将首先聚到一起形成一个新的小类记为第8类。接着,样本4与样本5聚到一起形成一个新的小类记为第9类。然后,样本1与样本3聚聚类顺序到一起形成一个新的小类记为第10类。样本2与第8,9,10类的最短欧氏距离依次为2.8664, 2.7127,3.1688,故接下来样本2会与第9类聚到一起形成一个新的小类记为第11类。样本6,7到样本1,2,3,4,5的最短距离是D(6,2)=2.8664,故样本2,4,5,6,7聚到一起,即第8类与第11类聚到一起成为第12类。样本1,3到样本2,4,5,6,7的最短距离是D(4,1)=3.1361,故1,2,3,4,5,6,7聚到一起,即第10类与第12类聚到一起。执行命令z=linkage(y)得到下面的结果:

z =

6.0000    7.0000    1.8834

4.0000    5.0000    2.3515

1.0000    3.0000    2.6754

2.0000    9.0000    2.7127

8.0000    11.0000    2.8664

10.0000   12.0000   3.1361

Ø Step4 创建聚类,并作出谱系图

聚类顺序

顺序

聚在一起的两类

最短距离

1

6

7

1.8834

2

4

5

2.3515

3

1

3

2.6754

4

2

9

2.7127

5

8

11

2.8664

6

10

12

3.1361

聚类谱系图


由该谱系图可以看出:

①       如果将样本分为4类,则样本1,3是一类,样本4,5是一类,样本6,7是一类,样本2单独一类

②       如果将样本分为3类,则样本1,3是一类,样本2,4,5是一类,样本6,7是一类

③       如果将样本分为2类,则样本1,3是一类,样本2,4,5,6,7是一类

④       最终所有的样本聚为一类。

(五)结论与评价:

从谱系图可以看出,七条河流中,二干河、横套河、四干河属于一类,污染较重,主要是CODmn、COD5超标多;花妙河、盐铁塘属于一类,污染一般,主要是氨氮、石油类超标;张家港河、东横河属于一类,污染较轻,总的来说,各河流都存在不同程度的污染,因此全市应对各河流严格监督管理,着力实施水污染防治工作,太湖流域水污染源应限期治理达标排放,巩固水污染防治工作成果,加大投入,新建或改、扩建废水治理工程,确保达标排放。

[参考资料]

[1].薛薇.统计分析与SPSS的应用.北京:中国人民大学出版社

[2]道客巴巴:http://www.doc88.com/p-17430638739.html

[3]道客巴巴:http://www.doc88.com/p-6905538103698.html

附录:MATLAB程序及运算结果

x =

3.1400    8.4100  23.7800   25.7900    4.1700   6.4700

5.4700    9.5700  26.4800   23.7900    6.4200   6.5800

3.1000    4.3100  21.2000   22.4800    5.3400   6.5400

5.6700    9.5400  10.2300   20.8700    4.2000   6.8000

6.8100    9.0500  16.1800   24.5600    5.2000   5.4500

6.2100    7.0800  21.0500   31.5600    6.1500   8.2100

4.8700    8.9700  26.5400   34.5600    5.5800   8.0700

>> [m,n]=size(x)

m =7

n =6

>> stdr=std(x)

stdr =1.4426    1.8880   5.8791    4.9921    0.8712   0.9669

>> xx=x./stdr(ones(m,1),:)

xx =

2.1767    4.4545   4.0449    5.1662    4.7867   6.6913

3.7918    5.0689   4.5041    4.7655    7.3694   6.8050

2.1489    2.2829   3.6060    4.5031    6.1297   6.7636

3.9305    5.0530   1.7401    4.1806    4.8211   7.0325

4.7207    4.7935   2.7521    4.9198    5.9690   5.6364

4.3048    3.7500   3.5805    6.3220    7.0595   8.4908

3.3759    4.7511   4.5143    6.9229    6.4052   8.3460

>> y=pdist(xx)

y=

[3.1688,2.6754,3.1361,3.2909,3.8705,3.1923,3.5882,3.8141,2.7127,  2.8664,2.8693,4.0272,3.8880,3.7359,4.1058,2.3515,4.1167,4.4553    3.6402,4.0572,1.8834]

>> g=squareform(y)

g =

0         3.1688      2.6754      3.1361      3.2909     3.8705    3.1923

3.1688    0           3.5882      3.8141       2.7127    2.8664     2.8693

2.6754     3.5882      0          4.0272      3.8880     3.7359     4.1058

3.1361     3.8141      4.0272     0            2.3515      4.1167    4.4553

3.2909     2.7127      3.8880      2.3515      0          3.6402     4.0572

3.8705     2.8664      3.7359      4.1167      3.6402     0          1.8834

3.1923     2.8693      4.1058      4.4553      4.0572     1.8834    0

>> z=linkage(y)

z =

6.0000    7.0000   1.8834

4.0000    5.0000   2.3515

1.0000    3.0000   2.6754

2.0000    9.0000   2.7127

8.0000   11.0000   2.8664

10.0000   12.0000   3.1361

>> h= dendrogram(z)

h =

173.0011

175.0011

176.0011

177.0011

178.0011

179.0011

>>  t=cluster(z,4)

t =[4,1,4,2,2,3,3]’

>> t=cluster(z,3)

t =[3,2,3,2,2,1,1]’

>> t=cluster(z,2)

t =[1,2,1,2,2,2,2]’

MATLAB在聚类分析中的应用相关推荐

  1. 聚类分析在SPSS、Matlab与R中的实现(转载: Liu Xuhua 机会的数学 )

    原文:https://mp.weixin.qq.com/s/1aBlwX11cBxw0sxONaHJRQ 笔记:修改后代码 ① a<-scan() 7.90 39.77  8.49 12.94 ...

  2. 猫群算法matlab实现,猫群算法仿生计算在图像聚类分析中的应用

    摘  要: 针对传统优化算法在图像聚类分析中存在的复杂度高.容易陷入局部最优解的问题,提出了使用猫群算法求解图像聚类问题.该算法通过分组和混合策略的机制进行信息传递,用猫记忆当前群体中的全局最优解来更 ...

  3. matlab 自定义距离函数,用MATLAB做聚类分析时非常有用的自定义距离函数和标准化函数...

    聚类分析中,经常遇到观测值缺失的情况. 例如统计历史降水资料时,某个月的资料缺失了,这时用MATLAB做聚类分析时, 就需要自定义距离函数,处理nan的问题. 下面是相关的MATLAB函数,里面有例子 ...

  4. MATLAB层次聚类分析

    实验题目 给出六个民族的出生死亡率,和他们的平均寿命,如下表所示 出生死亡率(%) 平均寿命 1 5.80 70.59 2 7.44 67.14 3 8.11 65.48 4 10.21 58.88 ...

  5. matlab获取目录中图像名称及路径的递归实现

    一个matlab获取目录中图像名称及路径的递归实现~ matlab源文件 getImageList.m [c-sharp] view plaincopyprint? function [ imageL ...

  6. matlab从图表中提取数据

    有如下的波形图,如何从中精确提取出全部的数据: 1,将波形图片(截图)保存为test.png或test.jpg,并将图片放于matlab工作目录中,如下图示例所指定的目录中: 2,新建文件,输入如下程 ...

  7. Matlab去掉数组中0

    n = 0; a(a==n) = []; 当然n可以改成任意值,即Matlab去掉数组中的任意值,感觉比find函数还简单. 猜你喜欢:

  8. 转载:如何将一个新函数加到MATLAB函数库中

    如何将一个新函数加到MATLAB函数库中 nkszjx2 2017-09-29 11:25:26 13864 收藏 2 分类专栏: matlab 文章标签: matlab 库 </div> ...

  9. MATLAB的GUI中给坐标轴四周加上边框

    在MATLAB的GUI中如何为坐标轴四边加上方框,效果如下图: 首先打开一个GUI文件,建立一个坐标轴,如下图所示: 双击该坐标轴,在弹出的检查器中,在Box那一栏后面勾上,如下图所示: 此时坐标轴四 ...

最新文章

  1. MATLAB_11-图像特征
  2. Foundation 框架 归档
  3. mysql 之mvcc多版本控制
  4. Ubuntu 20.10 安装 fcitx5 输入法
  5. cannot read prpperty ‘start‘ of undefined(问题记录)
  6. access 如果删除相同行-转 sqlite也可
  7. 两表查询很慢mysql_影响mysql性能的方面
  8. 用python编写一个弹球游戏
  9. 教你快速将多个TXT文档合并成一个
  10. vue3.0 关闭 eslint
  11. java自习_java自习重点及自测
  12. 查询vue版本、脚手架版本
  13. 用C语言打印一个金字塔
  14. 叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应
  15. 解决ubuntu20.04下vi编辑器方向键和退格键问题
  16. 固态硬盘数据丢失了该怎么办
  17. 逻辑电路复杂?我们用Logisim一键解决
  18. 你有什么道理后悔没早点知道
  19. python幂指数_幂指数 python
  20. 驾驶证上的照片有具体要求吗?这几点需要注意

热门文章

  1. <map>标签与<area>标签实例
  2. 超级使用体验==笔记本电脑+机械键盘(合体)敲击咔咔咔
  3. 计算机状态oxcoooooe9,win7 system文件损坏修复办法
  4. 计算机网络 计算可分配的主机地址
  5. Linux.centos系统mysql5.7.31安装教程
  6. 4.5.5 路由器的构成
  7. Dev c++实现摩斯密码
  8. 记账方法,如何记录借款信息,并将支出记录标记上颜色
  9. python AttributeError: module 'pygame' has no attribute 'display'
  10. 小孩喜欢边玩边吃饭怎么办