学习矢量量化(Learning Vector Quantization,简称LVQ),与1988年提出的一种用于模式分类的有监督学习算法,是一种结构简单、功能强大的有监督式神经网络分类算法。典型的学习矢量量化算法有:LVQ1、LVQ2、LVQ3,其中,前两种算法应用较为广泛,尤其以LVQ2应用最为广泛和有效。
学习矢量量化是一种结构简单、功能强大的有监督式神经网络分类方法。作为一种最近邻原型分类器,LVQ在训练过程中通过对神经元权向量(原型向量)的不断更新,对其学习率的不断调整,能够使不同类别权向量之间的边界逐步收敛至贝叶斯分类边界。算法中,对获胜神经元(最近邻权向量)的选取是通过计算输入样本和权向量之间的距离的大小来判断的。与矢量量化(VQ)相比,LVQ最突出的特点就是其具有自适应性。
与K均值算法类似,学习向量量化(Learning Vector Quantization,简称LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记吗,学习过程中利用这些监督信息来辅助聚类。
给定样本集 D={(x1,y1),(x2,y2),...,(xm,ym)} ,每个样本 xj 是由 n 个属性描述的特征向量 (xj1,xj2,...,xjn),yi∈Y 是样本 xj 的类别标记。LVQ的目标是学得一组 n 维原型向量 {p1,p2,...,pq} ,每个原型向量代表一个聚类簇,簇标记 ti∈Y 。
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(1≤i≤q) 的距离: dji=||xj−pi||2 |
5 | 找出与 xj 距离最近的原型向量 pi∗,i∗=argmini∈{1,2,...,q}dji |
6 | if yj=ti∗ then |
7 | p′=pi∗+η⋅(xj−pi∗) |
8 | else |
9 | p′=pi∗−η⋅(xj−pi∗) |
10 | end if |
11 | 将原型向量 pi∗ 更新为 p′ |
12 | until 满足停止条件 |
输出 | 原型向量 {p1,p2,...,pq} |
算法第2~12行对原型向量进行迭代优化。在每一轮迭代中,算法随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致来对原型向量进行相应的更新。在第12行中,若算法的停止条件已满足(例如已经达到最大迭代次数,或者原型向量更新很小甚至不再更新),则将当前原型向量作为最终结果返回。
显然,LVQ的关键是滴6-10行,即如何更新原型向量。直观上看,对样本 xj ,若最近的原型向量量 pi∗ 与 xj 的类别标记相同,则令 pi∗ 向 xj 的方向靠拢,如第7行所示,此时新原型向量为:
令学习率 η∈(0,1) ,则原型向量 pi∗ 在更新为 p′ 之后将更接近 sj 。
类似的,若 pi∗ 与 xj 的类别标记不同,则更新之后的原型向量与 xj 之间的距离将增大为 (1+η)⋅||pi∗−xj||2 ,从而更远离 xj 。
在学得一组原型向量 {p1,p2,...,pq} 后,即可实现对样本空间 χ 的簇划分,对任意样本 x ,它将被划入与其距离最近的原型向量所代表的簇中;换言之,每个原型向量 pi 定义了与之相关的一个区域 Ri ,该区域中每个样本与 pi 的距离不大于它与其他原型向量 pi′(i′≠i) 的距离,即:
每一次迭代过程只能对一个权向量进行更新,这是LVQ1算法的一个局限。因此,在改进的LVQ2中,提出同时更新两个权向量的方法。寻找输入样本最近邻的两个权向量,若这两个权向量一个与输入样本同类( p′ ),而另一个与输入样本异类( p′′ ),同时更新两个权向量:
虽然传统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 得到新原型向量: