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

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

“SVD"

 

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

  1. 奇异值分解是一种去除原始数据相互之间的相关性的一种方法,并把原始数据相互的关系暴露出来;

  2. 奇异值分解会识别出数据每一维度的变化程度(Variation),按照变化程度排列原始数据的维度;

  3. 奇异值分解可以用来降维,在更小维度的空间中表示数据,并尽可能保留更多的原始信息;(可用用来做数据压缩)

降维:

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

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

“举个例子"

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

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

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

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线