利用Matlab和SPSS软件实现聚类分析

利用Matlab和SPSS软件实现聚类分析
利用Matlab和SPSS软件实现聚类分析

利用Matlab和SPSS软件实现聚类分析

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

for l=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

for j=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

for j=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);

for l=1:c

if l<=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个样本两两间的距离{d ij},记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.68 50.37 11.35 13.3 19.25 14.59 2.75 14.87;

9.42 27.93 8.20 8.14 16.17 9.42 1.55 9.76;

9.16 27.98 9.01 9.32 15.99 9.10 1.82 11.35;

10.06 28.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 聚类谱系图

3.用SPSS软件实现聚类分析

在SPSS软件中同样可以实现该算法,

例如:下表是1999年中国省、自治区的城市规模结构特征的一些数据,可通过聚类分析将这些省、自治区进行分类,具体过程如下:

省、自治区首位城市规模(万

人)

城市首位度四城市指数基尼系数

城市规模中位值(万

人)

京津冀699.70 1.437 10.936 40.780 410.880山西179.46 1.898 2 1.000 60.587 011.780内蒙古111.13 1.418 00.677 20.515 817.775辽宁389.60 1.918 20.854 10.576 226.320吉林211.34 1.788 0 1.079 80.456 919.705黑龙江259.00 2.305 90.341 70.507 623.480苏沪923.19 3.735 0 2.057 20.620 822.160浙江139.29 1.871 20.885 80.453 612.670安徽102.78 1.233 30.532 60.379 827.375福建108.50 1.729 10.932 50.468 711.120江西129.20 3.245 4 1.193 50.451 917.080山东173.35 1.001 80.429 60.450 321.215河南151.54 1.492 70.677 50.473 813.940湖北434.467.132 8 2.441 30.528 219.190湖南139.29 2.350 10.836 00.489 014.250广东336.54 3.540 7 1.386 30.402 022.195广西96.12 1.228 80.638 20.500 014.340海南45.43 2.191 50.864 80.413 68.730

川渝365.01 1.680 1 1.148 60.572 018.615

云南146.00 6.633 3 2.378 50.535 912.250

贵州136.22 2.827 9 1.291 80.598 410.470

西藏11.79 4.151 4 1.179 80.611 87.315

陕西244.04 5.119 4 1.968 20.628 717.800

甘肃145.49 4.751 5 1.936 60.580 611.650

青海61.368.269 50.859 80.809 87.420

宁夏47.60 1.507 80.958 70.484 39.730

新疆128.67 3.853 5 1.621 60.490 114.470

(1)打开数据文件,在spss中可以打开多种类型的文件,如*.xls、*.dbf、*.txt、*.sav等,

File→Open→Data;

(2)进行聚类分析:Analyze→Classify→Hierarchical Cluster(此例子中用层次聚类法);

进入如下对话框,设置聚类变量,以及采用的聚类方法,是否显示聚类谱系图等(因为采用不同的聚类方法,分类结果不同)。

设置完成后,即可得到聚类结果,此例子中采用欧式距离计算样本之间各变量的距离,组平均法聚类,得到的聚类谱系图如下图所示:

matlab、lingo程序代码14-模糊聚类(聚类分析)

模糊聚类 function c=fuz_hc(a,b) %模糊矩阵的合成运算程序 %输入模糊矩阵a,b,输出合成运算结果c m=size(a,1);n=size(b,2);p=size(a,2); %错误排除 if size(a,2)~=size(b,1) disp('输入数据错误!');return; end %合成运算 for i=1:m for j=1:n for k=1:p temp(k)=min(a(i,k),b(k,j)); end c(i,j)=max(temp); end end disp('模糊矩阵a与b作合成运算后结果矩阵c为:'); c % 求模糊等价矩阵 function r_d=mhdj(r) [m,n]=size(r); for i=1:n for j=1:n for k=1:n r1(i,j,k)=min(r(i,k),r(k,j)); end r1max(i,j)=r1(i,j,1); end end for i=1:n for j=1:n for k=1:n

