学习向量量化 (LVQ)

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

学习向量量化

“学习向量量化”(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 更新了该帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖 • 2 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 393 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • Word
    13 引用 • 40 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    410 引用 • 3588 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    28 引用 • 226 回帖 • 135 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 495 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 175 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖 • 1 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    77 引用 • 389 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 116 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    335 引用 • 324 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 15 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 608 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 638 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 3 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 83 关注