漫谈 Clustering (番外篇): Vector Quantization

kmeans特征提取原理,详细代码图解分析 一、数据、数据预处理 2.1数据:  下载的CIFAR-10数据库;其中的每个data_batch都是10000x3072大小的,即有1w个样本图片,每个图片都是32*32且rgb三通道的,这里的每一行表示一个样本。 提取40W个训练patches: patches = zeros(numPatches, rfSize*rfSize*3);%400000*108 for i=1:numP 阅读详情

转:http://blog.pluskid.org/?p=57

本文是“漫谈 Clustering 系列”中的第 3 篇,参见本系列的其他文章。

stallman

在接下去说其他的聚类算法之前,让我们先插进来说一说一个有点跑题的东西:Vector Quantization 。这项技术广泛地用在信号处理以及数据压缩等领域。事实上,在 JPEG 和 MPEG-4 等多媒体压缩格式里都有 VQ 这一步。

Vector Quantization 这个名字听起来有些玄乎,其实它本身并没有这么高深。大家都知道,模拟信号是连续的值,而计算机只能处理离散的数字信号,在将模拟信号转换为数字信号的时候,我们可以用区间内的某一个值去代替着一个区间,比如,[0, 1) 上的所有值变为 0 ,[1, 2) 上的所有值变成 1 ,如此类推。其这就是一个 VQ 的过程。一个比较正式一点的定义是:VQ 是将一个向量空间中的点用其中的一个有限子集来进行编码的过程。

一个典型的例子就是图像的编码。最简单的情况,考虑一个灰度图片,0 为黑色,1 为白色,每个像素的值为 [0, 1] 上的一个实数。现在要把它编码为 256 阶的灰阶图片,一个最简单的做法就是将每一个像素值 x 映射为一个整数 floor(x*255) 。当然,原始的数据空间也并不以一定要是连续的。比如,你现在想要把压缩这个图片,每个像素只使用 4 bit (而不是原来的 8 bit)来存储,因此,要将原来的 [0, 255] 区间上的整数值用 [0, 15] 上的整数值来进行编码,一个简单的映射方案是 x*15/255 。

VQ 2

VQ 2

不过这样的映射方案颇有些 Naive ,虽然能减少颜色数量起到压缩的效果,但是如果原来的颜色并不是均匀分布的,那么的出来的图片质量可能并不是很好。例如,如果一个 256 阶灰阶图片完全由 0 和 13 两种颜色组成,那么通过上面的映射就会得到一个全黑的图片,因为两个颜色全都被映射到 0 了。一个更好的做法是结合聚类来选取代表性的点。

实际做法就是:将每个像素点当作一个数据,跑一下 K-means ,得到 k 个 centroids ,然后用这些 centroids 的像素值来代替对应的 cluster 里的所有点的像素值。对于彩色图片来说,也可以用同样的方法来做,例如 RGB 三色的图片,每一个像素被当作是一个 3 维向量空间中的点。

用本文开头那张 Rechard Stallman 大神的照片来做一下实验好了,VQ 2、VQ 10 和 VQ 100 三张图片分别显示聚类数目为 2 、10 和 100 时得到的结果,可以看到 VQ 100 已经和原图非常接近了。把原来的许多颜色值用 centroids 代替之后,总的颜色数量减少了,重复的颜色增加了,这种冗余正是压缩算法最喜欢的。考虑一种最简单的压缩办法:单独存储(比如 100 个)centroids 的颜色信息,然后每个像素点存储 centroid 的索引而不是颜色信息值,如果一个 RGB 颜色值需要 24 bits 来存放的话,每个(128 以内的)索引值只需要 7 bits 来存放,这样就起到了压缩的效果。

VQ 100

VQ 100

VQ 10

VQ 10

实现代码很简单,直接使用了 SciPy 提供的 kmeans 和 vq 函数,图像读写用了 Python Image Library :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/python
 
from scipy.cluster.vq import kmeans, vq
from numpy import array, reshape, zeros
from mltk import image
 
vqclst = [2, 10, 100, 256]
 
data = image.read('example.jpg')
(height, width, channel) = data.shape
 
data = reshape(data, (height*width, channel))
for k in vqclst:
    print 'Generating vq-%d...' % k
    (centroids, distor) = kmeans(data, k)
    (code, distor) = vq(data, centroids)
    print 'distor: %.6f' % distor.sum()
    im_vq = centroids[code, :]
    image.write('result-%d.jpg' % k, reshape(im_vq,
        (height, width, channel)))

