竞争神经网络(无导师学习)
竞争型神经网络是基于无监督学习(Unsupervised learning)方法的神经网络的一种重要类型,它经常作为基本的网络形式,构成其它一些具有自组织能力的网络,如自组织映射网络(SOM)、自适应共振理论网络、学习向量量化网络等。
竞争型神经网络只有两层(输入层和核心输出层),如图所示:
在这里插入图片描述
对于模式样本本身具有较明显的分类特征,竞争型神经网络可以对其进行正确的分类,网络对同一类或相似的输入模式具有较稳定的输出响应。但也存在一些问题:
(1)当学习模式样本本身杂乱无章,没有明显的分类特征时,网络对输入模式的响应呈现振荡的现象,即对同一类输入模式的响应可能激活不同的输出神经元,从而不能实现正确的分类。当各类模式的特征相近时,也会出现同样的状况。
(2)在权值和阈值的调整过程中,学习率的选择在学习速率和稳定性之间存在矛盾,而不象前面我们介绍的其它学习算法,可以在刚开始时采用较大的学习率,而在权值和阈值趋于稳定时,采用较小的学习率。而竞争型神经网络当增加新的学习样本时,权值和阈值可能需要比前一次更大的调整。
(3)网络的分类性能与权值和阈值的初始值、学习率、训练样本的顺序、训练时间的长短(训练次数)等都有关系,而又没有有效的方法对各种因素的影响加以评判。
(4)在MATLAB神经网络工具箱中,以trainr函数进行竞争型神经网络的训练,用户只能限定训练的最长时间或训练的最大次数,以此终止训练,但终止训练时网络的分类性能究竟如何,没有明确的指标进行评判。

SOM神经网络(自组织特征映射神经网络)(无导师学习)
相比于bp神经网络算法,som相对来说比较容易理解。自组织神经网络,是一种用于聚类的神经网络算法,从名字便可以看出,这是一种无监督式的算法,意味着,它不需要任何训练样本,便可以直接对输入样本根据其特征 分类,将具有相似特征的划分为一类。
SOM为层次型结构。典型结构是:输入层加竞争层。
输入层:接收外界信息,将输入模式向竞争层传递,起“观察”作用
竞争层:负责对输入模式进行“分析比较”,寻找规律并归类。
因为Kohonen根据生理学的发现,认为神经网络在接受外界输入时,将会分成不同的区域,不同的区域对不同的模式具有不同的响应特征。如下图,人对猫和狗的概念储存在不同区域。
在这里插入图片描述
程序:

%% I. 清空环境变量
clear all
clc

%% II. 训练集/测试集产生
%%
% 1. 导入数据
load water_data.mat

%%
% 2. 数据归一化
attributes = mapminmax(attributes);

%%
% 3. 训练集和测试集划分

% 训练集——35个样本
P_train = attributes(:,1:35);
T_train = classes(:,1:35);
% 测试集——4个样本
P_test = attributes(:,36:end);
T_test = classes(:,36:end);

%% III. 竞争神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newc(minmax(P_train),4,0.01,0.01);

%%
% 2. 设置训练参数
net.trainParam.epochs = 500;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_compet_1 = sim(net,P_train);
T_sim_compet_1 = vec2ind(t_sim_compet_1);
% 测试集
t_sim_compet_2 = sim(net,P_test);
T_sim_compet_2 = vec2ind(t_sim_compet_2);

%% IV. SOFM神经网络创建、训练及仿真测试
%%
% 1. 创建网络
net = newsom(P_train,[4 4]);

%%
% 2. 设置训练参数
net.trainParam.epochs = 200;

%%
% 3. 训练网络
net = train(net,P_train);

%%
% 4. 仿真测试

% 训练集
t_sim_sofm_1 = sim(net,P_train);
T_sim_sofm_1 = vec2ind(t_sim_sofm_1);
% 测试集
t_sim_sofm_2 = sim(net,P_test);
T_sim_sofm_2 = vec2ind(t_sim_sofm_2);

%% V. 结果对比
%%
% 1. 竞争神经网络
result_compet_1 = [T_train' T_sim_compet_1']
result_compet_2 = [T_test' T_sim_compet_2']

%%
% 2. SOFM神经网络
result_sofm_1 = [T_train' T_sim_sofm_1']
result_sofm_2 = [T_test' T_sim_sofm_2']

更多推荐