if r1(i,j,k)>r1max(i,j) r1max(i,j)=r1(i,j,k); end end r_d(i,j)=r1max(i,j); end end %模糊聚类程序 function f=mujl(x,lamda) %输入原始数据以及lamda的值 if lamda>1 disp('error!') %错误处理 end [n,m]=size(x); y=pdist(x); disp('欧式距离矩阵:'); dist=squareform(y) %欧氏距离矩阵 dmax=dist(1,1); for i=1:n for j=1:n if dist(i,j)>dmax dmax=dist(i,j); end end end disp('处理后的欧氏距离矩阵,其特点为每项元素均不超过1:'); sdist=dist/dmax %使距离值不超过1 disp('模糊关系矩阵:'); r=ones(n,n)-sdist %计算对应的模糊关系矩阵 t=mhdj(r); le=t-r; while all(all(le==0)==0)==1 %如果t与r相等,则继续求r乘以r r=t; t=mhdj(r); le=t-r;

聚类分析Matlab程序实现

2. Matlab程序 2.1 一次聚类法 X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900]; T=clusterdata(X,0.9) 2.2 分步聚类 Step1 寻找变量之间的相似性 用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore 函数进行标准化。 X2=zscore(X); %标准化数据 Y2=pdist(X2); %计算距离 Step2 定义变量之间的连接 Z2=linkage(Y2); Step3 评价聚类信息 C2=cophenet(Z2,Y2); //0.94698 Step4 创建聚类,并作出谱系图 T=cluster(Z2,6); H=dendrogram(Z2); Matlab提供了两种方法进行聚类分析。 一种是利用 clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用 linkage函数定义变量之间的连接;(3)用 cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。 1.Matlab中相关函数介绍 1.1 pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算 X 数据矩阵中对象之间的距离。’ X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2 squareform函数 调用格式:Z=squareform(Y,..) 说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3 linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量;

MATLAB实现FCM 聚类算法

本文在阐述聚类分析方法的基础上重点研究FCM 聚类算法。FCM 算法是一种基于划分的聚类算法,它的思想是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小。最后基于MATLAB实现了对图像信息的聚类。 第 1 章概述 聚类分析是数据挖掘的一项重要功能,而聚类算法是目前研究的核心,聚类分析就是使用聚类算法来发现有意义的聚类,即“物以类聚” 。虽然聚类也可起到分类的作用,但和大多数分类或预测不同。大多数分类方法都是演绎的,即人们事先确定某种事物分类的准则或各类别的标准,分类的过程就是比较分类的要素与各类别标准,然后将各要素划归于各类别中。确定事物的分类准则或各类别的标准或多或少带有主观色彩。 为获得基于划分聚类分析的全局最优结果,则需要穷举所有可能的对象划分,为此大多数应用采用的常用启发方法包括:k-均值算法,算法中的每一个聚类均用相应聚类中对象的均值来表示;k-medoid 算法,算法中的每一个聚类均用相应聚类中离聚类中心最近的对象来表示。这些启发聚类方法在分析中小规模数据集以发现圆形或球状聚类时工作得很好,但当分析处理大规模数据集或复杂数据类型时效果较差,需要对其进行扩展。 而模糊C均值(Fuzzy C-means, FCM)聚类方法,属于基于目标函数的模糊聚类算法的范畴。模糊C均值聚类方法是基于目标函数的模糊聚类算法理论中最为完善、应用最为广泛的一种算法。模糊c均值算法最早从硬聚类目标函数的优化中导出的。为了借助目标函数法求解聚类问题,人们利用均方逼近理论构造了带约束的非线性规划函数,以此来求解聚类问题,从此类内平方误差和WGSS(Within-Groups Sum of Squared Error)成为聚类目标函数的普遍形式。随着模糊划分概念的提出,Dunn [10] 首先将其推广到加权WGSS 函数,后来由Bezdek 扩展到加权WGSS 的无限族,形成了FCM 聚类算法的通用聚类准则。从此这类模糊聚类蓬勃发展起来,目前已经形成庞大的体系。 第 2 章聚类分析方法 2-1 聚类分析 聚类分析就是根据对象的相似性将其分群,聚类是一种无监督学习方法,它不需要先验的分类知识就能发现数据下的隐藏结构。它的目标是要对一个给定的数据集进行划分,这种划分应满足以下两个特性:①类内相似性:属于同一类的数据应尽可能相似。②类间相异性:属于不同类的数据应尽可能相异。图2.1是一个简单聚类分析的例子。

