【发布时间】:2020-11-06 13:46:28
【问题描述】:
我正在使用 Scipy 运行奇异值分解,以计算数据集中各行之间的余弦相似度。现在,当我得到一个我想比较的新行时,我正在重新初始化 SVD,并添加了新行。有没有办法使用我从初始 SVD 获得的结果(U、S、VT)来转换新行,而不必每次都重新运行它?
# calculating similarity for already existing first row
import scipy
from scipy.sparse.linalg import svds
from sklearn.metrics.pairwise import cosine_similarity
u, s, v = svds(csr_mat.astype('float'))
similarities = cosine_similarity([u[0]], u)
# when I encounter a new row I want to calculate similarities for, I append it to the original matrix and recalculate SVD
csr_matrix = scipy.sparse.vstack((csr_mat, new_row_to_compare))
u, s, v = svds(csr_mat.astype('float'))
similarities = cosine_similarity([u[-1]], u)
是否可以使用 u、s 和 v 进行某种类型的线性代数运算,将 new_row_to_compare 转换为与 u 中其他行相同的格式?
【问题讨论】:
-
您似乎正在寻找一级更新,这是 scicomp SE 的相关答案:scicomp.stackexchange.com/questions/2678/…
标签: python scipy linear-algebra cosine-similarity svd