目录
老饼讲解:一步一步上手学习

【模型】一篇入门-LVQ--矢量神经网络

作者 : 老饼 发表日期 : 2025-12-16 23:52:29 更新日期 : 2026-05-10 20:18:27
老饼讲解-简单易懂,干货满满,爽过嗦螺!


LVQ学习矢量量化(Learning Vector Quantization)是1988年提出的一种用来解决样本分类问题的神经网络,它的特点是通过初始化多个矢量来作为各类别的中心,再通过样本来让这些矢量中心学习到更好的位置,最后通过竞争来判别样本属于哪个类别,好了,下面就让我们更正式的详细看看LVQ神经网络是怎么一回事吧!

一、LVQ神经网络

LVQ神经网络主要用来解决样本分类的问题,也就是判断样本是哪个类别。我们先不急着讲LVQ神经网络,我们先来看看它的思想和意图,然后再正式看看LVQ神经网络,这样理解起来会比较轻松。

1.1. LVQ神经网络的思想

好了,我们都知道LVQ神经网络就是对样本分类,那它是怎么解决样本分类问题的呢,先来上个图:

快速了解LVQ神经网络

如图所示,LVQ先对每个类别都初始化一些判别中心,每个判别中心的背后都代表一个类别,然后通过训练来调整这些判别中心的位置,使得判别中心能较好地识别训练样本的所属类别, 这样,来了新样本,只要判断新样本离哪个判别中心最近,就认为样本属于该判别中心的类别。

1.2. LVQ的神经网络-模型结构

知道了LVQ的思想,那就容易理解LVQ神经网络了,LVQ神经网络的拓扑结构如下:

LVQ神经网络-拓扑结构

好了,我们一起来解读一下LVQ神经网络的结构,说说图中每一块分别是什么意思。

首先,输入层就是我们的输入,然后隐层的隐节点就代表着各个判别中心,而输入与隐节点的连接权重W,就是判别中心的位置,隐节点的值呢,就代表着输入x是不是归属于该隐节点(也就是x是不是离该判别中心最近),用数学来表示,隐节点的值就是:

这个公式的大概意思是,先计算x与各个判别中心的距离,然后取反后进行compet,compet(竞争)是指向量中哪个值最大,就取为1,其余为0,所以最终,h是一个one-hot向量,它只有与x最小的隐节点的取值为1,其余为0。这公式大概看一下有个印象就好了,下面会用例子来具体解说,看完例子就会完全理解它了。

再来看看隐层到输出层的部分,输出层每个节点代表着一种类别,而每个隐节点(也就是判别中心)只与一个输出节点连接,也就是隐节点连接哪个输出节点,就代表着这个隐节点(判别中心)属于哪一个类别,用数学来表示,则是:

其中,h是隐层的输出,它是一个one-hot向量,则是输出层的权重,时,代表第i个输出与第j个隐节点有连接,时,就代表无连接。

1.3. LVQ神经网络-计算例子

好了,直接来看一个LVQ神经网络的计算例子,就会非常具体了。

以   为例

(1) 计算与各个判别中心的负距离

 

(2) 计算哪个判别中心胜出

  

(3)计算输出


二、LVQ神经网络的训练

摸清楚了LVQ神经网络的结构,也知道它用来干什么,那下面就可以开始来看看它是怎么训练的。

2.1. LVQ的训练-概述

首先,LVQ的训练,只需要训练隐层权重W(也就是各个判别中心的位置)就可以了,而输出层的权重,它是不需要训练的,因为它就代表隐节点(判别中心)与输出节点(类别)的对应关系,所以只要从一开始就设置好就可以了。例如共有10个隐节点,然后设定好这10个隐节点分别与哪个输出节点连接就好了。

LVQ的训练

所以,LVQ的训练主要是训练隐层权重W,也就是训练各个判别中心的位置,而LVQ模型对的训练方法有两种:LVQ1规则与LVQ2规则,其中LVQ2是LVQ1的改进。

2.2. LVQ训练方法-LVQ1规则

LVQ1规则和LVQ2规则都是使用逐样本更新的方法来训练LVQ,它每次只用一个样本来调整判别中心的位置,我们先来说LVQ1训练方法,LVQ1规则较为简单,它根据预测的准确性来更新隐节点,如下:

 LVQ1训练规则