数学实验05聚类分析---用matlab做聚类分析

用matlab做聚类分析 Matlab提供了两种方法进行聚类分析。 一种是利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法; 另一种是分步聚类:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用linkage函数定义变量之间的连接;(3)用cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。1.Matlab中相关函数介绍 1.1pdist函数 调用格式:Y=pdist(X,’metric’) 说明:用‘metric’指定的方法计算X数据矩阵中对象之间的距离。’X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。 metric’取值如下: ‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离; ‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离; ‘minkowski’:明可夫斯基距离;‘cosine’: ‘correlation’:‘hamming’: ‘jaccard’:‘chebychev’:Chebychev距离。 1.2squareform函数 调用格式:Z=squareform(Y,..)

说明:强制将距离矩阵从上三角形式转化为方阵形式,或从方阵形式转化为上三角形式。 1.3linkage函数 调用格式:Z=linkage(Y,’method’) 说明:用‘method’参数指定的算法计算系统聚类树。 Y:pdist函数返回的距离向量; method:可取值如下: ‘single’:最短距离法(默认);‘complete’:最长距离法; ‘average’:未加权平均距离法;‘weighted’:加权平均法; ‘centroid’:质心距离法;‘median’:加权质心距离法; ‘ward’:内平方距离法(最小方差算法) 返回:Z为一个包含聚类树信息的(m-1)×3的矩阵。 1.4dendrogram函数 调用格式:[H,T,…]=dendrogram(Z,p,…) 说明:生成只有顶部p个节点的冰柱图(谱系图)。 1.5cophenet函数 调用格式:c=cophenetic(Z,Y) 说明:利用pdist函数生成的Y和linkage函数生成的Z计算cophenet相关系数。 1.6cluster函数 调用格式:T=cluster(Z,…) 说明:根据linkage函数的输出Z创建分类。

完整word版,SPSS聚类分析实验报告.docx

SPSS 聚类分析实验报告 一.实验目的: 1、理解聚类分析的相关理论与应用 2、熟悉运用聚类分析对经济、社会问题进行分析、 3、熟练 SPSS软件相关操作 4、熟悉实验报告的书写 二.实验要求: 1、生成新变量总消费支出=各变量之和 2、对变量食品支出和居住支出进行配对样本T 检验,并说明检验结果 3、对各省的总消费支出做出条形图(用EXCEL做图也行) 4、利用 K-Mean法把 31 省分成 3 类 5、对聚类分析结果进行解释说明 6、完成实验报告 三.实验方法与步骤 准备工作:把实验所用数据从 Word文档复制到 Excel ,并进一步导入到 SPSS数据文件中。 分析:由于本实验中要对 31 个个案进行分类,数量比较大,用系统聚类法当然也 可以得出结果,但是相比之下在数据量较大时, K 均值聚类法更快速高效,而且准确性更高。 四、实验结果与数据处理: 1.用系统聚类法对所有个案进行聚类:

生成新变量总消费支出 =各变量之和如图所示: 2.对变量食品支出和居住支出进行配对样本 T 检验,如图所示:

得出结论: 3.对各省的总消费支出做出条形图,如图所示: 4.对聚类分析结果进行解释说明: K均值分析将这样的城市分为三类: 第一类北京、上海、广东 第二类除第一类第三类以外的 第三类天津、福建、内蒙古、辽宁、山东 第一类经济发展水平高,各项支出占总支出比重高,人民生活水平高。第二类城市位于中西部地区,经济落后,人民消费水平低。第三类城市位于中东部地区,经济发展较好。

初始聚类中心 聚类 123 食品支出7776.983052.575790.72衣着支出1794.061205.891281.25居住支出2166.221245.001606.27家庭设备及服务支出1800.19612.59972.24医疗保健支出1005.54774.89617.36交通和通信支出4076.461340.902196.88文化与娱乐服务支出3363.251229.681786.00其它商品和服务支出1217.70331.14499.30总消费支出23200.409792.6614750.02 迭代历史记录a 聚类中心内的更改 迭代123 11250.5921698.8651216.114 2416.86470.786173.731 3138.955 2.94924.819 446.318.123 3.546 5849.114319.1791362.411 6805.00415.199606.915 7161.001.72475.864 832.200.0349.483 9 6.440.002 1.185 10 1.2887.815E-5.148

MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法

MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发法。 层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成。层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。 这在MATLAB中可以通过Y=pdist(X)实现,例如 >> X=randn(6,2) X = -0.4326 1.1892 -1.6656 -0.0376 0.1253 0.3273 0.2877 0.1746 -1.1465 -0.1867 1.1909 0.7258 >> plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果把 >> Y=pdist(X) Y = Columns 1 through 14 1.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.5401 2.9568 0.2228 1.3717 1.1377 1.4790 1.0581 Column 15

2.5092 例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表X 的第1点与2-6点、第2点与3-6点,......这样的距离。那么对于M个点的数据集X,pdist之后的Y 将是具有M*(M-1)/2个元素的行向量。Y这样的显示虽然节省了内存空间,但对用户来说不是很易懂,如果需要对这些距离进行特定操作的话,也不太好索引。MATLAB中可以用squareform把Y转换成方阵形式,方阵中位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是 个对角元素为0的对称阵。 >> squareform(Y) ans = 0 1.7394 1.0267 1.2442 1.5501 1.6883 1.7394 0 1.8277 1.9648 0.5401 2.9568 1.0267 1.8277 0 0.2228 1.3717 1.1377 1.2442 1.9648 0.2228 0 1.4790 1.0581 1.5501 0.5401 1.3717 1.4790 0 2.5092 1.6883 2.9568 1.1377 1.0581 2.5092 0 这里需要注意的是,pdist可以使用多种参数,指定不同的距离算法。help pdist把。 另外,当数据规模很大时,可以想象pdist产生的Y占用内存将是很吓人的,比如X有10k个数据点,那么X占10k*8*2Bytes=160K,这看起来不算啥,但是pdist后的Y会有10k*10k/2*8Bytes=400M 。怕了把,所以,废话说在前面,用MATLAB的层次聚类来处理大规模数据,大概是很不合适的。 (2) 确定好了对象间的差异度(距离)后,就可以用Z=linkage(Y)来产生层次聚类树了。 >> Z=linkage(Y) Z = 3.0000 4.0000 0.2228 2.0000 5.0000 0.5401 1.0000 7.0000 1.0267

SPSS操作方法:聚类分析

实验指导之一 聚类分析的SPSS操作方法 系统聚类法 实验例城镇居民消费水平通常用下表中的八项指标来描述。八项指标间存在一定的线性相关。为研究城镇居民的消费结构,需将相关性强的指标归并到一起,这实际上就是对指标聚类。 实验数据表 2001年30个省。市,自治区城镇居民月平均消费数据 x1人均粮食支出(元/人) x5人均衣着商品支出(元/人) x2人均副食支出(元/人) x6人均日用品支出(元/人) x3人均烟、酒、茶支出(元/人) x7人均燃料支出(元/人) x4人均其他副食支出(元/人) x8人均非商品支出(元/人) x1x2x3x4x5x6x7x8 北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北

湖南13.23 广东 广西 海南 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 系统聚类法的SPSS操作: 1. 从数据编辑窗口点击Analyze →Classify →Hierachical Cluster , (见图1) 图1 系统聚类法 打开层次聚类法对话如图2。 图2 系统聚类法对话框 选择需要进行聚类分析的变量进入Variable框内后,在Cluster栏中选择聚类类型,SPSS有两种层次聚类方法: Cases 对样品聚类(Q型;系统默认), Variable 对指标变量聚类(R型),本例选择。 在Display栏中选择默认的输出项。 2. 点击Statistics按钮,打开对话框如图 3. 图3 Statistics对话框 Agglomeration schedule输出凝聚状态表(聚类进度表);本例选择。

matlab模糊聚类程序

