【问题标题】:Singular value decomposition: why the reconstructed matrix has totally different range of values than the original matrix?奇异值分解:为什么重构矩阵的值范围与原始矩阵完全不同?
【发布时间】:2020-10-01 08:25:07
【问题描述】:

我使用 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

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

【问题讨论】:

  • 你能把 np.dot(np.dot(U, np.diag(sigma)), Vt) 减少到 np.dot(U * sigma, Vt) 吗?

标签: python matrix svd


【解决方案1】:

我认为问题在于因为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多