学习向量量化 (LVQ)

本贴最后更新于 1584 天前,其中的信息可能已经时移世异

学习向量量化

“学习向量量化”(Learning Vector Quantization,简称LVQ)是一种利用监督信息辅助的聚类算法,像K-Meas算法一样也是通过调整一组类似于质心的点来进行聚类。


算法描述

假设给定样本 D={(X1,Y1),(X2,Y2),...,(Xm,Ym)},X 表示样本的属性,Y 表示样本的类别标记。LVQ 目的是学习一组 n 维原型向量{P1,P2,...Pq},当样本点距离这组原型向量的某个分向量距离最近时那么它的类别标记应当与这个原型分向量一致。原型向量的训练过程和 K-Means 算法大同小异,初始时通过随机一组原型向量(可以从样本点中随机提取),当与原型向量最近的样本点类别标记与此原型向量的类别不同时,那么要调整原型向量,使得原型向量离当前的样本点远一些,相反则需要调整它离当前样本点近一些,当算法满足停止条件时(达到最大迭代次数,或原型向量更新变化很小甚至不变时)则可以返回这一组原型向量。

微信图片 20210303105002.jpg

代码实现:

生成数据集:

X=datasets.make_blobs(n_samples=1000,centers=3) #1000个样本点分为3类

初始化原型向量:

P=np.zeros((q,col)) #原型向量 for i in range(q): #初始化原型向量 index=np.where(sample[1]==Label[i])[0] choose=np.random.randint(0,len(index),1) P[i,:]=sample[0][index[choose],:]

训练主体:

for i in range(1000): #训练 choose=np.random.randint(0,row,1) #随机选取一个样本 dis=np.linalg.norm(sample[0][choose,:]-P,axis=1) #计算与原型向量的距离 y=dis.tolist().index(min(dis)) #获取距离最近的原型向量下标 if Label[y]==sample[1][choose]: #更新原型向量 P[y,:]=P[y,:]+eta*(sample[0][choose,:]-P[y,:]) else: P[y,:]=P[y,:]-eta*(sample[0][choose,:]-P[y,:])

完整代码:

from sklearn import datasets import matplotlib.pyplot as plt import numpy as np X=datasets.make_blobs(n_samples=1000,centers=3) #1000个样本点分为3类 def lvq(sample,q,Label,eta): if q!=len(Label): return 0 row,col=np.shape(sample[0]) #获取样本集的规格 P=np.zeros((q,col)) #原型向量 for i in range(q): #初始化原型向量 index=np.where(sample[1]==Label[i])[0] choose=np.random.randint(0,len(index),1) P[i,:]=sample[0][index[choose],:] for i in range(1000): #训练 choose=np.random.randint(0,row,1) #随机选取一个样本 dis=np.linalg.norm(sample[0][choose,:]-P,axis=1) #计算与原型向量的距离 y=dis.tolist().index(min(dis)) #获取距离最近的原型向量下标 if Label[y]==sample[1][choose]: #更新原型向量 P[y,:]=P[y,:]+eta*(sample[0][choose,:]-P[y,:]) else: P[y,:]=P[y,:]-eta*(sample[0][choose,:]-P[y,:]) IDX=[] #分类标记 for i in sample[0]: #以距离最近的标记为样本的类别 D=np.linalg.norm(i-P,axis=1) y=D.tolist().index(min(D)) IDX.append(Label[y]) plot(IDX,sample[0],max(Label)+1,P) return P def plot(a,X,k,p): #绘画板块 m=k for j in range(m): index=[i for i,v in enumerate(a) if v==j] x=[] y=[] for k in index: x.append(X[k][0]) y.append(X[k][1]) plt.scatter(x,y) plt.scatter(p[:,0],p[:,1],marker='x') plt.show()

测试代码:

lvq(X,5,[0,1,0,1,2],0.3)
array([[ 7.02402226, 3.74801884], [-10.38672182, 3.03633487], [ 8.20578187, 4.94912081], [ -8.30953565, 3.69883677], [ 7.69178827, -7.90175793]])

Figure1.png

1 操作
Lonery 在 2021-03-03 15:00:50 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 178 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 736 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 502 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 545 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 10 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 193 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 87 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • 自由行
    1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 4 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 71 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖
  • 笔记

    好记性不如烂笔头。

    311 引用 • 794 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 2 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    954 引用 • 944 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    10 引用 • 77 回帖 • 1 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 561 关注
  • danl
    177 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 522 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 3 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    77 引用 • 37 回帖