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

2024-09-14 23:01:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用奇异值分解将稀疏矩阵R分解为U、Sigma和Vt。我使用k=20项。原始矩阵的形状为:98720 x 24875,其值仅为0和1

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

<98720x24875 sparse matrix of type '<class 'numpy.float64'>' with 930817 stored elements in Compressed Sparse Row format>, scipy.sparse.csr.csr_matrix)

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

(98720, 24875) <class 'numpy.ndarray'> -1.5699363645844981 3.821880643066242

有人能给我解释一下为什么会这样,为了得到相同的重构矩阵范围,解决方案是什么


Tags: ofnumpynp矩阵minmeansigmamatrix
1条回答
网友
1楼 · 发布于 2024-09-14 23:01:54

我认为问题在于,因为k很小,重建并不完美。你可能需要使用一个更大的k,直到你至少有一个相似的平均值,因为在你使用一个大的k之前,用奇异值分解很难重现极值

举个例子:

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

相关问题 更多 >