模式识别大作业《最新》.doc
文本预览下载声明
模式识别大作业
题目:对数据进行聚类分析
专业:控制理论与控制工程
姓名: 齐璐
学号: 1306012
一.基本要求
用FAMALE.TXT、MALE.TXT和/或test2.txt的数据作为本次实验使用的样本集,利用C均值聚类法和层次聚类法对样本集进行聚类分析,对结果进行分析,从而加深对所学内容的理解和感性认识。
二.具体做法
1.把FAMALE.TXT和MALE.TXT两个文件合并成一个,同时采用身高和体重数据作为特征,设类别数为2,利用C均值聚类方法对数据进行聚类,并将聚类结果表示在二维平面上。尝试不同初始值对此数据集是否会造成不同的结果。
2. 对1中的数据利用层次聚类方法进行聚类,分析聚类结果,体会分级聚类方法。
三.实验原理
C均值聚类方法:
(1)C均值算法思想
基于使聚类性能指标最小化,所用的聚类准则函数是聚类集中每一个样本点到该类中心的距离平方之和,并使其最小化。
(2)C均值算法步骤:
1.任选C个初始聚类中心 。一般以开头C个样本作为初始中心。
2.将模式样本集的每一样本按最小距离原则分配给C个聚类中心,即在第m次迭代时,若 。则, , 表示第m次迭代时,以第j个聚类中心为代表的聚类域。
3.由步骤2计算新的聚类中心,即:
式中Ni为第i个聚类域 中的样本个数。其均值向量作为新的聚类中心,因为这样可以使误差平方和准则函数:
达到最小值。
4.若 ,算法收敛,计算完毕。否则返回到步骤2,进行下一次迭代。
(3) 算法流程图
开 始读入要分类的数据
开 始
读入要分类的数据
设置初始聚类中心
计算数据到C个聚类中心的距离
将数据分入与其距离最小的聚类
计算新的聚类中心
聚类中心是否收敛?
否
输出C个分类好的聚类
结 束
是
四.程序源代码 (程序来源于公开文档)
1.主程序
clear all
clc
[FH FW]=textread(D:\kjunzhi\FEMALE.TXT,%f %f);
[MH MW]=textread(D:\kjunzhi\MALE.TXT,%f %f);
Data(1:50,1)=FH;Data(51:100,1)=MH;
Data(1:50,2)=FW;Data(51:100,2)=MW;
C=input(c=);
[U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C);
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([P([1 2],1)],[P([1 2],2)],*,color,k)
hold off;
2.子程序
unction [U,P,Dist,Cluster_Res,Obj_Fcn,iter]=fuzzycm(Data,C,plotflag,M,epsm)
if nargin5
epsm=1.0e-6;
end
if nargin4
M=2;
end
if nargin3
plotflag=0;
end
[N,S]=size(Data);m=2/(M-1);iter=0;
Dist(C,N)=0; U(C,N)=0; P(C,S)=0;
% ???¨2?????????¤????¨?
U0 = rand(C,N);
U0=U0./(ones(C,1)*sum(U0));
% FCM |ì?|ì¨1?¨2???¤?§
while true
% |ì¨1?¨2???????
iter=iter+1;
% ?????¨°?¨1?????¨¤???? P
Um=U0.^M;
P=Um*Data./(ones(S,1)*sum(Um));
% ?¨1?????¤????¨? U
for i=1:C
for j=1:N
Dist(i,j)=fuzzydist(P(i,:),Data(j,:));
end
end
U=1./(Dist.^m.*(ones(C,1)*sum(Dist.^(-m))));
%
显示全部