如图所示,如果样本预测正确,就将当前胜出的判别中心往样本靠近,否则远离样本,LVQ1规则就只是这么简单,好了,如果用公式来表述,那么LVQ1规则就是如下的更新公式:

 

 

其中,lr是学习率,w则是指竞争胜出的隐神经元与输入所连接的权重,也就是竞争胜出的判别中心的位置。

2.2. LVQ训练方法-LVQ2规则

接下来我们再看一下LVQ2规则,其实LVQ2规则是LVQ1的改进,也可以当作是补丁,它主要解决LVQ1训练后,可能会有些样本属于中心A,又差不多属于B的问题:

LVQ1训练规则的缺点

如图所示,虽然对训练样本的判别没问题,但“界限”不够清晰,会影响实际预测效果,所以就引入了LVQ2规则,来使样本点尽量更“清晰”地划分于某一个判别中心。

在讲述LVQ2规则前,我们先对相关符号进行说明

** 符号说明

          :离样本最近的判别中心(即所竞争成功的隐节点) 

          :离样本次近的判别中心

     :分别代表样本到的距离

好了,下面我们来继续说LVQ2规则。

LVQ2规则是指:如果 ,则对判别中心作如下更新:

上式的意义为"d1和d2差别不大,其中  一般取0.25,此时s=0.6 

LVQ2训练规则

如果判别中心k1、k2对样本类别的判断准确   ,则将k1靠近样本,将k2远离样本

如果判别中心k1、k2对样本类别的判断不准确,则将k2往样本靠近,k1远离样本

用数学表述则为: 

 

 相比于LVQ1,LVQ2考虑了次近节点的位置,使界限更为清晰。

三、LVQ神经网络-代码例子

下面我们借用matlab工具箱,来实现一个LVQ神经网络,来对样本进行分类。

闲话少说,直接上代码,LVQ代码实现例子,如下:

% 本代码展示如何用matlab工具箱训练一个LVQ神经网络
% 本代码来自《老饼讲解神经网络》www.bbblearn.com ,matlab版本:2018a
% ----数据准备--------
clear all ;close all 
rand('seed',70)
P = [-3 -2 -2  0  0.5  -0.5  0 +2 +2 +3; ...
    0 +1 -1 +2 +1 -1 -2 +1 -1  0];              % 输入数据
Tc = [1 1 1 2 2 2 2 1 1 1];                     % 输出类别
T = ind2vec(Tc);                                % 将输出转为one-hot编码(代表类别的01向量)

% -----网络训练---------
net = newlvq(P,4,[0.5 ,0.5],0.01,'learnlv1');   % 初始化LVQ神经网络,共设4个隐节点,按0.5,0.5分配给两个类别
net = train(net,P,T);                           % 训练神经网络
Y = sim(net,P);                                 % 预测(one-hot形式)
Yc = vec2ind(Y);                                % 将one-hot编码形式转回类别编号形式

% 提取出各个类别的判别中心                      
W1       = net.iw{1,1};                         % 判别中心W1
W2 = net.lw{2,1};                               % 判别中心的类别W2

% -------打印结果-----------------
disp('判别中心W1:')                            % 打印
W1                                              % 打印类别中心判别中心W1
disp('判别中心的类别W2:')                      % 打印
W2                                              % 打印判别中心的类别W2
disp('样本的真实标签Tc:')                      % 打印
Tc                                              % 打印样本的真实标签
disp('样本的预测标签Yc:')                      % 打印
Yc                                              % 打印样本的预测标签

代码运行结果如下:

LVQ的训练结果

从结果可以看到,模型的预测标签与真实标签一致,成功地对样本的类别进行判别。

总结

LVQ神经网络就是一种用来做分类的模型,它对每个类别都初始化一些判别中心,然后通过训练来调整这些判别中心的位置,使得判别中心能较好地识别训练样本的所属类别,LVQ的训练可以使用LVQ1或LVQ2规则,也可以先用LVQ1训练一下,再用LVQ2继续训练。



图标 评论
添加评论