3.数据标准化 (1) 数据矩阵 设论域12345678910,1112U={,,,,,,,,,,}x x x x x x x x x x x x 为被分类的对象,每个 对象又由指标123456789Y={,,,,,,,,}y y y y y y y y y 表示其性状即12345678910,1112x ={,,,,,,,,,,}i i i i i i i i i i i i i x x x x x x x x x x x x (i=1,2,…,12)于是得到原是数据矩阵 7 5 2 5 0 1 3 4 2 12 17 8 21 9 2 38 4 37 83 29 59 65 37 20 54 13 26 53 13 31 36 21 A= 23 12 18 14 178 69 112 78 104 36 94 31 47 23 25 36 11 12 11 24 6 16 101 32 53 52 86 52 41 38 94 28 6 7 8 8 2 0 3 29 169 51 58 72 49 30 48 37 146 327 91 126 92 89 69 79 29 49 93 27 54 64 24 17 23 11 49 18 7 9 5 1 2 18 3 8 ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? (2) 数据标准化 将模糊矩阵的每一个数据压缩到[0,1]上,采用平移.极差变换进行数据标准化 1i n 1i n 1i n A(i,k)-{A(i,k)}B(i,k)={A(i,k)}-{A(i,k)} min max min ≤≤≤≤≤≤ (k=1,2,…,m) 运用matlab 编程由函数F_jisjbzh.m 【见附录3.4】的标准化矩阵是 附录3.4 function [X]=F_JISjBzh(cs,X) %模糊聚类分析数据标准化变换 %X 原始数据矩阵;cs=0,不变换;cs=1,标准差变换 %cs=2,极差变换 if(cs==0) return ;end [n,m]=size(X);% 获得矩阵的行列数 if(cs==1) % 平移极差变换 for(k=1:m) xk=0; for(i=1:n) xk=xk+X(i,k);end xk=xk/n;sk=0; for(i=1:n) sk=sk+(X(i,k)-xk)^2;end sk=sqrt(sk/n);

SPSS教程-聚类分析-附实例操作

