学习矢量量化-LVQ

简单介绍

      学习矢量量化(Learning Vector Quantization,简称LVQ),与1988年提出的一种用于模式分类的有监督学习算法,是一种结构简单、功能强大的有监督式神经网络分类算法。典型的学习矢量量化算法有:LVQ1、LVQ2、LVQ3,其中,前两种算法应用较为广泛,尤其以LVQ2应用最为广泛和有效。
      学习矢量量化是一种结构简单、功能强大的有监督式神经网络分类方法。作为一种最近邻原型分类器,LVQ在训练过程中通过对神经元权向量(原型向量)的不断更新,对其学习率的不断调整,能够使不同类别权向量之间的边界逐步收敛至贝叶斯分类边界。算法中,对获胜神经元(最近邻权向量)的选取是通过计算输入样本和权向量之间的距离的大小来判断的。与矢量量化(VQ)相比,LVQ最突出的特点就是其具有自适应性。
      与K均值算法类似,学习向量量化(Learning Vector Quantization,简称LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记吗,学习过程中利用这些监督信息来辅助聚类。


分类

  1. 有监督学习矢量量化,如LVQ1、LVQ2、LVQ3,它是对有类别属性的样本进行聚类;
  2. 无监督学习矢量量化,如硬聚类K-Means,它是对无类别属性的样本进行聚类;

LVQ1算法

      给定样本集 D={(x1,y1),(x2,y2),...,(xm,ym)} ,每个样本 xj 是由 n 个属性描述的特征向量 (xj1,xj2,...,xjn),yiY 是样本 xj 的类别标记。LVQ的目标是学得一组 n 维原型向量 {p1,p2,...,pq} ,每个原型向量代表一个聚类簇,簇标记 tiY
LVQ算法描述如下所示。

步骤 学习向量量化算法伪代码
输入 样本集合 D={(x1,y1),(x2,y2),...,(xm,ym)}
原型向量个数q,各原型向量预设的类别标记 {t1,t2,...,tq}
学习率 η(0,1)
过程
1 初始化一组原型向量 {p1,p2,...,pq}
2 repeat
3       从样本集 D 中随机选取样本 (xj,yj)
4       计算样本 xj pi(1iq) 的距离: dji=||xjpi||2
5       找出与 xj 距离最近的原型向量 pi,i=argmini{1,2,...,q}dji
6        if    yj=ti    then
7              p=pi+η(xjpi)
8        else
9              p=piη(xjpi)
10        end    if
11       将原型向量 pi 更新为 p
12 until 满足停止条件
输出 原型向量 {p1,p2,...,pq}

      算法第2~12行对原型向量进行迭代优化。在每一轮迭代中,算法随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致来对原型向量进行相应的更新。在第12行中,若算法的停止条件已满足(例如已经达到最大迭代次数,或者原型向量更新很小甚至不再更新),则将当前原型向量作为最终结果返回。
      显然,LVQ的关键是滴6-10行,即如何更新原型向量。直观上看,对样本 xj ,若最近的原型向量量 pi xj 的类别标记相同,则令 pi xj 的方向靠拢,如第7行所示,此时新原型向量为:

p=pi+η(xjpi)

p xj 之间的距离为
||pxj||2=||pi+η(xjpi)xj||2=(1η)||pixj||2

令学习率 η(0,1) ,则原型向量 pi 在更新为 p 之后将更接近 sj

      类似的,若 pi xj 的类别标记不同,则更新之后的原型向量与 xj 之间的距离将增大为 (1+η)||pixj||2 ,从而更远离 xj
      在学得一组原型向量 {p1,p2,...,pq} 后,即可实现对样本空间 χ 的簇划分,对任意样本 x ,它将被划入与其距离最近的原型向量所代表的簇中;换言之,每个原型向量 pi 定义了与之相关的一个区域 Ri ,该区域中每个样本与 pi 的距离不大于它与其他原型向量 pi(ii) 的距离,即:

Ri={xχ||xpi||2||xpi||2,ii}

      由此形成了对样本空间 χ 的簇划分 {R1,R2,...,Rq} ,该划分通常称为“Voronoi剖分”(Voronoi tessellation)。


LVQ2算法

      每一次迭代过程只能对一个权向量进行更新,这是LVQ1算法的一个局限。因此,在改进的LVQ2中,提出同时更新两个权向量的方法。寻找输入样本最近邻的两个权向量,若这两个权向量一个与输入样本同类( p ),而另一个与输入样本异类( p ),同时更新两个权向量:

p=pi+η(xjpi)
p=piη(xjpi)

      尽管LVQ2算法可以同时更新两个权向量,较LVQ1性能优越,但是仍存在着不足之处:

  1. 在训练过程中与输入样本异类的权向量可能不收敛。虽然同时调整输入样本最近邻的两个权向量(一个与输入样本同类,一个与输入样本异类),使他们之间的边界向最优贝叶斯边界靠拢,但是算法又对异类权向量一直进行远离输入样本的调整,却没有考虑其最终的位置,这样会导致该权向量的不收敛;
  2. LVQ算法为体现出数据各维属性在分类过程中重要程度的不同,这一问题的原因归咎于欧氏距离的计算。欧氏距离计算公式是基于数据各维属性重要程度相同的假设,然而,这种假设忽略了这样一个事实:即数据各维属性对分类所做的贡献程度可能会不同。换句话说,对某一输入样本而言,它的全部属性中的一备份可能对分类是非常重要的,是重要的属性;相反,其他的属性对分类的作用可能是次要的,甚至会干扰正确的分类,是次要属性。对这种情况而言,用欧氏距离进行分类显然不够准确,而且实际数据大多是这种情况。因此,如何发现并强调这些重要属性同时忽略那些次要属性称为能否准确对数据分类的关键。

不足

      虽然传统LVQ算法性能优越且应用广泛,但是仍有一定不足:
1. 训练过程可能不收敛。原因是由于在寻找最优贝叶斯边界时,对权向量更新的趋势没有给予充分的考虑;
2. 对输入样本各维属性的信息利用不充分,没有体现出各维属性在分类过程中的重要程度的不同。原因是由于在寻找获胜神经元过程中采用的欧氏距离方法,没有考虑到输入样各维属性重要度差异,即假定各维属性对分类的贡献是相同的。


示例

编号 密度 含糖量 编号 密度 含糖量 编号 密度 含糖量
1 0.697 0.46 11 0.245 0.057 21 0.748 0.232
2 0.774 0.376 12 0.343 0.099 22 0.714 0.346
3 0.634 0.264 13 0.639 0.161 23 0.483 0.312
4 0.608 0.318 14 0.657 0.198 24 0.478 0.437
5 0.556 0.215 15 0.36 0.37 25 0.525 0.369
6 0.403 0.237 16 0.593 0.042 26 0.751 0.489
7 0.481 0.149 17 0.719 0.103 27 0.532 0.472
8 0.437 0.211 18 0.359 0.188 28 0.473 0.376
9 0.666 0.091 19 0.339 0.241 29 0.725 0.445
10 0.243 0.267 20 0.282 0.257 30 0.446 0.459

下面以上述数据集进行演示LVQ的学习过程。

      令9-21号样本的类别标记为 c2 ,其他样本的类别标记为 c1 。假定 q=5 ,即学习目标是找到5个原型向量 q1,q2,q3,q4,q5 ,并假定其对应的类别标记分别为 c1,c2,c2,c1,c1

      算法开始时,根据样本的类别标记和簇的预设类别标记对原型向量进行随机初始化,假设初始化为样本 x5,x12,x18,x23,x29 。在第一轮迭代中,假定随机选取的样本为 x1 ,该样本与当前原型向量 q1,q2,q3,q4,q5 的距离分别为 0.283,0.506,0.434,0.260,0.032 。由于原型向量 p5 x1 距离最近且两者具有相同的类别标记 c1 ,假定学习率 η=0.1 ,则LVQ更新 p5 得到新原型向量:

p=p5+η(x1p5)
=(0.725;0.45)+0.1((0.697;0.460)(0.725;0.445))
=(0.722;0.447)

      将 p5 更新为 p 后不断重复上述过程,直到达到最大迭代次数或者原型向量不再变化或者变化甚微为止。

你可能感兴趣的:(python)