当然,Vector Quantization 并不一定要用 K-means 来做,各种能用的聚类方法都可以用,只是 K-means 通常是最简单的,而且通常都够用了。

Python语音情感识别:基于矢量量化的语音识别 矢量量化(Vector Quantization,简称VQ)是一种将连续信号离散化的技术,它可以将连续的语音信号转换为离散的向量表示。在语音情感识别中,我们可以利用矢量量化技术将语音信号转换为特征向量,并基于这些特征向量进行情感分类。通过将连续的语音信号转换为离散的特征向量,并使用机器学习算法进行情感分类,我们可以实现对语音情感的识别。然后,我们使用训练好的情感分类器对这些特征向量进行预测,得到情感分类的结果。在训练阶段,我们使用K均值聚类算法进行矢量量化,将连续的语音特征转换为离散的特征向量。 阅读详情

相关推荐

Vector Quantization - K-Means:一种使用 K-Means 算法训练矢量量化码本的简单算法。-matlab开发

该函数用于训练用于矢量量化的码本。 首先将数据集拆分为两个集群,然后找到每个集群的均值(质心)。 找到每个向量与这些质心的距离,并且每个向量都与一个集群相关联。 每个簇的向量均值首先替换质心。 如果总距离没有显着提高,则质心每个都分裂为两个。 这种情况一直持续到达到所需的集群数量并且改进不大。

图形聚类算法:MCL

Different Clustering Vector Clustering 我们在描述一个人时,常常会使用他所拥有的特点来表示,比如说:张三,男,高个子,有点壮。那么,这就可以用四维向量来表示,如果再复杂一些,就是更高维的向量空间了。下图是在二维空间之中的分布情况,可以较为直观的看出,以红色虚线为界,可以分为两个类别。 Graph Clustering 和特征聚类不同,图聚类比较难以观察...

图特摩斯科技-博客 1万+

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

R语言聚类分析——代码解析

+(1)实验数据:iris鸢尾花数据 datd(iris) head(iris) Sepal.Length Sepal.Width Petal.Length Petal.WidthSpecies 1 5.1 3.5 1.4 0.2 ...

君莫笑的博客 8575

HP MSA 2050磁盘阵列配置步骤

一、盘阵与服务器直接连接 1.1 单控制器配置:一台服务器/ 一个 HBA/ 单路径 1.2 双控制器配置:两台服务器/ 每台服务器一个 HBA/ 双路径 二、通过交换机(一般光纤交换机) 2.1 双控制器配置:两台服务器/ 两台交换机 三、配置MSA2050 3.1在完成硬件安装后,可以访问控制器模块的基于 Web 的管理界面 SMU (存储 管理实用程序),以便监视和管理此存储系统。 首先...

jw5493的博客 1万+

silvaco例子库学习—mos1ex02

mos1ex02相比于第一个例子,主要进行了mos的输出特性仿真,工艺结构是一样的,所以就只简单讨论一下atlas特性仿真的部分。

weixin_61913839的博客 852

[转帖]漫谈 Clustering 系列

<br />转自 浙大 张驰原 的博客。http://blog.pluskid.org<br /> 漫谈 Clustering 系列<br />http://blog.pluskid.org/?page_id=78<br /> <br />内容包括:漫谈 Clustering (1): k-means漫谈 Clustering (2): k-medoids漫谈 Clustering (番外篇): Vector Quantization漫谈 Clustering (3): Gaussian Mixture M

kit_147的专栏 4048

国产系统迁移实战:在银河麒麟V10上搞定Wine32位支持,让老Windows软件跑起来

本文详细介绍了在银河麒麟V10操作系统上构建Wine32位支持的全过程,帮助用户解决Windows应用迁移难题。从系统架构差异分析到Wine环境配置,再到实战应用部署与优化,提供了一套完整的解决方案,确保老Windows软件在国产系统上稳定运行。

weixin_32288959的博客 648

漫谈cluster

<br />http://blog.pluskid.org/?page_id=78<br /> 漫谈 Clustering (1): k-means漫谈 Clustering (2): k-medoids漫谈 Clustering (番外篇): Vector Quantization漫谈 Clustering (3): Gaussian Mixture Model漫谈 Clustering (番外篇): Expectation Maximization漫谈 Clustering (4): Spectral

#pragma once = 一期一会 777

从零开始:用ZEMAX设计双高斯照相物镜的完整流程(附55mm焦距实例)

