学习矢量量化-LVQ
2017-12-22 17:27
183 查看
简单介绍
学习矢量量化(Learning Vector Quantization,简称LVQ),与1988年提出的一种用于模式分类的有监督学习算法,是一种结构简单、功能强大的有监督式神经网络分类算法。典型的学习矢量量化算法有:LVQ1、LVQ2、LVQ3,其中,前两种算法应用较为广泛,尤其以LVQ2应用最为广泛和有效。
学习矢量量化是一种结构简单、功能强大的有监督式神经网络分类方法。作为一种最近邻原型分类器,LVQ在训练过程中通过对神经元权向量(原型向量)的不断更新,对其学习率的不断调整,能够使不同类别权向量之间的边界逐步收敛至贝叶斯分类边界。算法中,对获胜神经元(最近邻权向量)的选取是通过计算输入样本和权向量之间的距离的大小来判断的。与矢量量化(VQ)相比,LVQ最突出的特点就是其具有自适应性。
与K均值算法类似,学习向量量化(Learning Vector Quantization,简称LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记吗,学习过程中利用这些监督信息来辅助聚类。
分类
有监督学习矢量量化,如LVQ1、LVQ2、LVQ3,它是对有类别属性的样本进行聚类;
无监督学习矢量量化,如硬聚类K-Means,它是对无类别属性的样本进行聚类;
LVQ1算法
给定样本集D={(x1,y1),(x2,y2),...,(xm,ym)},每个样本xj是由n个属性描述的特征向量(xj1,xj2,...,xjn),yi∈Y是样本xj的类别标记。LVQ的目标是学得一组n维原型向量{p1,p2,...,pq},每个原型向量代表一个聚类簇,簇标记ti∈Y。
LVQ算法描述如下所示。
算法第2~12行对原型向量进行迭代优化。在每一轮迭代中,算法随机选取一个有标记的训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致来对原型向量进行相应的更新。在第12行中,若算法的停止条件已满足(例如已经达到最大迭代次数,或者原型向量更新很小甚至不再更新),则将当前原型向量作为最终结果返回。
显然,LVQ的关键是滴6-10行,即如何更新原型向量。直观上看,对样本xj,若最近的原型向量量pi∗与xj的类别标记相同,则令pi∗向xj的方向靠拢,如第7行所示,此时新原型向量为:
p′=pi∗+η⋅(xj−pi∗)
p′与xj之间的距离为
||p′−xj||2=||pi∗+η⋅(xj−pi∗)−xj||2=(1−η)⋅||pi∗−xj||2
令学习率η∈(0,1),则原型向量pi∗在更新为p′之后将更接近sj。
类似的,若pi∗与xj的类别标记不同,则更新之后的原型向量与xj之间的距离将增大为(1+η)⋅||pi∗−xj||2,从而更远离xj。
在学得一组原型向量{p1,p2,...,pq}后,即可实现对样本空间 χ 的簇划分,对任意样本x,它将被划入与其距离最近的原型向量所代表的簇中;换言之,每个原型向量pi定义了与之相关的一个区域Ri,该区域中每个样本与pi的距离不大于它与其他原型向量pi′(i′≠i)的距离,即:
Ri={x∈χ∣||x−pi||2≤||x−pi′||2,i′≠i}
由此形成了对样本空间 χ的簇划分{R1,R2,...,Rq},该划分通常称为“Voronoi剖分”(Voronoi tessellation)。
LVQ2算法
每一次迭代过程只能对一个权向量进行更新,这是LVQ1算法的一个局限。因此,在改进的LVQ2中,提出同时更新两个权向量的方法。寻找输入样本最近邻的两个权向量,若这两个权向量一个与输入样本同类(p′),而另一个与输入样本异类(p′′),同时更新两个权向量:
p′=pi∗+η⋅(xj−pi∗)p′′=pi∗−η⋅(xj−pi∗)
尽管LVQ2算法可以同时更新两个权向量,较LVQ1性能优越,但是仍存在着不足之处:
在训练过程中与输入样本异类的权向量可能不收敛。虽然同时调整输入样本最近邻的两个权向量(一个与输入样本同类,一个与输入样本异类),使他们之间的边界向最优贝叶斯边界靠拢,但是算法又对异类权向量一直进行远离输入样本的调整,却没有考虑其最终的位置,这样会导致该权向量的不收敛;
LVQ算法为体现出数据各维属性在分类过程中重要程度的不同,这一问题的原因归咎于欧氏距离的计算。欧氏距离计算公式是基于数据各维属性重要程度相同的假设,然而,这种假设忽略了这样一个事实:即数据各维属性对分类所做的贡献程度可能会不同。换句话说,对某一输入样本而言,它的全部属性中的一备份可能对分类是非常重要的,是重要的属性;相反,其他的属性对分类的作用可能是次要的,甚至会干扰正确的分类,是次要属性。对这种情况而言,用欧氏距离进行分类显然不够准确,而且实际数据大多是这种情况。因此,如何发现并强调这些重要属性同时忽略那些次要属性称为能否准确对数据分类的关键。
不足
虽然传统LVQ算法性能优越且应用广泛,但是仍有一定不足:
1. 训练过程可能不收敛。原因是由于在寻找最优贝叶斯边界时,对权向量更新的趋势没有给予充分的考虑;
2. 对输入样本各维属性的信息利用不充分,没有体现出各维属性在分类过程中的重要程度的不同。原因是由于在寻找获胜神经元过程中采用的欧氏距离方法,没有考虑到输入样各维属性重要度差异,即假定各维属性对分类的贡献是相同的。
示例
下面以上述数据集进行演示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+η(x1−p5)=(0.725;0.45)+0.1⋅((0.697;0.460)−(0.725;0.445))=(0.722;0.447)
将p5更新为p′后不断重复上述过程,直到达到最大迭代次数或者原型向量不再变化或者变化甚微为止。
学习矢量量化(Learning Vector Quantization,简称LVQ),与1988年提出的一种用于模式分类的有监督学习算法,是一种结构简单、功能强大的有监督式神经网络分类算法。典型的学习矢量量化算法有:LVQ1、LVQ2、LVQ3,其中,前两种算法应用较为广泛,尤其以LVQ2应用最为广泛和有效。
学习矢量量化是一种结构简单、功能强大的有监督式神经网络分类方法。作为一种最近邻原型分类器,LVQ在训练过程中通过对神经元权向量(原型向量)的不断更新,对其学习率的不断调整,能够使不同类别权向量之间的边界逐步收敛至贝叶斯分类边界。算法中,对获胜神经元(最近邻权向量)的选取是通过计算输入样本和权向量之间的距离的大小来判断的。与矢量量化(VQ)相比,LVQ最突出的特点就是其具有自适应性。
与K均值算法类似,学习向量量化(Learning Vector Quantization,简称LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记吗,学习过程中利用这些监督信息来辅助聚类。
分类
有监督学习矢量量化,如LVQ1、LVQ2、LVQ3,它是对有类别属性的样本进行聚类;
无监督学习矢量量化,如硬聚类K-Means,它是对无类别属性的样本进行聚类;
LVQ1算法
给定样本集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} |
显然,LVQ的关键是滴6-10行,即如何更新原型向量。直观上看,对样本xj,若最近的原型向量量pi∗与xj的类别标记相同,则令pi∗向xj的方向靠拢,如第7行所示,此时新原型向量为:
p′=pi∗+η⋅(xj−pi∗)
p′与xj之间的距离为
||p′−xj||2=||pi∗+η⋅(xj−pi∗)−xj||2=(1−η)⋅||pi∗−xj||2
令学习率η∈(0,1),则原型向量pi∗在更新为p′之后将更接近sj。
类似的,若pi∗与xj的类别标记不同,则更新之后的原型向量与xj之间的距离将增大为(1+η)⋅||pi∗−xj||2,从而更远离xj。
在学得一组原型向量{p1,p2,...,pq}后,即可实现对样本空间 χ 的簇划分,对任意样本x,它将被划入与其距离最近的原型向量所代表的簇中;换言之,每个原型向量pi定义了与之相关的一个区域Ri,该区域中每个样本与pi的距离不大于它与其他原型向量pi′(i′≠i)的距离,即:
Ri={x∈χ∣||x−pi||2≤||x−pi′||2,i′≠i}
由此形成了对样本空间 χ的簇划分{R1,R2,...,Rq},该划分通常称为“Voronoi剖分”(Voronoi tessellation)。
LVQ2算法
每一次迭代过程只能对一个权向量进行更新,这是LVQ1算法的一个局限。因此,在改进的LVQ2中,提出同时更新两个权向量的方法。寻找输入样本最近邻的两个权向量,若这两个权向量一个与输入样本同类(p′),而另一个与输入样本异类(p′′),同时更新两个权向量:
p′=pi∗+η⋅(xj−pi∗)p′′=pi∗−η⋅(xj−pi∗)
尽管LVQ2算法可以同时更新两个权向量,较LVQ1性能优越,但是仍存在着不足之处:
在训练过程中与输入样本异类的权向量可能不收敛。虽然同时调整输入样本最近邻的两个权向量(一个与输入样本同类,一个与输入样本异类),使他们之间的边界向最优贝叶斯边界靠拢,但是算法又对异类权向量一直进行远离输入样本的调整,却没有考虑其最终的位置,这样会导致该权向量的不收敛;
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 |
令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+η(x1−p5)=(0.725;0.45)+0.1⋅((0.697;0.460)−(0.725;0.445))=(0.722;0.447)
将p5更新为p′后不断重复上述过程,直到达到最大迭代次数或者原型向量不再变化或者变化甚微为止。
相关文章推荐
- 学习矢量量化(LVQ)
- 机器学习算法与Python实践(6) - 学习矢量量化(LVQ)
- LVQ学习矢量量化
- 聚类算法——python实现学习向量量化(LVQ)算法
- LVQ学习向量量化神经网络
- [ML]聚类之学习向量量化LVQ
- LVQ学习向量量化网络
- 机器学习之学习向量量化(LVQ)
- LVQ,Learning Vector Quantization,学习向量量化
- Data Analysis学习笔记 --- python数据清洗矢量处理字符串
- MATLAB学习笔记(六):数值数组及向量化运算(数组创建)
- 第四次作业 LBG矢量量化算法
- LBG矢量量化算法
- ArcEngine 9.3 学习笔记(十一):地图输出(Printer类,PageLayoutControl控件打印出图,栅格格式文件输出,矢量格式文件输出)
- 视频编解码学习之三:变换,量化与熵编码
- 原型聚类之学习向量量化及Python实现
- 11月2日云栖精选夜读:BNN - 基于low-bits量化压缩的跨平台深度学习框架 编辑
- 孤立词语音识别之Vector Quantization(矢量量化)
- 量化交易学习:交易数据自动抓取
- 11月2日云栖精选夜读:BNN - 基于low-bits量化压缩的跨平台深度学习框架