奇异值分解:为什么重构后的矩阵与原始矩阵的值范围完全不同?

问题描述

我使用SVD将稀疏矩阵R分解为U,Sigma和Vt。我使用k = 20项。原始矩阵的形状为:98720 x 24875,并且只有值0和1。

(np.min(R)= 0,np.max(R)= 1,np.mean(R)= 0.0003790496241336341,

'的稀疏矩阵 带有930817以压缩稀疏行格式存储的元素,> scipy.sparse.csr.csr_matrix)

重建的矩阵R_reconstructed = np.dot(np.dot(U,np.diag(sigma)),Vt)的值在不同的范围内(-1,5,3.82)。

(98720,24875) -1.5699363645844981 3.821880643066242

有人可以解释一下为什么会这样吗?为了获得相同的重构矩阵范围,解决方案是什么?

解决方法

我认为问题在于,因为k很小,所以重构并不完美。您可能需要使用较大的k,直到至少具有相似的均值,因为在使用较大的k之前,很难用SVD再现极值。

举个例子:

import scipy
import numpy as np

m = scipy.sparse.csr_matrix(np.random.poisson(0.1,(1000,200)).astype("float"))
m.max(),m.min(),m.mean()

最大为4,最小为0,平均值为0.1

如果我用k = 20重建

k = 20
u,s,vh = scipy.sparse.linalg.svds(m,k=k,which="LM")
m_r = np.dot(u,np.dot(np.diag(s),vh))
m_r.max(),m_r.min(),m_r.mean()

最大值是1.5,最小值是-0.6平均值是0.0995

如果我用k = 100进行重构,则max为3.33 min为-0.58均值为0.0996

如果我用k = 199进行重构,则最大值为4.001,最小值为-0.13,平均值为0.0997