今天来讲讲SVD是怎么回事
首先说说什么是SVD,这货可不是SVM,SVD(Singular Value Decomposition)是奇异值分解的缩写,该方法应用在生物信息学到金融学等很多应用之中,SVD都是提取信息的强大工具。下面讲讲这个奇异值分解的流程:
1)首先你要知道,SVD是应用在矩阵上的,也就是说,你的问题如果能表达成一个二维矩阵,那么就基本能够使用SVD,为什么说“基本”我后面再详细说。SVD是矩阵分解的一种类型,而矩阵分解是讲数据矩阵分解为多个独立的部分的过程。而矩阵分解是进行SVD的第一步也是重要一步。
2)SVD将原始数据矩阵data分解为三个部分:U、Sigma、VT,如果data是m行n列,则他们三个分别是m行m列、m行n列、n行n列。这里面我们只关注Sigma(具体是怎么分解的不用关心,Python有现成的库函数)。Sigma是一个对角矩阵,这个矩阵除了对角线上有非零元素之外,别的元素都是0,我们需要关注对角线上的这些值。
3)拿到对角线上的值后,我们需要再知道一个概念,总能量。对角线上的成员是从大到小依次排列的,我们要求那些元素的平方和大于等于总能量的90%(总能量=Sigma**2)。比如对角线上有5个元素,有三个元素的平方和超过了总能量的90%,那么剩下的两个元素就可以不要了。
4)最后是还原矩阵,我们将Sigma矩阵进行了压缩,按照公式将矩阵进行还原就可以得到压缩后的矩阵。所以说,SVD是一种矩阵压缩的过程(也可以理解为矩阵降维),这种方法大大降低了处理原始数据的复杂程度。
对了我之前不是说有一部分data可是使用SVD,有一部分data可以不用SVD吗?
对于矩阵压缩,只有当矩阵中存在着大量的0元素时,才能将data的规模减小,在后续处理中降低时间复杂度。如果矩阵非常的“丰满”,那么即使使用SVD也不会压缩多少,且矩阵分解、还原的过程本身也很耗时,因此用SVD就得不偿失了。
最后,90%是一个可调节参数,可根据实际情况调整。
使用SVD的流程: