主题:高手请看!
本程序估计只有高手能看懂!谁能挑出错误并改正的?那绝对是高手中的高手!挑战一下吧!!
本程序要求使用学习矢量量化网络,要求给样本分类,每类用不同的线条画出。谁能改进这个算法给出一个更好的算法的?
close all
clf reset
figure(gcf);
echo on
clc
pause
clc
disp('请输入样本的数量:')
n1=input('请你输入:');
disp('请输入样本的维数(2,3):');
n2=input('请你输入:');
disp('请输入样本矢量:');
P=input('请输入:');
disp('请输入目标样本矢量:');
Tc=input('请你输入:');
T=ind2vec(Tc); %学习矢量量化网络的输出是单值矢量组,故把下标矩阵转化为单值矢量组形
disp('请输入竞争层神经元个数:');
S1=input('请输入:');
disp('请输入网络输出层神经元个数也即样本的类别数目:')
S2=input('请输入:');
disp('请输入输入的样本矢量中每类所占的比例,是S2维的矩阵:');
PC=input('请输入:');
disp('请输入学习速率,缺省值为0.01:');
LR=input('请输入:');
disp('请输入学习函数:(learnlv1,learnlv2)');
LF=input('请输入:');
net=newlvq(minmax(P),S1,PC,LR,LF);
pause
clc
disp('请输入训练次数:');
net.trainParam.epochs=input('请你输入:');
net=train(net,P,T);
pause
clc
figure; %画样本数据分布图
w1=net.IW{1}';
wc=vec2ind(net.LW{2});
y={'*','+','-'} %用于给不同的样本画不同的线条
z={'o','s'}; %用于画出不同样本的权值
if (n2==2) %输入的是二维的样本矢量
for i=1:n1
m=Tc(i); %这句有错吗?可以这样赋值吗?编译提示是错的!
plot(P(1,i),P(2,i),y(m),'markersize',10);
title('样本数据分布图');
end %结束for循环
pause
clc
for j=1:S1
h=wc(j);
plot(w1(1,j),w1(2,j),z(h),'markersize',5);
title('inputdata&net weights');
end
else
for i=1:n1
m=Tc(i); %编译提示不能从cell转换为double类型。那怎么办??
plot3(P(1,i),P(2,i),P(3,i),y(m),'markersize',10);
end %结束for循环
for j=1:S1
h=wc(j);
plot3(w1(1,j),w1(2,j),w1(3,j),z(h),'markersize',5);
title('inputdata&net weights');
end
end
pause
clc
Y=sim(net,P); %网络的仿真输出
Yc=vec2ind(Y)
本程序要求使用学习矢量量化网络,要求给样本分类,每类用不同的线条画出。谁能改进这个算法给出一个更好的算法的?
close all
clf reset
figure(gcf);
echo on
clc
pause
clc
disp('请输入样本的数量:')
n1=input('请你输入:');
disp('请输入样本的维数(2,3):');
n2=input('请你输入:');
disp('请输入样本矢量:');
P=input('请输入:');
disp('请输入目标样本矢量:');
Tc=input('请你输入:');
T=ind2vec(Tc); %学习矢量量化网络的输出是单值矢量组,故把下标矩阵转化为单值矢量组形
disp('请输入竞争层神经元个数:');
S1=input('请输入:');
disp('请输入网络输出层神经元个数也即样本的类别数目:')
S2=input('请输入:');
disp('请输入输入的样本矢量中每类所占的比例,是S2维的矩阵:');
PC=input('请输入:');
disp('请输入学习速率,缺省值为0.01:');
LR=input('请输入:');
disp('请输入学习函数:(learnlv1,learnlv2)');
LF=input('请输入:');
net=newlvq(minmax(P),S1,PC,LR,LF);
pause
clc
disp('请输入训练次数:');
net.trainParam.epochs=input('请你输入:');
net=train(net,P,T);
pause
clc
figure; %画样本数据分布图
w1=net.IW{1}';
wc=vec2ind(net.LW{2});
y={'*','+','-'} %用于给不同的样本画不同的线条
z={'o','s'}; %用于画出不同样本的权值
if (n2==2) %输入的是二维的样本矢量
for i=1:n1
m=Tc(i); %这句有错吗?可以这样赋值吗?编译提示是错的!
plot(P(1,i),P(2,i),y(m),'markersize',10);
title('样本数据分布图');
end %结束for循环
pause
clc
for j=1:S1
h=wc(j);
plot(w1(1,j),w1(2,j),z(h),'markersize',5);
title('inputdata&net weights');
end
else
for i=1:n1
m=Tc(i); %编译提示不能从cell转换为double类型。那怎么办??
plot3(P(1,i),P(2,i),P(3,i),y(m),'markersize',10);
end %结束for循环
for j=1:S1
h=wc(j);
plot3(w1(1,j),w1(2,j),w1(3,j),z(h),'markersize',5);
title('inputdata&net weights');
end
end
pause
clc
Y=sim(net,P); %网络的仿真输出
Yc=vec2ind(Y)