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

  • 本文关键字:原始 范围 重构 分解 python matrix svd
  • 更新时间 :
  • 英文 :


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

(np.min(R(=0,np.max(R(=1,np.mave(R(=0.00003790496241336341,

<98720x24875类型的稀疏矩阵'<类'numpy.foat64'>'对于930817个以压缩稀疏行格式存储的元素>,scipy.s稀疏.csr.csrmatrix(

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

(9872024875(<类"numpy.ndarray"&gt-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的情况下重建,最大值为3.33分钟,平均值为-0.58,为0.0996

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

相关内容

最新更新