1.1题目。
给出k-均值算法的程序框图,编写程序,自选一组分别属于三类的三维模式样本(图2.13),并给它们进行聚类分析。
1.2算法原理。
k-均值算法也称c-均值算法,是根据函数准则进行分类的聚类算法,基于使聚类准则最小化。此处所用的聚类准则函数是聚类集中每一个样本点到该类聚类中心的距离平方和,对于第j个聚类集,准则函数定义为。
式中,sj表示第j个聚类集,也称聚类域,其聚类中心为;为第j个聚类集中所包含的样本个数。
1)任选k个初始聚类中心z1(1),z2(1),…zk(1),。括号内的序号代表寻找聚类中心的迭代运算的次序号。一般可选择样本集中前k个样本作为初始聚类中心。
2)按最小距离原则将其余样本分配到k个聚类中心中的某一个,即:
若,则。式中,k代表迭代运算次序号;k代表聚类中心的个数。
3)计算各个聚类中心的新向量值,
即以均值向量作为新的聚类中心。这一步要分别计算k个聚类中心的样本均值向量,故该算法被称为k-均值算法。
4)如果,,则回到(2),将模式样本逐个重新分类,并重复迭代计算;如果,,算法收敛,计算完毕。
1.3程序流程图。
1.4 matlab程序**。
clear all;
clc;data=input('请输入样本数据矩阵:')
x=data(:,1);
y=data(:,2);
figure(1);
plot(x,y,'r*',linewidth',3);
axis([0 9 0 8])
xlabel('x');ylabel('y');
hold on;
grid on;
m=size(data,1);
n=size(data,2);
counter=0;
k=input('请输入聚类数目:')
if k>m
disp('输入的聚类数目过大,请输入正确的k值');
k=input('请输入聚类数目:')
endm=cell(1,m);
for i=1:k
m=zeros(1,n);
endmold=cell(1,m);
for i=1:k
mold=zeros(1,n);
end随机选取k个样本作为初始聚类中心。
第一次聚类,使用初始聚类中心。
p=randperm(m);%产生m个不同的随机数。
for i=1:k
m=data(p(i),:
endwhile true
counter=counter+1;
disp('第');
disp(counter);
disp('次迭代');
count=zeros(1,k);
初始化聚类c
c=cell(1,k);
for i=1:k
c=zeros(m,n);
end聚类。
for i=1:m
gap=zeros(1,k);
for d=1:k
for j=1:n
gap(d)=gap(d)+(m(j)-data(i,j))^2;
endend
[y,l]=min(sqrt(gap));
count(l)=count(l)+1;
c(count(l),:data(i,:)
endmold=m;
disp('聚类中心为:')
for i=1:k
disp(m);
enddisp('聚类结果为:')
for i=1:k
disp(c);
endsumvar=0;
for i=1:k
e=0;disp('单个误差平方和为:')
for j=1:count(i)
for h=1:n
e=e+(m(h)-c(j,h))^2;
endend
disp(e);
sumvar=sumvar+e;
enddisp('总体误差平方和为:')
disp(sumvar);
%计算新的聚类中心,更新m,并保存旧的聚类中心。
for i=1:k
m=sum(c)/count(i);
end%检查前后两次聚类中心是否变化,若变化则继续迭代;否则算法停止;
tally=0;
for i=1:k
if abs(mold-m)<1e-5*ones(1,n)
tally=tally+1;
continue;
elsebreak;
endend
if tally==k
break;
endend
1.5结果与分析。
请输入聚类数目:3
第1次迭代。
聚类中心为:
聚类结果为:
单个误差平方和为:10
单个误差平方和为:3
单个误差平方和为:7
总体误差平方和为:20
第2次迭代。
聚类中心为:
聚类结果为:
单个误差平方和为:4
单个误差平方和为:1.3333
单个误差平方和为:3.7500
总体误差平方和为:9.0833
程序以循环语句来实现算法中迭代的要求。在对课本上图2.13所示的10个样本进行聚类时,考虑到实际应用中,需试探不同的k值和选择不同的聚类中心起始值,而题中k值已定,所以随机选取了k个样本作为初始聚类中心。
另一方面,这个程序不能生成聚类的结果图。
2.1题目。
给出感知器算法程序框图,编写算法程序,解习题3-5,。
2.2算法原理。
两类线性可分的模式类:,设判别函数为。其中,,。
d(x)应具有以下性质:
对样本进行规范化处理,即ω2类样本全部乘以(-1),则有:。
下面是感知器的具体步骤:
1)选择个分属于和类的模式样本构成训练样本集,构成增广向量形式,并进行规范化处理。任取权向量初始值w(1),开始迭代。括号中的1代表迭代次数k=1。
2)用全部训练样本进行一轮迭代,计算的值,并修正权向量。
假设进行到第k次迭代时,输入的样本为,计算,分两种情况更新权向量:
若0,说明分类器对的分类发生错误,权向量需要校正,且校正为:,其中,c为校正增量系数,。
若,表明分类正确,权向量不变,即。
可统一写为。
3)分析分类结果:只要有一个错误分类,回到(2),直至对所有样本正确分类,结束迭代。此时的权向量即为算法结果。
2.3程序流程图。
2.4matlab程序**。
clear all;
clc;disp('感知器算法求解两类训练样本的判别函数');
data1=input('请输入第一类样本数据:')
data2=input('请输入第二类样本数据:')
w=input('请输入权向量初始值w(1)='
expand=cat(1,data1,data2);
expanddata1=cat(2,data1,ones(4,1));
expanddata2=cat(2,data2.*-1,ones(4,1).*1);
expanddata=cat(1,expanddata1,expanddata2);
x=expand(:,1);
y=expand(:,2);
z=expand(:,3);
ro,co]=size(expanddata);
step=0;
counterror=1;
while counterror>0;
counterror=0;
for i=1:ro
temp=w*expanddata(i,:)
if temp<=0
w=w+expanddata(i,:)
disp(w)
countererror=counterror+1;
endend
step=step+1;
enddisp(w)
figure(1)
plot3(x,y,z,'ks','linewidth',2);
grid on;hold on;
xlabel('x');ylabel('y');zlabel('z');
设计模式大作业
摘要 随着软件系统规模和复杂性的增加,人们对软件的可靠性和生产效率也提出了更高的要求,软件重用在当前比以往任何时候都显得重要。设计模式是系统设计阶段的软件重用,使得那些具有良好性能的设计方案可以在相似环境下被再次复用。设计模式以文档的形式把面向对象的软件设计经验记录下来,并予以系统的命名 解释和评价...
设计模式大作业
学生 吴鹏丽班级 软测2班学号 20132110010303 序号 2 01 问题1.请简述什么是里氏代换原则?5分 严格定义 如果对每一个类型为 t1的对象 o1,都有类型为 t2 的对象o2,使得以 t1定义的所有程序 p 在所有的对象 o1 都代换成 o2 时,程序 p 的行为没有发生变化,那...
三种新型作业设计模式
1.分层作业。分层作业体现在作业量和作业难度两方面。作业量的分层指根据学生学习能力的差异自主选择作业的数量,作业难度分层是指依据知识难度程度将作业设计成不同等级的难度,包括基础题型,综合拓展题型,创新提升题型。基础题型旨在帮助学生巩固基础知识,以基础知识为主,适合基础较差的学生 综合拓展题型,以知识...