1. 用Matlab编程实现

运用Matlab中的一些基本矩阵计算方法,通过自己编程实现聚类算法,在此只讨论根据最短距离规则聚类的方法。

调用函数:

min1.m——求矩阵最小值,返回最小值所在行和列以及值的大小

min2.m——比较两数大小,返回较小值

std1.m——用极差标准化法标准化矩阵

ds1.m——用绝对值距离法求距离矩阵

cluster.m——应用最短距离聚类法进行聚类分析

print1.m——调用各子函数,显示聚类结果

聚类分析算法

假设距离矩阵为vector, a阶,矩阵中最大值为max,令矩阵上三角元素等于max

聚类次数=a-1,以下步骤作a-1次循环:

求改变后矩阵的阶数,计作c

求矩阵最小值,返回最小值所在行e和列f以及值的大小g

forl=1:c,为vector(c+1,l)赋值,产生新类

令第c+1列元素,第e行和第f行所有元素为,第e列和第f列所有元素为max

源程序如下:

%std1.m,用极差标准化法标准化矩阵

function std=std1(vector)

max=max(vector);       %对列求最大值

min=min(vector);

[a,b]=size(vector);          %矩阵大小,a为行数,b为列数

for i=1:a

forj=1:b

std(i,j)= (vector(i,j)-min(j))/(max(j)-min(j));

end

end

%ds1.m,用绝对值法求距离

function d=ds1(vector);

[a,b]=size(vector);

d=zeros(a);

for i=1:a

forj=1:a

for k=1:b

d(i,j)=d(i,j)+abs(vector(i,k)-vector(j,k));

end

end

end

fprintf('绝对值距离矩阵如下:\n');

disp(d)

%min1.m,求矩阵中最小值,并返回行列数及其值

function [v1,v2,v3]=min1(vector);%v1为行数,v2为列数,v3为其值

[v,v2]=min(min(vector'));

[v,v1]=min(min(vector));

v3=min(min(vector));

%min2.m,比较两数大小,返回较小的值

function v1=min(v2,v3);

if v2>v3

v1=v3;

else

v1=v2;

end

%cluster.m,最短距离聚类法

function result=cluster(vector);

[a,b]=size(vector);

max=max(max(vector));

for i=1:a

for j=i:b

vector(i,j)=max;

end

end;

for k=1:(b-1)

[c,d]=size(vector);

fprintf('第%g次聚类:\n',k);

[e,f,g]=min1(vector);

fprintf('最小值=%g,将第%g区和第%g区并为一类,记作G%g\n\n',g,e,f,c+1);

forl=1:c

ifl<=min2(e,f)

vector(c+1,l)=min2(vector(e,l),vector(f,l));

else

vector(c+1,l)=min2(vector(l,e),vector(l,f));

end

end;

vector(1:c+1,c+1)=max;

vector(1:c+1,e)=max;

vector(1:c+1,f)=max;

vector(e,1:c+1)=max;

vector(f,1:c+1)=max;

end

%print1,调用各子函数

function print=print1(filename,a,b); %a为地区个数,b为指标数

fid=fopen(filename,'r')

vector=fscanf(fid,'%g',[a b]);

fprintf('标准化结果如下:\n')

v1=std1(vector)

v2=ds1(v1);

cluster(v2);

%输出结果

print1('fname',9,7)

2.直接调用Matlab函数实现

2.1调用函数

层次聚类法(Hierarchical Clustering)的计算步骤:

①计算n个样本两两间的距离{dij},记D

②构造n个类,每个类只包含一个样本;

③合并距离最近的两类为一新类;

④计算新类与当前各类的距离;若类的个数等于1,转到5);否则回3);

⑤画聚类图;

⑥决定类的个数和类;

Matlab软件对系统聚类法的实现(调用函数说明):

cluster                  从连接输出(linkage)中创建聚类

clusterdata              从数据集合(x)中创建聚类

dendrogram             画系统树状图

