奇异值分解(SVD)和简单图像压缩
SVD(Singular Value Decomposition,奇异值分解)
算法优缺点:
- 优点:简化数据,去除噪声,提高算法结果
- 缺点:数据的转换可能难于理解
- 适用数据类型:数值型数据
算法思想:
很多情况下,数据的一小部分包含了数据的绝大部分信息,线性代数中有很多矩阵的分解技术可以将矩阵表示成新的易于处理的形式,不同的方法使用与不同的情况。最常见的就是SVD,SVD将数据分成三个矩阵U(mm),sigma(mn),VT(nn),这里得到的sigma是一个对角阵,其中对角元素为奇异值,并且它告诉了我们重要的特征。
这里的实现用的也是numpy种的函数linalg.svd()
实例:用SVD进行图像压缩
这里的数据集是前面用于手写识别的一个数据,大小为32*32=1024像素,因为进行svd之后我们的数据变成一堆浮点数,所以输出函数要改进一下,设置一个阀值(这个值的设置会影响显示效果)。可以看出完成压缩之后我们只需要两个奇异值和U、VT两个矩阵,共计64+64+2=130个像素,达到了近十倍压缩比,而且还原出来的图像基本不变

- *********orignal matrix**************
- 00000000000000110000000000000000
- 00000000000011111100000000000000
- 00000000000111111110000000000000
- 00000000001111111111000000000000
- 00000000111111111111100000000000
- 00000001111111111111110000000000
- 00000000111111111111111000000000
- 00000000111111100001111100000000
- 00000001111111000001111100000000
- 00000011111100000000111100000000
- 00000011111100000000111110000000
- 00000011111100000000011110000000
- 00000011111100000000011110000000
- 00000001111110000000001111000000
- 00000011111110000000001111000000
- 00000011111100000000001111000000
- 00000001111100000000001111000000
- 00000011111100000000001111000000
- 00000001111100000000001111000000
- 00000001111100000000011111000000
- 00000000111110000000001111100000
- 00000000111110000000001111100000
- 00000000111110000000001111100000
- 00000000111110000000011111000000
- 00000000111110000000111111000000
- 00000000111111000001111110000000
- 00000000011111111111111110000000
- 00000000001111111111111110000000
- 00000000001111111111111110000000
- 00000000000111111111111000000000
- 00000000000011111111110000000000
- 00000000000000111111000000000000
- ****reconstructed matrix using 3 singular values******
- 00000000000000000000000000000000
- 00000000000000000000000000000000
- 00000000000010111110000000000000
- 00000000000011111110000000000000
- 00000000000111111111000000000000
- 00000000001111111111110000000000
- 00000000001111111111110000000000
- 00000000011100000000111000000000
- 00000000111100000000111100000000
- 00000001111100000000111100000000
- 00000001111100000000011100000000
- 00000001111100000000011100000000
- 00000001111100000000011100000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001110000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001111000000
- 00000000111100000000001110000000
- 00000000111100000000111100000000
- 00000000001111111111111000000000
- 00000000001111111111110000000000
- 00000000001111111111110000000000
- 00000000000011111111110000000000
- 00000000000011111111100000000000
- 00000000000000000000000000000000
#coding=utf-8
from numpy import *
def printMat(inMat, thresh=0.8):
for i in range(32):
for j in range(32):
if float(inMat[i,j]) > thresh:
print 1,
else:
print 0,
print ' ' def imgCompress(numSV=3, thresh=0.8):
myl = []
for line in open('0_5.txt').readlines():
newRow = []
for i in range(32):
newRow.append(int(line[i]))
myl.append(newRow)
myMat = mat(myl)
print '*********orignal matrix**************'
printMat(myMat,thresh)
U, sigmal, VT = linalg.svd(myMat)
SigRecon =mat(zeros((numSV,numSV)))
for k in range(numSV):
SigRecon[k,k] = sigmal[k]
reconMat = U[:,:numSV] * SigRecon * VT[:numSV,:]
print "****reconstructed matrix using %d singular values******" % numSV
printMat(reconMat, thresh) def main():
imgCompress() if __name__ == '__main__':
main()
机器学习笔记索引
奇异值分解(SVD)和简单图像压缩的更多相关文章
- [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
		本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value d ... 
- 一步步教你轻松学奇异值分解SVD降维算法
		一步步教你轻松学奇异值分解SVD降维算法 (白宁超 2018年10月24日09:04:56 ) 摘要:奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分 ... 
- 数学基础系列(六)----特征值分解和奇异值分解(SVD)
		一.介绍 特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景. 奇异值分解是一个有着很明显的物理意义的一种方法,它可 ... 
- 转载:奇异值分解(SVD) --- 线性变换几何意义(下)
		本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ... 
- 奇异值分解(SVD) --- 几何意义
		原文:http://blog.sciencenet.cn/blog-696950-699432.html PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD ... 
- 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维
		关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ... 
- 用 GSL 求解超定方程组及矩阵的奇异值分解(SVD)
		用 GSL 求解超定方程组及矩阵的奇异值分解(SVD) 最近在学习高动态图像(HDR)合成的算法,其中需要求解一个超定方程组,因此花了点时间研究了一下如何用 GSL 来解决这个问题. GSL 里是有最 ... 
- 奇异值分解(SVD)原理详解及推导(转载)
		转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ... 
- 奇异值分解(SVD) --- 几何意义 (转载)
		PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ... 
- 奇异值分解(SVD)原理详解及推导 (转载)
		转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ... 
随机推荐
- Advanced Office Password Recovery如何设置快捷方式
			一般软件安装成功之后都会在桌面上形成快捷方式以方便使用,但是一些用户发现Advanced Office Password Recovery这种office密码破解工具安装成功后桌面上没有出现快捷方式, ... 
- ob_start()
			ob_start()函数用于打开缓冲区 1.用于header()之前 ob_start(); //打开缓冲区 echo "Hellon"; //输出 header("lo ... 
- 教你一招:win 7 或win 10右键菜单 添加获取管理员权限
			当我们从经典的 windows XP 系统升级到 win 7 或 win 10,我们会发现,想要删除一些文件时,总是提示被占用或者是没有权限,很是烦恼. 这里,写下解决这个烦恼的办法,以安慰心里的不平 ... 
- Win10家庭版升级专业版密钥
			步骤如下: Win10 Home 版本基础上,设置—更新安全—激活—更改产品密钥(或者 我的电脑右键—属性—右下角更改产品密钥),输入 VK7JG-NPHTM-C97JM-9MPGT-3V66T 
- 源码升级安装python
			1.下载 python: https://www.python.org/downloads/release/python-2712/ 2.编译安装 sudo mkdir /usr/local/pyth ... 
- mogodb3.2源码安装
			mogodb3.2源码安装 下载链接: http://www.mongodb.org/downloads 1.环境准备: 1.mkdir -p /data/tgz #创建存放软件的目录 2.mkdir ... 
- loadrunner关联取参--响应值unicode编码处理过
			背景:做电商提交订单,需要获取订单号,然后进行支付.状态变更等操作 submitOrder() { lr_think_time(); /* 提交订单 */ /* specsId:规格ID,hyh_go ... 
- Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里
			这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ... 
- Raspberry Pi 3 --- GPIO control
			Before input 'gpio readall', need install wiringPi download "wiringPi":git clone git://git ... 
- mate-desktop安装在其他目录时一些配置信息
			1.mate-desktop安装在其他目录时一些配置信息 2.BIN目录下添加相应的mate-session_gtk2/3 3.首先配置如下环境变量 #!/bin/sh if [[ "${E ... 