各地区各行业工资水平的分析(2009年数据) 小组成员:张艺伟、赵月、陈媛、邹莉、朱海龙、曾磊、胡瑛、候银萍 1.研究背景及意义 1.1 研究背景 工资水平是指一定区域和一定时间内劳动者平均收入的高低程度。生产决定分配,只有经济发展才能提供更多的可分配的社会产品,因此一个地区的工资水平在一定程度上反映了其经济发展的水平。 1.2 研究意义 1. 通过多元统计分析方法,探究一个地区的工资水平与其经济发展水平之间的内在联系。 2. 将平均工资水平划分为3类,分析哪些地区、哪些行业的工资水平较高,可以为大学生就业提供宏观上的方向指引。 2.数据来源与描述 2.1 数据来源——《中国劳动统计年鉴─2010》 (URL:https://www.360docs.net/doc/f88976102.html,/Navi/YearBook.aspx?id=N2011010069&floor=1###) 主编单位:国家统计局人口和就业统计司,人力资源和社会保障部规划财务司 出版社:中国统计出版社 简介:《中国劳动统计年鉴─2010》是一部全面反映中华人民共和国劳动经济情况的资料性年刊。本刊收集了2009年全国和各省、自治区、直辖市、香港特别行政区、澳门特别行政区的有关劳动统计数据。本书资料的取得形式主要有国家和部门的报表统计、行政记录和抽样调查。 2.2 数据描述 本数据集记录了全国31个省市(港、澳、台除外)的工资状况,各省市分别记录了其23个主要行业的平均工资水平,这23个主要行业包括:企业、事业、机关、金融业、制造业、建筑业、房地产业、农林牧渔业等等,具体数据格式参见图-0。

图-0 3.分析方法及原理 3.1 通过描述统计分析方法,判断哪些行业平均工资水平较高 描述统计分析方法主要是从基本统计量(诸如均值、方差、标准差、极大/小值、偏度、峰度等)的计算和描述开始的,并辅助于SPSS提供的图形功能,能够把握数据的基本特征和整体的分布特征。 在本案例中,通过比较不同行业(诸如企业、事业、机关、建筑业、制造业……)工资的均值、极大/小值,可以从总体上判断哪些行业的平均工资水平较高,哪些行业的较低。 3.2 通过聚类分析方法,判断哪些地区平均工资水平较高 聚类分析是依据研究对象的个体特征,对其进行分类的方法,分类在经济、管理、社会学、医学等领域,都有广泛的应用。聚类分析能够将一批样本(或变量)数据根据其诸多特征,按照在性质上的亲疏程度在没有先验知识的情况下进行自动分类,产生多个分类结果。类内部个体特征之间具有相似性,不同类间个体特征的差异性较大。 在本案例中,我们将采用两种方法进行聚类分析:一种是系统聚类法,另一种是K-均值法(快速聚类法)。 3.2.1系统聚类法 系统聚类法的基本原理:首先将一定数量的样本或指标各自看成一类,然后根据样本(或指标)的亲疏程度,将亲疏程度最高的两类进行合并,然后考虑合并后的类与其他类之间的亲疏程度,再进行合并。重复这一过程,直到将所有的样本(或指标)合并为一类。 系统聚类分为Q型聚类和R型聚类两种:Q型聚类是对样本进行聚类,它使具有相似特征的样本聚集在一起,使差异性大的样本分离开来;R型聚类是对变量进行聚类,它使差异性大的变量分离开来,相似的变量聚集在一起,这样就可以在相似变量中选择少数具有代表性的变量参与其他分析,实现减少变量个数、降低变量维度的目的。 在本例中进行的是Q型聚类。 类与类之间距离的计算方法主要有以下几种: (1)最短距离法(Nearest Neighbor),是指两类之间每个个体距离的最小值; (2)最长距离法(Farthest Neighbor),是指两类之间每个个体距离的最大值; (3)组间联接法(Between-groups Linkage),是指两类之间个体之间距离的平均值;

matlab实现Kmeans聚类算法

matlab实现Kmeans聚类算法 1.简介: Kmeans和应用于混合高斯模型的受限EM算法是一致的。高斯混合模型广泛用于数据挖掘、模式识别、机器学习、统计分析。Kmeans 的迭代步骤可以看成E步和M步,E:固定参数类别中心向量重新标记样本,M:固定均值只考虑(估计)了均值,而没有估计类别的方差,所以聚类的结构比较适合于特征协方差相等的类别。 Kmeans在某种程度也可以看成Meanshitf的特殊版本,Meanshift 是所以Meanshift可以用于寻找数据的多个模态(类别),利用的是梯度上升法。在06年的一篇CVPR文章上,证明了Meanshift方法是牛顿拉夫逊算法的变种。Kmeans和EM算法相似是指混合密度的形式已知(参数形式已知)情况下,利用迭代方法,在参数空间中搜索解。而Kmeans和Meanshift相似是指都是一种概率密度梯度估计的方法,不过是Kmean选用的是特殊的核函数(uniform kernel),而与混合概率密度形式是否已知无关,是一种梯度求解方式。 k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在点,也可以对高维的空间(3维,4维,等等)的点进行聚类,任意高维的空间都可以。 上图中的彩色部分是一些二维空间点。上图中已经把这些点分组了,并使用了不同的颜色对各组进行了标记。这就是聚类算法要做的事情。 这个算法的输入是: 1:点的数据(这里并不一定指的是坐标,其实可以说是向量)

2:K,聚类中心的个数(即要把这一堆数据分成几组) 所以,在处理之前,你先要决定将要把这一堆数据分成几组,即聚成几类。但并不是在所有情况下,你都事先就能知道需要把数据聚成几类的。意味着使用k-means就不能处理这种情况,下文中会有讲解。 把相应的输入数据,传入k-means算法后,当k-means算法运行完后,该算法的输出是: 1:标签(每一个点都有一个标签,因为最终任何一个点,总会被分到某个类,类的id号就是标签) 2:每个类的中心点。 标签,是表示某个点是被分到哪个类了。例如,在上图中,实际上有4中“标签”,每个“标签”使用不同的颜色来表示。所有黄色点我们可以用标签以看出,有3个类离的比较远,有两个类离得比较近,几乎要混合在一起了。 当然,数据集不一定是坐标,假如你要对彩色图像进行聚类,那么你的向量就可以是(b,g,r),如果使用的是hsv颜色空间,那还可以使用(h,s,v),当然肯定可以有不同的组合例如(b*b,g*r,r*b) ,(h*b,s*g,v*v)等等。 在本文中,初始的类的中心点是随机产生的。如上图的红色点所示,是本文随机产生的初始点。注意观察那两个离得比较近的类,它们几乎要混合在一起,看看算法是如何将它们分开的。 类的初始中心点是随机产生的。算法会不断迭代来矫正这些中心点,并最终得到比较靠5个中心点的距离,选出一个距离最小的(例如该点与第2个中心点的距离是5个距离中最小的),那么该点就归属于该类.上图是点的归类结果示意图. 经过步骤3后,每一个中心center(i)点都有它的”管辖范围”,由于这个中心点不一定是这个管辖范围的真正中心点,所以要重新计算中心点,计算的方法有很多种,最简单的一种是,直接计算该管辖范围内所有点的均值,做为心的中心点new_center(i). 如果重新计算的中心点new_center(i)与原来的中心点center(i)的距离大于一定的阈值(该阈值可以设定),那么认为算法尚未收敛,使用new_center(i)代替center(i)(如图,中心点从红色点

聚类分析matlab程序设计代码

function varargout = lljuleifenxi(varargin) % LLJULEIFENXI MATLAB code for lljuleifenxi.fig % LLJULEIFENXI, by itself, creates a new LLJULEIFENXI or raises the existing % singleton*. % % H = LLJULEIFENXI returns the handle to a new LLJULEIFENXI or the handle to % the existing singleton*. % % LLJULEIFENXI('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in LLJULEIFENXI.M with the given input arguments. % % LLJULEIFENXI('Property','Value',...) creates a new LLJULEIFENXI or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before lljuleifenxi_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to lljuleifenxi_OpeningFcn via varargin. % % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help lljuleifenxi % Last Modified by GUIDE v2.5 07-Jan-2015 18:18:25 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @lljuleifenxi_OpeningFcn, ... 'gui_OutputFcn', @lljuleifenxi_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before lljuleifenxi is made visible. function lljuleifenxi_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB

利用Matlab软件实现聚类分析范文

§8.利用Matlab和SPSS软件实现聚类分析 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 for l=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 for j=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 for j=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));

聚类分析的SPSS实现

§7.5聚类分析的SPSS实现 一、系统聚类法的SPSS实现 例7.5.1利用全国30个省市自治区经济发展基本情况的八项指标数据(见数据集wyzb6_5.),用系统聚类法对这30个省市自治区作一初步的分类,并说明各类地区经济发展的特点。 操作 分析(Analyze)?分类(Classify)?系统聚类(Hierarchical Cluster)打开系统聚类分析(Hierarchical Cluster Analysis)对话框 1.变量(V ariable(s))列表框设置分析变量。 2.标志个案(Label Cases by)框设置分析对象的标志变量。3.分群(Cluster)单选择框设置聚类分析的类型。 4.输出(Display)复选择框设置聚类分析的输出结果,统计量和图都是默认选项。 5.统计量(Statistics)按钮设置输出的统计量。 合并进程表(Agglomeration schedule)默认选项,输出聚类分析的凝聚状态表; 相似性矩阵(Proximitymatrix)为复选项,输出各样品的距离矩阵。 聚类成员(Cluster Menbership)选择框: 无(None)选项:不显示类的样品构成; 单一方案(Single solution)选项:选择此项,并输入一个确定的分类数n,并输出聚成n个类时各个类的样品构成 情况。 方案范围(Range of solutions):选择此项,并输入两个数n1,n2,将显示指定聚成n1类到n2类时各个类的样品构成 情况。

6.Plots按钮设置输出图形:树状图冰状图 7.Method按钮设置聚类分析的具体方法。 聚类方法: 组间连接:类间平均法 组内连接:类内平均法 最近临元素:最短距离法 最远临元素:最长距离法 质心聚类法:重心法 中位数聚类法:中位数法 Ward法:离差平方和法 度量方法选择框:选择计算样品距离的方法转换值选择框:选择原始数据标准化的方法Z得分,最常用的方法

FCMClust(模糊c均值聚类算法MATLAB实现)

function [center, U, obj_fcn] = FCMClust(data, cluster_n, options) % FCMClust.m 采用模糊C均值对数据集data聚为cluster_n类 % 用法: % 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options); % 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster); % 输入: % data ---- nxm矩阵,表示n个样本,每个样本具有m的维特征值 % N_cluster ---- 标量,表示聚合中心数目,即类别数 % options ---- 4x1矩阵,其中 % options(1): 隶属度矩阵U的指数,>1 (缺省值: 2.0) % options(2): 最大迭代次数(缺省值: 100) % options(3): 隶属度最小变化量,迭代终止条件(缺省值: 1e-5) % options(4): 每次迭代是否输出信息标志(缺省值: 1) % 输出: % center ---- 聚类中心 % U ---- 隶属度矩阵 % obj_fcn ---- 目标函数值 % Example: % data = rand(100,2); % [center,U,obj_fcn] = FCMClust(data,2); % plot(data(:,1), data(:,2),'o'); % hold on; % maxU = max(U); % index1 = find(U(1,:) == maxU); % index2 = find(U(2,:) == maxU); % line(data(index1,1),data(index1,2),'marker','*','color','g'); % line(data(index2,1),data(index2,2),'marker','*','color','r'); % plot([center([1 2],1)],[center([1 2],2)],'*','color','k') % hold off; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin ~= 2 & nargin ~= 3, %判断输入参数个数只能是2个或3个 error('Too many or too few input arguments!'); end data_n = size(data, 1); % 求出data的第一维(rows)数,即样本个数 in_n = size(data, 2); % 求出data的第二维(columns)数,即特征值长度 % 默认操作参数 default_options = [2; % 隶属度矩阵U的指数 100; % 最大迭代次数 1e-5; % 隶属度最小变化量,迭代终止条件

MATLAB 层次聚类

MATLAB 层次聚类应用简述 MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用发法。 层次聚类是基于距离的聚类方法,MATLAB中通过pdist、linkage、dendrogram、cluster等函数来完成。 层次聚类的过程可以分这么几步: (1) 确定对象(实际上就是数据集中的每个数据点)之间的相似性,实际上就是定义一个表征对象之间差异的距离,例如最简单的平面上点的聚类中,最经常使用的就是欧几里得距离。 这在MATLAB中可以通过Y=pdist(X)实现,例如 >> X=randn(6,2) X = -0.4326 1.1892 -1.6656 -0.0376 0.1253 0.3273 0.2877 0.1746 -1.1465 -0.1867 1.1909 0.7258 >> plot(X(:,1),X(:,2),'bo') %给个图,将来对照聚类结果把 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~图1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Y=pdist(X) Y =

Columns 1 through 14 1.7394 1.0267 1.2442 1.5501 1.6883 1.8277 1.9648 0.5401 2.9568 0.2228 1.3717 1.1377 1.4790 1.0581 Column 15 2.5092 例子中X数据集可以看作包含6个平面数据点,pdist之后的Y是一个行向量,15个元素分别代表X 的第1点与2-6点、第2点与3-6点,......这样的距离。那么对于M个点的数据集X,pdist之后的Y 将是具有M*(M-1)/2个元素的行向量。Y这样的显示虽然节省了内存空间,但对用户来说不是很易 懂,如果需要对这些距离进行特定操作的话,也不太好索引。MATLAB中可以用squareform把Y转 换成方阵形式,方阵中位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是 个对角元素为0的对称阵。 >> squareform(Y) ans = 0 1.7394 1.0267 1.2442 1.5501 1.6883 1.7394 0 1.8277 1.9648 0.5401 2.9568 1.0267 1.8277 0 0.2228 1.3717 1.1377 1.2442 1.9648 0.2228 0 1.4790 1.0581 1.5501 0.5401 1.3717 1.4790 0 2.5092 1.6883 2.9568 1.1377 1.0581 2.5092 0 这里需要注意的是,pdist可以使用多种参数,指定不同的距离算法。help pdist把。 另外,当数据规模很大时,可以想象pdist产生的Y占用内存将是很吓人的,比如X有10k个数据点 ,那么X占10k*8*2Bytes=160K,这看起来不算啥,但是pdist后的Y会有10k*10k/2*8Bytes=400M 。怕了把,所以,废话说在前面,用MATLAB的层次聚类来处理大规模数据,大概是很不合适的。 (2) 确定好了对象间的差异度(距离)后,就可以用Z=linkage(Y)来产生层次聚类树了。 >> Z=linkage(Y) %Z=linkage(Y,’method’)说明:用‘method’参数指定的算法计算系统聚类树。 Z = 3.0000 4.0000 0.2228 2.0000 5.0000 0.5401 1.0000 7.0000 1.0267 6.0000 9.0000 1.0581 8.0000 10.0000 1.3717 对于M个元素的X,前面说了Y是1行M*(M-1)/2的行向量,Z则是(M-1)*3的矩阵。 Z数组的前两列是索引下标列,最后一列是距离列。例如上例中表示在产生聚类树的计算过程中

相关文档
最新文档