linkage                 连接数据集中的目标为二元群的层次树

pdist                 计算数据集合中两两元素间的距离(向量)

squareform             将距离的输出向量形式定格为矩阵形式

zscore                  对数据矩阵 X 进行标准化处理

各种命令解释

⑴ T =clusterdata(X, cutoff)

其中X为数据矩阵,cutoff是创建聚类的临界值。即表示欲分成几类。

以上语句等价与以下几句命令:

Y=pdist(X,’euclid’)

Z=linkage(Y,’single’)

T=cluster(Z,cutoff)

以上三组命令调用灵活,可以自由选择组合方法!

⑵ T =cluster(Z, cutoff)

从逐级聚类树中构造聚类,其中Z是由语句likage产生的(n-1)×3阶矩阵,cutoff是创建聚类的临界值。

⑶ Z = linkage(Y)           Z = linkage(Y, 'method')

创建逐级聚类树,其中Y是由语句pdist产生的n(n-1)/2 阶向量,’method’表示用何方法,默认值是欧氏距离(single)。有’complete’——最长距离法;‘average’——类平均距离;‘centroid’——重心法 ;‘ward‘——递增平方和等。

⑷ Y = pdist(X)         Y = pdist(X,'metric')

计算数据集X中两两元素间的距离, ‘metric’表示使用特定的方法,有欧氏距离‘euclid’、标准欧氏距离‘SEuclid’、马氏距离‘mahal’、明可夫斯基距离‘Minkowski‘ 等。

⑸ H = dendrogram(Z)    H =dendrogram(Z, p)

由likage产生的数据矩阵z画聚类树状图。P是结点数,默认值是30。

2.2举例说明

设某地区有八个观测点的数据,样本距离矩阵如表1所示,根据最短距离法聚类分析。

%最短距离法系统聚类分析

X=[7.90 39.77 8.49 12.94 19.27 11.05 2.04 13.29;

7.6850.37 11.35 13.3 19.25 14.59 2.75 14.87;

9.4227.93 8.20 8.14 16.17 9.42 1.55 9.76;

9.1627.98 9.01 9.32 15.99 9.10 1.82 11.35;

10.0628.64 10.52 10.05 16.18 8.39 1.96 10.81];

BX=zscore(X); %标准化数据矩阵

Y=pdist(X)   %用欧氏距离计算两两之间的距离

D=squareform(Y)  %欧氏距离矩阵

Z = linkage(Y)   %最短距离法

T = cluster(Z,3) %等价于{T=clusterdata(X,3) }

find(T==3)  %第3类集合中的元素

[H,T]=dendrogram(Z)     %画聚类图

聚类谱系图如图1所示: 图1 聚类谱

