模式作业设计Word文档下载推荐.doc
《模式作业设计Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《模式作业设计Word文档下载推荐.doc(17页珍藏版)》请在冰豆网上搜索。
clc;
data=input('
请输入样本数据矩阵:
'
);
X=data(:
1);
Y=data(:
2);
figure
(1);
plot(X,Y,'
r*'
'
LineWidth'
3);
axis([0908])
xlabel('
x'
ylabel('
y'
holdon;
gridon;
m=size(data,1);
n=size(data,2);
counter=0;
k=input('
请输入聚类数目:
ifk>
m
disp('
输入的聚类数目过大,请输入正确的k值'
k=input('
end
M=cell(1,m);
fori=1:
k
M{1,i}=zeros(1,n);
Mold=cell(1,m);
Mold{1,i}=zeros(1,n);
%随机选取k个样本作为初始聚类中心
%第一次聚类,使用初始聚类中心
p=randperm(m);
%产生m个不同的随机数
M{1,i}=data(p(i),:
whiletrue
counter=counter+1;
第'
disp(counter);
次迭代'
count=zeros(1,k);
%初始化聚类C
C=cell(1,k);
C{1,i}=zeros(m,n);
%聚类
gap=zeros(1,k);
ford=1:
forj=1:
n
gap(d)=gap(d)+(M{1,d}(j)-data(i,j))^2;
end
[y,l]=min(sqrt(gap));
count(l)=count(l)+1;
C{1,l}(count(l),:
)=data(i,:
Mold=M;
disp('
聚类中心为:
fori=1:
disp(M{1,i});
end
聚类结果为:
disp(C{1,i});
sumvar=0;
E=0;
disp('
单个误差平方和为:
forj=1:
count(i)
forh=1:
E=E+(M{1,i}(h)-C{1,i}(j,h))^2;
end
end
disp(E);
sumvar=sumvar+E;
总体误差平方和为:
disp(sumvar);
%计算新的聚类中心,更新M,并保存旧的聚类中心
M{1,i}=sum(C{1,i})/count(i);
%检查前后两次聚类中心是否变化,若变化则继续迭代;
否则算法停止;
tally=0;
ifabs(Mold{1,i}-M{1,i})<
1e-5*ones(1,n)
tally=tally+1;
continue;
else
break;
iftally==k
1.5结果与分析
3
第1次迭代
22
74
36
00
11
63
73
37
46
57
10
7
20
第2次迭代
6.66673.3333
3.75006.5000
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程序代码
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(:
Y=Expand(:
Z=Expand(:
[ro,co]=size(ExpandData);
Step=0;
CountError=1;
whileCountError>
0;
CountError=0;
fori=1:
ro
Temp=W*ExpandData(i,:
)'
;
ifTemp<
=0
W=W+ExpandData(i,:
disp(W)
CounterError=CountError+1;
end
Step=Step+1;
disp(W)
figure
(1)
plot3(X,Y,Z,'
ks'
zlabel('
z'
f=@(x,y,z)W
(1)*x+W
(2)*y+W(3)*z+W(4);
[x,y,z]=meshgrid(-1:
.2:
1,-1:
1,0:
1);
v=f(x,y,z);
h=patch(isosurface(x,y,z,v));
isonormals(x,y,z,v,h)
set(h,'
FaceColor'
r'
EdgeColor'
none'
2.5结果与分析