模式识别C均值算法的实现
中国矿业大学 计算机科学与技术学院 《模式识别》实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
课程名称 模式识别 实验名称 C均值算法的实现 姓名 褚钰博 学号 08113545 手机 QQ Email: 班级 信科11-1 班 教师 陈伟 手机 QQ 735932337 Email: cumt_pr@126.com 实验日期 2014. 06 .09 实验报告要求:1.实验目的 2.实验内容 3.实验原理或步骤 4.运行结果和分析 5.实验体会与总结 一、实验目的
1.掌握监督学习
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
与非监督学习方法的区别,2.对动态聚类方法有深入的理解,了解其步骤,3.掌握C均值算法的基本思想、步骤,4.会熟练运用C均值算法进行聚类,5、通过c均值算法具体实现,熟练掌握其思想。 二、实验内容
写程序实现c均值算法,并用下表中的三维数据进行测试,下面给出了每种测试的类别数目和初始值。不要求编程环境,可以使用C,MATLAB等语言来实现。
TTTT(1)c=2, m(0)=(1,1,1), m(0)=(-1,1,-1)。 (2)c=2, m(0)=(0,0,0), m(0)=(1,1,-1)。将(2)得到的结果与(1)1212
中的结果进行比较,并解释差别,包括迭代次数的差别。
TTTTT(3)c=3, m(0)=(0,0,0), m(0)=(1,1,1), m(0)=(-1,0,2)。(4)c=3, m(0)=(-0.1,0,0.1), m(0)=(0,-0.1,0.1), 12312Tm(0)=(-0.1,-0.1,0.1)。将(4)得到的结果与(3)中的结果进行比较,并解释差别,包括迭代次数的差别。 3
数据如下表所示:
样本编号 样本编号 xxxxxx331212
1 -7.82 -4.58 -3.97 11 6.18 2.81 5.82
2 -6.68 3.16 2.71 12 6.72 -0.93 -4.04
3 4.36 -2.19 2.09 13 -6.25 -0.26 0.56
4 6.72 0.88 2.80 14 -6.94 -1.22 1.13
5 -8.64 3.06 3.50 15 8.09 0.20 2.25
6 -6.87 0.57 -5.45 16 6.18 0.17 -4.15
7 4.47 -2.62 5.76 17 -5.19 4.24 4.04
8 6.73 -2.01 4.18 18 -6.38 -1.74 1.43
9 -7.71 2.34 -6.33 19 4.08 1.30 5.33
10 -6.91 -0.49 -5.68 20 6.27 0.93 -2.78
三、实验原理或步骤
C均值算法的基本思想即是通过迭代寻找c个聚类的一种划分
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,使得用这c个聚类的均值来代表相应各类样本时所得到的总体误差最小。
N,m C均值算法的基础是最小误差平方和准则。若是第i聚类中的样本数目,是这些样本的均值,即iii
2c1m,yJ,y,m,m 把中的各样本y与均值间的误差平方和对所有类相加后为 ,i,,iiieNy,,,,,iyi1iiJ是误差平方和聚类准则,它是样本集和类别集的函数。 y,e
C均值算法的步骤:
1.选择初始划分,并计算每个聚类的均值以及误差平方和;
,,2.选择一个备选样本y,设y; i
3.若样本数目为1,则转2,否则继续;
1
N2j4.计算:j?i时,; ,,,y,mjjjN,1j
N2i j=i时, ; ,,y,mii1N,i
5.考查中的最小者,若,则把y从移到中; ,,,,,,,jikkik
6.重新计算聚类i和k的均值,并修改误差平方和;
7.若多次迭代后误差平方和不变,则停止,否则转到步骤2。 Je
四、运行结果和分析
当 c=2时,
TTm1(0)=(1,1,1), m2(0)=(-1,1,-1)
current is: 409.49777 Je
after recalculate mean by 25 steps
class 0:
(4.36, -2.19, 2.09) (6.72, 0.88, 2.80) (4.47, -2.62, 5.76) (6.73, -2.01, 4.18) (6.18, 2.81, 5.82) (6.72, -0.93, -4.04) (8.09, 0.
20, 2.25) (6.18, 0.17, -4.15) (4.08, 1.30, 5.33) (6.27, 0.93, -2.78)
class 1:
(-8.64, 3.06, 3.50) (-6.87, 0.57, -5.45) (-7.71, 2.34, -6.33) (-6.91, -0.49, -5.68) (-6.25, -0.26, 0.56) (-6.94, -1.22, 1.13) (-5
.19, 4.24, 4.04) (-6.38, -1.74, 1.43) (-7.82,-4.58,-3,.97) (-6.68,3.16,2.71)
TTm1(0)=(0,0,0), m2(0)=(1,1,-1)
current J is: 409.49777 e
after recalculate mean by 18 steps
(2)的结果与(1)的结果相同,虽然初始设置的聚类均值不同,但它只影响迭代次数,对最后结果没影响。
当c=3时,
TTTm1(0)=(0,0,0), m2(0)=(1,1,1), m3(0)=(-1,0,2)
Jcurrent is:263.06184 e
after recalculate mean by 35 steps
class 0:
(-6.87, 0.57, -5.45) (-7.71, 2.34, -6.33) (-6.91, -0.49, -5.68) (-7.82,-4.58,-3,.97)
class 1:
(6.72, 0.88, 2.80) (4.47, -2.62, 5.76) (6.73, -2.01, 4.18) (6.18, 2.81, 5.82) (6.72, -0.93, -4.04) (8.09, 0.20, 2.25) (6.18, 0.1
7, -4.15) (4.08, 1.30, 5.33) (6.27, 0.93, -2.78)(4.36,-2.19,2.09)
class 2:
(-8.64, 3.06, 3.50) (-6.25, -0.26, 0.56) (-6.94, -1.22, 1.13) (-5.19, 4.24, 4.04) (-6.38, -1.74, 1.43) (-6.68,3.16,2.71)
TTTm1(0)=(-0.1,0,0.1), m2(0)=(0,-0.1,0.1), m3(0)=(-0.1,-0.1,0.1)
2
current is: 295.0098799 Je
after recalculate mean by 22 steps
class 0:
(-8.64, 3.06, 3.50) (-6.25, -0.26, 0.56) (-7.82,-4.58,-3,.97)
(-6.94, -1.22, 1.13) (-5.19, 4.24, 4.04) (-6.38, -1.74, 1.43) (4.36,-2.19,2.09) class 1:
(6.72, 0.88, 2.80) (4.47, -2.62, 5.76) (6.73, -2.01, 4.18) (6.18, 2.81, 5.82) (6.72, -0.93, -4.04) (8.09, 0.20, 2.25) (6.18, 0.1
7, -4.15) (4.08, 1.30, 5.33) (6.27, 0.93, -2.78)
class 2:
(-6.91, -0.49, -5.68) (-6.87, 0.57, -5.45) (-7.71, 2.34, -6.33) (-6.68,3.16,2.71) ( 3 )和( 4 )的聚类结果也基本接近,初始均值设置的不同会影响迭代的次数以及各次迭代所产生的聚类中心,但
它不会影响最后的分类结果。
the first results of kmeansthe second results of kmeans
1010
55
00X3X3
-5-5
-10-10551010550000-5-5-5-5-10-10X2X2X1X1
程序如下:
clear all
dataset=[-7.82,-4.58,-3.97;-6.68,3.16,2.71;4.36,-2.19,2.09;6.72,0.88,2.80;-8.64,3.06,3.50;
-6.87,0.57,-5.45;4.47,-2.62,5.76;6.73,-2.01,4.18;-7.71,2.34,-6.33;-6.91,-0.49,-5.68;
6.18,2.81,5.82;6.72,-0.93,-4.04;-6.25,-0.26,0.56;-6.94,-1.22,1.13;8.09,0.20,2.25;
6.18,0.17,-4.15;-5.19,4.24,4.04;-6.38,-1.74,1.43;4.08,1.30,5.33;6.27,0.93,-2.78;]; center1=[1 1 1;-1 1 -1];
center2=[0 0 0;1 1 -1];
center3=[0 0 0;1 1 1;-1 0 2];
center4=[-0.1 0 0.1;0 -0.1 0.1;-0.1 -0.1 0.1];
%kmeans
[k_class1,C1,sumd1,D1]=kmean(dataset.data,2,'start',center1);
3
one1=dataset.data(find(k_class1==1),:);
second1=dataset.data(find(k_class1==2),:); scatter3(one1(:,1),one1(:,2),one1(:,3),'*','r') hold on
scatter3(second1(:,1),second1(:,2),second1(:,3),'o','g') hold off
xlabel('X1','Fontsize',15);
ylabel('X2','Fontsize',15);
zlabel('X3','Fontsize',15);
title('the first results of kmeans','Fontsize',15) %%%%%%%%%%%%%
[k_class2,C2,sumd2,D2]=kmeans(dataset.data,2,'start',center2); one2=dataset.data(find(k_class2==1),:);
second2=dataset.data(find(k_class2==2),:); figure,scatter3(one2(:,1),one2(:,2),one2(:,3),'*','r') hold on
scatter3(second2(:,1),second2(:,2),second2(:,3),'o','g') hold off
xlabel('X1','Fontsize',15);
ylabel('X2','Fontsize',15);
zlabel('X3','Fontsize',15);
title('the second results of kmeans','Fontsize',15) %%%%%%%%%%%%%%%%%%%% [k_class3,C3,sumd3,D3]=kmeans(dataset.data,3,'start',center3); one3=dataset.data(find(k_class3==1),:);
second3=dataset.data(find(k_class3==2),:); third3=dataset.data(find(k_class3==3),:); figure,scatter3(one3(:,1),one3(:,2),one3(:,3),'*','r') hold on
scatter3(second3(:,1),second3(:,2),second3(:,3),'o','g') hold on
scatter3(third3(:,1),third3(:,2),third3(:,3),'x','b') hold off
xlabel('X1','Fontsize',15);
ylabel('X2','Fontsize',15);
zlabel('X3','Fontsize',15);
title('the third results of kmeans','Fontsize',15) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[k_class4,C4,sumd4,D4]=kmeans(dataset.data,3,'start',center4); one4=dataset.data(find(k_class4==1),:);
second4=dataset.data(find(k_class4==2),:); third4=dataset.data(find(k_class4==3),:); figure,scatter3(one4(:,1),one4(:,2),one4(:,3),'*','r') hold on
scatter3(second4(:,1),second4(:,2),second4(:,3),'o','g') hold on
4
scatter3(third4(:,1),third4(:,2),third4(:,3),'x','b') hold off
xlabel('X1','Fontsize',15);
ylabel('X2','Fontsize',15);
zlabel('X3','Fontsize',15);
title('the fourth results of kmeans','Fontsize',15) %%%fcm
[class_jwei1,fuzzy_jwei1]=fcm_jwei(dataset.sample,2,center1',2); [class_jwei2,fuzzy_jwei2]=fcm_jwei(dataset.sample,2,center2',2); [class_jwei3,fuzzy_jwei3]=fcm_jwei(dataset.sample,2,center3',3); [class_jwei4,fuzzy_jwei4]=fcm_jwei(dataset.sample,2,center4',3);
%子函数fcm_jwei部分
function
[class_center,fuzzy,time]=fcm_jwei(sample,b,initial_center,class_num)
% close all
% clear all
% clc
% dataset=load('F:\?,ê?ê??e2010\experience1.mat'); % initial_center=[0 0 0;1 1 1;-1 0 2]';
% b=2;
% class_num=3;
% sample=dataset.sample;
%sample is a two demention matrix,each row is a feature [feature_num,sample_num]=size(sample);
fuzzy=zeros(class_num,sample_num);
class_center=initial_center;
class_cen=initial_center;
time=0;
while(1)
for i=1:sample_num
for j=1:class_num
fuzzy(j,i)=(sample(:,i)-class_center(:,j))'*... (sample(:,i)-class_center(:,j))+eps; fuzzy(j,i)=fuzzy(j,i).^(-(1/(b-1)));
end
end
normal_fuzzy=sum(fuzzy,1);
for j=1:class_num
fuzzy(j,:)=fuzzy(j,:)./normal_fuzzy;
end
for j=1:class_num
sum_fuzzy=sum((fuzzy(j,:).^b),2)+eps; for k=1:feature_num
5
class_center(k,j)=((fuzzy(j,:).^b)*sample(k,:)')/(sum_fuzzy); end
end
time=time+1;
if
sum(sum((class_center-class_cen).*(class_center-class_cen)))<0.001; break;
end
class_cen=class_center;
end
五、实验体会与总结
1.当各聚类设定的初始均值不同时,程序结果经过的步骤不同。 2.无论在聚类时,初始均值如何选取,在程序结果中总能得到相同的分类结果,同时的结果相差很小。 Je3.是随着聚类数目的增加而单调的减少的,当聚类数目等于样本数时=0,即每个样本自己成一类。 JJee4.此算法是个局部搜索算法,并不能保证收敛到全局最优解,即不能保证找到所有可能的聚类划分中误差平方和
最小的解。算法的结果受到初始划分和样本调整顺序的影响。 5.用均值来作为一类样本的代表点,只有当类内样本的分布为超球状或接近超球状时,才能取得较好的效果;否
则,它就不能很好的代表一个类。
优+ 良+ 中+ 及格+ 不及格+ 教师教师日优 良 中 及格 不及格 2012. 评价 签名 期 优- 良- 中- 及格- 不及格-
6