矢量量化神经网络 解决有监督的分类问题
[x,t] = iris_dataset; % 加载数据,x为输入样本,t为期望输出
rng(0)
whos
ri=randperm(150); % 划分训练与测试集
x1=x(:,ri(1:50));
t1=t(:,ri(1:50));
x2=x(:,ri(51:150));
t2=t(:,ri(51:150));
net = lvqnet(20); % 创建网络进行训练 默认 20竞争神经元个数0.01学习率'learnlv1'学习函数
net = train(net,x1,t1);
y = net(x2); % 测试
yy=vec2ind(y);
ty=vec2ind(t2);
sum(yy==ty)/length(yy)
自组织竞争神经网络 解决分类/聚类问题
竞争神经网络
%% 清理
clear,clc
close all
%% 样本数据
x0=[4.1,1.8,0.5,2.9,4.0,0.6,3.8,4.3,3.2,1.0,3.0,3.6,3.8,3.7,3.7,8.6,9.1,...
7.5,8.1,9.0,6.9,8.6,8.5,9.6,10.0,9.3,6.9,6.4,6.7,8.7;...
8.1,5.8,8.0,5.2,7.1,7.3,8.1,6.0,7.2,8.3,7.4,7.8,7.0,6.4,8.0,...
3.5,2.9,3.8,3.9,2.6,4.0,2.9,3.2,4.9,3.5,3.3,5.5,5.0,4.4,4.3];
%% 建立竞争网络,两个类别
net = competlayer(2);
%% 训练
net.trainParam.epochs=400; %最大的训练步数
tic
net=train(net,x0);
toc
%% 计算结果
y=net(x0);
calsses = vec2ind(y);
fprintf('分类结果\n');
disp(calsses)
view(net)
自组织映射网络 输出层引入拓扑结构
% mykohonen.m
%% 清空环境变量
clc,clear
close all
%% 样本数据
x0=[4.1,1.8,0.5,2.9,4.0,0.6,3.8,4.3,3.2,1.0,3.0,3.6,3.8,3.7,3.7,8.6,9.1,...
7.5,8.1,9.0,6.9,8.6,8.5,9.6,10.0,9.3,6.9,6.4,6.7,8.7;...
8.1,5.8,8.0,5.2,7.1,7.3,8.1,6.0,7.2,8.3,7.4,7.8,7.0,6.4,8.0,...
3.5,2.9,3.8,3.9,2.6,4.0,2.9,3.2,4.9,3.5,3.3,5.5,5.0,4.4,4.3];
%数据归一化
[x,m_x]=mapminmax(x0);
%% 网络构建
net = selforgmap([2 2]); % 创建自组织映射网络 分2x2=4类
net.trainParam.coverSteps=200;
net.trainParam.initNeighbor=1;
net = train(net,x);
y = net(x);
Index = vec2ind(y)
%% 显示
x1=x0(:,Index==1);
x2=x0(:,Index==2);
x3=x0(:,Index==3);
x4=x0(:,Index==4);
plot(x1(1,:),x1(2,:),'ro');hold on
plot(x2(1,:),x2(2,:),'k*');
plot(x3(1,:),x3(2,:),'b>');
plot(x4(1,:),x4(2,:),'mp');
title('聚类结果')
legend('类别1','类别2','类别3','类别4')
% legend('类别1','类别2')
set(gcf,'color','w')
box on