聚类分析用matlab还是spass,利用Matlab和SPSS软件实现聚类分析相关推荐

  1. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...

    matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析 课程设计任务书 学生姓名: 专业班级: 指导教师: 刘 新 华 工作单位:信息工程学院 题 目: 利用MATLAB对线性电路正弦稳态 ...

  2. 基于matlab的绘图设计,matlab课程设计---利用MATLAB仿真软件进行绘图

    matlab课程设计---利用MATLAB仿真软件进行绘图 课程设计任务书课程设计任务书 题题 目目 利用利用 MATLABMATLAB 仿真软件进行绘图仿真软件进行绘图 初始条件初始条件 仿真软件 ...

  3. matlab 多普勒效应,《利用MATLAB仿真多普勒效应.doc

    <利用MATLAB仿真多普勒效应 利用MATLAB仿真多普勒效应 某某某 摘 要:分析多普勒效应特性,建立数学模型,利用MATLAB软件对其进行仿真试验,进行定量分析,根据仿真试验结果绘制出听者 ...

  4. 【Matlab 控制】利用 Matlab Function 绘制分段函数

    利用 Switch block 利用 Matlab Function block function [mean, stdev] = fcn(vals) % #codegen% calculates a ...

  5. 多元线性回归分析matlab实验报告,利用MATLAB进行多元线性回归.ppt

    <利用MATLAB进行多元线性回归.ppt>由会员分享,可在线阅读,更多相关<利用MATLAB进行多元线性回归.ppt(15页珍藏版)>请在人人文库网上搜索. 1.2.线性回归 ...

  6. 如何使用matlab的siso,利用Matlab内建程式SISODesignTool完成系统分析(Matlab61)开启.PDF...

    利用Matlab内建程式SISODesignTool完成系统分析(Matlab61)开启.PDF 利用 Matlab 內建程式 SISO Design Tool 完成系統分析(Matlab 6.1) ...

  7. matlab segy文件,利用matlab实现segy格式数据的读写研究和分析.ppt

    利用matlab实现segy格式数据的读写研究和分析 2.SEGY数据格式 地震数据一般以地震道为单位进行组织,采用SEG-Y文件格式存储.SEG-Y格式是由SEG (Society of Explo ...

  8. matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc

    利用matlab真的BP-ANN分类器设计,ann分类器,bp神经网络分类器,bp分类器,贝叶斯分类器matlab,svm分类器matlab程序,matlab分类器,matlab分类器工具箱,soft ...

  9. matlab负荷分配程序,利用MATLAB工具箱进行机组负荷优化分配

    火电厂利用负荷优化分配算法,在全厂机组组合方式一定的情况下,根据各运行机组的煤耗特性,合理分配机组所带负荷,可以使全厂总的煤耗量最小[1],从国内外调度经验可知,热效率可提高1%~2.5%.优化算法代 ...

  10. matlab线圈磁场,利用Matlab计算螺线管内磁场分布研究.pdf

    利用Matlab计算螺线管内磁场分布研究.pdf ( ) 2010 12 688 Journal of Beijing Normal University ( Natural Science) 46( ...

最新文章

  1. Zabbix 3.0 从入门到精通(zabbix使用详解)
  2. Latex使用技巧01:改变数学公式字体的颜色
  3. 分布式任务队列 Celery — 详解工作流
  4. 突发!吴恩达确诊新冠,46岁生日还有不到3个月
  5. NKU两题简单题解析(递归分析与位运算技巧)
  6. leetcode53. 最大子数组和(动态规划)
  7. 如何写一个脚本语言_零基础小白如何学会写文案?文案写作技巧之一:如何写一个吸引读者的文案开头...
  8. iOS开发出错whose view is not in the window hierarchy!的解决
  9. 演练 网站的头部导航栏的制作 1014 HTML
  10. UI自动化,你值得拥有
  11. 「干货」Web安全红队外围信息收集「详细总结」
  12. PHP多因子方案,多因子策略之冗余因子
  13. 大学生考华为认证有用吗?考研还是考证?这些困扰你许久的问题终于搞明白了
  14. Ubuntu 18.04 网易云音乐通过修改DPI 放大字体的方法
  15. python输入单词显示长度_Python按长度打印单词
  16. 如何克服自己的懒惰-第二弹
  17. 利用 edge的朗读功能,写一个python文本转语音的代码
  18. Python——代码界的大门之一
  19. 3.2 0.96寸OLED显示屏的使用
  20. 力扣题解-977. 有序数组的平方

热门文章

  1. yytext table html,快速掌握YYText
  2. mysql的英文字母_MYSQL中查询怎么判断一个字段包含英文?
  3. 机器人巡线算法优化方案
  4. ssdp协议 upnp_【零知ESP8266】教程:SSDP简单服务发现协议示例
  5. LSB图像隐写和峰值信噪比计算的python实现
  6. android文件读取文件内容,android创建txt文件,读取txt文件内容
  7. C语言头文件里可以写些什么
  8. 入门OJ 1256【排队】
  9. Mac下一款好用的UML图绘制工具(StarUML)
  10. 关于RJ45 网线接线问题