利用奇异值分解SVD给大数据降维
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用奇异值分解SVD给大数据降维相关的知识,希望对你有一定的参考价值。
参考技术A 大数据定义
数据被定义为过于巨大的数据集合,以至于变得难以使用传统技术来处理。大数据的大体现在三个方面:
使用如此之多的维度进行工作的复杂性驱动了各种各样的数据技术的需求来过滤信息,让数据看起来能更好的解决问题。过滤器通过移除高纬度数据集中的冗余信息来降低维度。
我们可以把将为理解为对数据的信息压缩,类似于压缩1000 1000的图像到64 64分辨率,同样也是能够理解图片的意思的。
在大数据降维的核心算法SVD,我们称之为奇异值分解。SVD的公式是:
这个公式的含义是,原始数据矩阵M被分解为三个矩阵的乘积。
最关键的是要理解s所代表的意思,比如s所有元素的和事100,s的第一个值是99,这就意味99%的信息储存在了U和Vh的第一列中。因此你可以愉快的抛弃第一列之后的所有剩余列,而又不会丢失数据的重要信息,只丢失了1%的信息,对数据来说并不太重要。
这个例子中需要降维的数据M,包含4个样例,每个样例包括3个特征值。下面我们就使用linalg模块的svd函数,进行分解矩阵:
通过s里的值可以看出第一列包含了大部分信息(超过80%)。第二列有些值(大约14%),第三列则包含了参与的信息。
当然svd公式是可逆的,就是分解出来的这三个矩阵还能通过点乘还原原始的矩阵。注意,矩阵s实际上是对角矩阵,还原的时候要使用对角矩阵参与运算。
可以看出还原之后的back_M和之前的M矩阵是一样的。
SVD输出的三个矩阵入手,想办法去除第三列的内容。U取U[:,:2],变成(4,2),s取s[:2],变成了(2,),Vh取Vh[:2,:],变成了(2,3)
可以看出即使丢失最后一列的数值,还原之后和过去相比有一些差别,但是并不是很大。也是就是说可以用更少的维度取保存过去的值。
看到这里你可能都有点疑惑,到底是哪里降维了呢?从过去的(4,3)矩阵,变成现在三个矩阵(4,3)(3,)(3,3),不但维度没有降,而且还增加一些数据。
假如说我们忽略最后一列的信息,变成三个矩阵(4,1),(1,),(1,3),从过去的4x3=12个数字,变成现在的4+1+3个数字,确实是降了。但是我们应该如何利用这三个矩阵参与机器学习中呢?
以上是关于利用奇异值分解SVD给大数据降维的主要内容,如果未能解决你的问题,请参考以下文章