MATLAB机器学习系列-6 竞争神经网络与SOFM(SOM)神经网络原理及其例子代码
竞争神经网络
结构上和RBF等网络是比较像的。这里的距离是负数距离,||ndist||中带一个n,表示negative。在matlab中计算方法是ngedist。 它的计算过程是:待分类样本输入后,和样本(就是输入权值向量IW)计算负距离。||ndist||计算后输出是S1x1维的列向量,列向量中每个元素为输入向量p和IW距离的负数。之后,再和一个阈值b1相加,得到n1。接下来就进入了最重要的竞争层,在竞争层中,只有值最大的一个输入才能“崭露头角”,输出为1,其它弱鸡的输入都会变成0。
如上图,只有在输入4的位置处,对应的输出才是1,其它都是0。这就是竞争层的作用。
通过这样的方法,对于n1中最大的元素,可以获胜,竞争层输出1。如果b1=0,即没有阈值向量作用,那么只有当神经元的权值向量IW与输入向量最接近时,它在n1中各元素的负值最小,而值最大,所以能赢得竞争。这就是为什么要用负距离。
就使得不是每次迭代就把所有神经元的权重都更新一遍,而是每次迭代只更新一个隐含层神经元的权重。例如上面这个例子的输出a1,a1是S1x1的维度,其中就一个值为1,其它为0,那么就只有1的位置对应的那个神经元的权重才会得到更新(只有获胜的神经元才有机会跳转权值)。
这样不断迭代,势必会带来一个问题:获胜的神经元通过调整能够不断缩小误差,导致它们取胜几率不断增大,导致最后整个网络中只有一部分胜利的神经元取得成功,其他神经元始终没有取得训练,成为“死神经元”。
解决这个问题的办法:设置较大的b1,帮助被冷落的神经元们获得竞争胜利的机会。针对某个竞争神经元而言,如果偏置b1取得比较大,那么就能帮助输入p在竞争中获得更大的取胜概率。当然,这个b也是会动态调整的,通过学习函数learncon来帮助动态调整b
权重IW{1,1}如何设定?
are initialized to the centers of the input ranges with the function midpoint.也就是说是取输入向量的中心。
中心怎么理解呢?简单的说是最大最小值的平均值。
S是神经元个数,PR矩阵的维度
如图所示,假如有两个输入01;-22 ,隐藏层有5个神经元,得到的LW是0.5
阈值b是如何计算的
计算方式见图 rows=前面的5时,结果c=13.5914
权重更新方式
阈值更新方法
SOFM(SOM)自组织映射神经网络
SOM能够通过其输入样本学会检测其规律性和输入样本相互之间的关系,并且根据这些输入样本的信息自适应地调整网络,使得网络以后的响应与输入样本相适应。竞争型神经网络的神经元通过输入信息能够识别成组的相似输入向量;自组织映射神经网络通过学习同样能够识别成组的相似输入向量,使那些网络层中彼此靠的很近的神经元对相似的输入向量产生响应。与竞争型神经网络不同的是,SOM不但能学习输入向量的分布情况,还可以学习输入向量的拓扑结构,其单个神经元对模式分类不起决定性作用,而要靠多个神经元的协同作用才能完成模式分类。
和竞争性神经网络区别:
- 1没有阈值b
- 2在权重更新时,竞争性神经网络只有1个获得调整,som是多个获得调整,主神经元和邻近神经元都获得调整。如图,主神经元为13,选择不同邻域,则不同神经元都得到调整。
权重更新公式
常用函数
newc
功能:该函数用于创建一个竞争层
net=newc
net=newc(PR,S,KLR,CLR)
PR:输入样本,每个特征的最大值和最小值,R2矩阵
S:神经元的数目,即分类类别数
KLR:Kohonen学习速度,默认为0.01
CLR:Conscience学习速度,默认为0.001
net:函数返回值,一个新的竞争层。
newsom
et=newsom(PR,[D1,D2,^],TFCN,DFCN,OLR,OSTEPS,TLR,TND)
PR:R个输入元素
Di:第I层的维数,默认为[5 8]
TFCN:拓扑函数,默认为hextop
DFCN:距离函数,默认为linkdist
OLR:分类阶段学习速率,默认为0.9
OSTEPS:分类阶段的步长,默认为1000
TLR:调谐阶段的学习速率,默认为0.02
TNS:调谐阶段的领域距离,默认为1.
输入net=newsom([0 1;0 1],[3 5])时的拓扑结构,[0 1;0 1]为输入样本
算例分析
第一步:清空环境
%% I. 清空环境变量
clear all
clc
第二步:导入数据
%% II. 训练集/测试集产生
%%
% 1. 导入数据
load water_data.mat
输入attributes
输出classes,1234四类
第三步:训练集测试集划分/font>
%%
% 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);
第四步:竞争神经网络创建,训练,仿真/font>
%% 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);
解析:
net = newc(minmax(P_train),4,0.01,0.01);
因为有4类,所以第二个参数设为4,后面两个参数为权值和阈值
minmax(P_train) 有6个特征,返回每个特征的最大值和最小值
训练过程
仿真测试
vec2ind把一个稀疏矩阵(one-hot)转换成行向量或者列向量
第五步:SOFM(SOM)神经网络创建,训练,仿真/font>
%% 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']
代码和数据百度云
链接:https://pan.baidu.com/s/1QITn_fTWAlCTMZf6swMjDg
提取码:fb8o
复制这段内容后打开百度网盘手机App,操作更方便哦
作者:电气工程的计算机萌新-余登武
MATLAB机器学习系列-6 竞争神经网络与SOFM(SOM)神经网络原理及其例子代码相关推荐
- MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现
决策树 原理 决策树通过把样本实例从根节点排列到某个叶子节点来对其进 行分类.树上的每个非叶子节点代表对一个属性取值的测试, 其分支就代表测试的每个结果:而树上的每个叶子节点均代表 一个分类的类别,树 ...
- MATLAB机器学习系列-5 RBF、GRNN和PNN神经网络原理及其例子代码
RBF(径向基神经网络) GRNN广义神经网络 PNN概率神经网络 RBF算例实现(回归) 数据集 % 1. 导入数据 load spectra_data.mat NIR输入,octane输出 %% ...
- MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现
极限学习机(Extreme Learning Machine, ELM) 极限学习机网络结构和BP网络结构类似. 和BP神经网络不同点: 极限学习机输入层到隐含层的权重W是可以随意指定的.BP神经网络 ...
- 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)
机器学习系列(12)_XGBoost参数调优完全指南(附Python代码) 原文链接:http://blog.csdn.net/han_xiaoyang/article/details/5266539 ...
- 递归神经网络 matlab,机器学习系列:递归神经网络
原标题:机器学习系列:递归神经网络 前言 BP 神经网络,训练的时候,给定一组输入和输出,不断的对权值进行训练,使得输出达到稳定.但 BP 神经网络并不是适合所有的场景,并不真正的体现出某些场景的真正 ...
- MATLAB机器学习系列-3:BP神经网络算例实现
BP神经网络 BP神经网络是前连接神经网络中的一种,BP指的是训练方法是误差反向传播Backpropagation,要求激活函数是可导的. 数据归一化 什么是归一化? 将数据映射到[0, 1]或[-1 ...
- MATLAB机器学习系列-12:蚁群算法优化原理及其matlab实现
蚁群算法原理 概述 蚁群算法(Ant Colony Algorithm, ACA)由Marco Dorigo于1992年在他的博士论文中首次提出,该算法模拟了自然界中蚂蚁的觅食行为. 蚂蚁在寻找食物源 ...
- MATLAB机器学习系列-11:粒子群优化原理及其matlab实现
粒子群优化原理 粒子群算法思想来源于实际生活中鸟捕食的过程.假设在一个n维的空间中,有一群鸟(m只)在捕食,食物位于n维空间的某个点上,对于第i只鸟某一时刻来说,有两个向量描述,一个是鸟的位置向量,第 ...
- MATLAB机器学习系列-4函数篇
Matlab中的函数及其调用 1.匿名函数 匿名函数格式 函数名=@(参数)(函数体): 如 myfundhd=@(x)(x+2); 我们可以在命令行窗口直接输入匿名函数,然后调用 或者在m文件点击执 ...
最新文章
- 将存储过程的返回值赋给变量
- thinkphp3.2 验证码生成和点击刷新验证码
- Spring注意事项(各部分理解)
- 计算机网络第四章-网络层复习笔记
- C++类的静态成员详解
- C++:Vector和List的实现
- 深入理解Linux守护进程
- 14 [虚拟化] 虚存抽象;Linux进程的地址空间
- 感恩节快乐,PM2小窍门致NodeJS开发者!
- MySQL的索引类型及简单优化
- 怎样在ppt中加入随机抽号_潮流女生怎样穿更时髦?经典中加入个性,减龄时尚还高级,快入坑...
- 洛谷——P1590 失踪的7
- Sonar安装和常见问题解决
- 安装绿色版本XShell6
- FAT文件系统文件存储与删除原理分析
- 技术美术面试问题总结——数字天空
- Pintos-斯坦福大学操作系统Project详解-Project1
- 资源网址合集的合集,上千个链接!
- Transact使用
- SQL SERVER数据库误删除误格式化误重装软件覆盖数据恢复修复
热门文章
- Percona Live 2016 PPT整理-zhaiwx_yinfeng
- ViT:视觉Transformer backbone网络ViT论文与代码详解
- 德州仪器 (Texas Instruments Incorporated.,TI) - 数字信号处理器 (Digital signal processors)
- 游戏建模要学什么软件啊
- 你的代码要被存放到北极啦!Github宣布将在北极建立代码库
- 《IDC PeerScape:中国农村数字金融实践与案例》研究报告发布
- Android 系统开发系列(1):Android 12 源代码下载、编译和刷机
- 微信公众平台开发消息回复总结
- 剑指offer面试题28:对称的二叉树
- 公开课 | 多模态人物识别技术及其在爱奇艺视频场景中的应用