模式识别作业

更新时间:2023-10-22 06:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2.6给出K-均值算法的程序框图,编写程序,自选一组分别属于三类的三维模式样本,

并对它们进行聚类分析。

迭代次数=1随机选取k个样本作为初始聚类中心聚类数目大于样本个数YN输入聚类数目k得到样本矩阵的大小开始输入样本矩阵绘制样本数据的散点图输入错误,要求重新输入k

判断前后两次聚类中心是否变化NY计算各聚类中心的新向量值迭代次数+1输出迭代次数,聚类中心,聚类结果按最短距离原则分配各点计算各点到聚类中心的距离结束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('请输入聚类数目:'); end

M=cell(1,m); for i=1:k

M{1,i}=zeros(1,n); end

Mold=cell(1,m); for i=1:k

Mold{1,i}=zeros(1,n); end

%随机选取k个样本作为初始聚类中心 %第一次聚类,使用初始聚类中心

p=randperm(m);%产生m个不同的随机数 for i=1:k

M{1,i}=data(p(i),:);

end while true

counter=counter+1; disp('第'); disp(counter); disp('次迭代'); count=zeros(1,k); %初始化聚类C C=cell(1,k); for i=1:k

C{1,i}=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{1,d}(j)-data(i,j))^2; end

end

[y,l]=min(sqrt(gap)); count(l)=count(l)+1; C{1,l}(count(l),:)=data(i,:); end

Mold=M;

disp('聚类中心为:'); for i=1:k disp(M{1,i}); end

disp('聚类结果为:'); for i=1:k disp(C{1,i});

end sumvar=0; for i=1:k E=0;

disp('单个误差平方和为:'); for j=1:count(i) for h=1:n

E=E+(M{1,i}(h)-C{1,i}(j,h))^2; end end disp(E);

sumvar=sumvar+E; end

disp('总体误差平方和为:'); disp(sumvar);

%计算新的聚类中心,更新M,并保存旧的聚类中心 for i=1:k

M{1,i}=sum(C{1,i})/count(i); end

%检查前后两次聚类中心是否变化,若变化则继续迭代;否则算法停止; tally=0; for i=1:k

if abs(Mold{1,i}-M{1,i})<1e-5*ones(1,n) tally=tally+1; continue; else break; end end if tally==k break; end End

3.11给出感知器算法程序框图,编写算法程序.

绘制判别函数输出权向量迭代次数+1校正权向量判别函数>0NY计算判别函数迭代次数=0校正增量系数=1开始输入两类样本数据及初始权向量值写成增广向量形式并进行规范化处理

MATLAB程序代码

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; end end Step=Step+1; end disp(W) figure(1)

plot3(X,Y,Z,'ks','LineWidth',2); grid on;hold on;

xlabel('x');ylabel('y');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:.2:1,0:.2: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');

本文来源:https://www.bwwdw.com/article/gv7f.html

Top