本文详细介绍了使用ZEMAX设计双高斯照相物镜的完整流程,特别针对55mm焦距实例进行了深入解析。从初始结构选择、参数设置到优化策略和像质分析,逐步指导读者掌握这一经典光学设计方法。通过具体实例展示了如何实现卓越的像差校正,适用于35mm相机标准镜头等应用场景。

onion的博客 704

YOLO26 从零到工业落地全实战:自定义训练+多场景测试+边缘部署预备,踩坑实测100%可复现

很多人觉得训练是核心,其实不是——数据集的质量,直接决定了你模型的上限。我见过太多人,标注不规范、格式错误、数据集划分混乱,然后疯狂调参,训了几百轮还是不收敛,纯属白费功夫。我这次用的是工业零件缺陷检测自定义数据集,共3个类别:划痕、毛刺、变形,总计1200张图片,给大家讲一套标准的、可复现的数据集制作流程,不管你是做工业检测、安防、交通,都能直接套用。很多人拿到数据集,直接用默认命令训练,然后抱怨精度上不去。默认参数是给COCO数据集用的,你的自定义数据集,必须针对性调参,不然根本达不到最优效果。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 569

漫谈Clustering 系列

今天在搜normalized cut的时候,发现一个

Jack_Free的专栏 973

6、云计算中的多核技术:架构、并行性与局限性

本博文深入探讨了云计算中多核技术的架构、并行性及其局限性。文章详细介绍了多核处理器的基础概念、并行硬件和软件的设计原理,并对硬件和软件并行性进行了分类和分析。同时,文章讨论了多核架构在实际应用中面临的挑战,如功率墙、内存墙和ILP墙等问题,并提出了应对策略。此外,还总结了多核技术在高性能计算、实时处理和云计算等领域的应用机遇。文章旨在帮助读者更好地理解多核技术的关键问题,并为未来的技术探索提供方向。

java5的博客 122

聚类学习

很好的一个聚类方面的学习系列:          http://blog.pluskid.org/?page_id=78 漫谈 Clustering 系列 漫谈 Clustering (1): k-means漫谈 Clustering (2): k-medoids漫谈 Clustering (番外篇): Vector Quantization漫谈 Clusteri

leiyifight的专栏 1135

《MySQL 入门教程》第 03 篇 管理数据库

本篇主要介绍 MySQL 数据库的创建、查看、选择和删除操作,包括使用 mysql 命令行和 MySQL Workbench 图形工具两种方式。

Tony.Dong的专栏 3521

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

R语言聚类分析

完美观看体验请至公众号查看本文。,专注R语言在临床医学中的使用,R语言数据分析和可视化。

医学和生信笔记的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

R语言小代码(聚类练习)

任务: 参考资料1 参考资料2 在篮球运动中,一般情况下,控球后卫与得分后卫的助攻数较多,小前锋的得分数较多,而大前锋与中锋的助攻数与得分数较少。下表为21名篮球运动员每分钟助攻数和每分钟得分数的数据集,请运用K-Means聚类算法将这21名篮球运动员划分为5类,并通过画图判断他们分别属于什么位置。 assists_per_minute points_per_minute 1 0.0888 0.5885 2 0.1399 0.8291 3 0.0747 0.4974 4 0.

weixin_43678689的博客 4284

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Learning Vector Quantization详解

Learning Vector Quantization详解 第十八次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。这一篇文章是原型聚类中介绍的第二个算法,主要是谈一谈“学习向量量化”(Learning&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;\ Vector&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbs

Ἥλιος 2055

R语言 Kmeans聚类、PAM聚类、层次聚类、EM聚类

关注微信公共号:小程在线 关注优快云博客:程志伟的博客 R版本:3.6.1 Kmeans函数:kmeans聚类 pam函数:PAM聚类 hclust函数:层次聚类 cutree函数:层次聚类解 Mclust函数:EM聚类 mclustBIC函数:EM聚类 > ##############对模拟数据的K-Means聚类 > setwd('G:\\R语言\\大三下半年\...

程志伟的博客 1万+

R语言--聚类分析

聚类分析是在样本个体的类别归属未知的情况下的分类方法,根据目的聚类分析可以分为:指标聚类,指标降维从而选择有代表性的指标;样品聚类,找出样品间的共性。 聚类算法: K-均值聚类(K-Means) K-中心点聚类(K-Medoids) 密度聚类(Densit-based Spatial Clustering of Application with Noise,DBSCAN) 系谱聚类(H...

weixin_30920597的博客 2789
上一篇: GIST特征描述符使用
下一篇: 漫谈 Clustering (1): k-means
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值