前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python机器学习】数据预处理——图像压缩与线性代数

【Python机器学习】数据预处理——图像压缩与线性代数

作者头像
量化投资与机器学习微信公众号
发布2018-01-29 14:23:43
1.4K0
发布2018-01-29 14:23:43
举报

现在有一张朱迪的照片,这张照片有500多列的像素点构成,但是大部分地方都是白色的,相互没有什么差别,也就是说图像中有很多列都是相互线性相关的,这些列向量对我们接受图像信息没有更大的帮助。那么我们能不能找到一种方法,找出图像中相互独立的列向量,用尽可能少的向量去估计这张图片?这种方法就叫奇异值分解SVD,或PCA主成分分析。

“SVD"

(后台回复SVD,获取pdf原文)

奇异值分解可以从三个方面理解:

  1. 奇异值分解是一种去除原始数据相互之间的相关性的一种方法,并把原始数据相互的关系暴露出来;
  2. 奇异值分解会识别出数据每一维度的变化程度(Variation),按照变化程度排列原始数据的维度;
  3. 奇异值分解可以用来降维,在更小维度的空间中表示数据,并尽可能保留更多的原始信息;(可用用来做数据压缩)

降维:

下图中每一个点都是一个二维的数据,我们可以对图中的点做回归,回归可以看做是用一维的线去拟合二维的数据,现在我们从每一个原始数据点出发向这条线做垂线,落在这条线上的交点可以看做是二维空间内的点在这条一维空间内的表示(representation),降维后的数据保留了原始数据最大的变化特点(相关系数,或者说这条直线的斜率),而对于每个点离回归直线的距离这样的微小变化,直接忽略,即保留了原始数据包含的主要信息,忽略掉其中微小的变化,达到降维的效果。

下面这条直线刚好与上面这条垂直,在这一维度上的点得表示没有保留主要的信息,因此找到一个好的表示数据的维度(图中的线)是SVD降维的主要作用。

“举个例子"

回到我们引入的案例。 朱迪这张图片(转为灰度值之后)我们我们可以看做是一个矩阵A_{mn} ,SVD操作之后我们得到了U,S,V三个矩阵,满足

A_{mn}=U_{mm}S_{mn}V^{T}_{nn}

我们现在希望只用U,V中的k列的向量就能估计出这张图片,下面是Python代码

从图中可以发现,我们只使用了 特征向量V和AA^T 的特征向量U的前20列就可以很好的估计出原图。 SVD可以用在Machine Learning,Deep Learning的数据预处理中,这样的操作可以在尽可能保留数据原始信息的前提下,有效减少内存的压力,减少计算的时间。也可以用在数据的有损压缩中。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化投资与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档