gpt4 book ai didi

node.js - SVD 和奇异/非奇异矩阵

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:56 24 4
gpt4 key购买 nike

我需要使用矩阵的 SVD 形式从一系列文档中提取概念。我的矩阵的形式为 A = [d1, d2, d3 ... dN],其中 diM 分量的二进制向量。然后 svd 分解给我 svd(A) = U x S x V',其中 S 包含奇异值。

我使用 SVDLIBC在 nodejs 中进行处理(使用我编写的一个小模块来使用它)。它似乎运行良好,但我注意到运行时行为有些奇怪,这取决于我的矩阵状态(其中 N、M 正在增长,但每个都已经超过 1000)。首先,我没有考虑提取相同的文档向量,但现在经过一些测试,看起来添加两次文档有时会非常加快处理速度。

  1. 我是否必须确保 A 的每一列都是成对独立的?是否要求它们都线性无关? (我认为不,因为即使某些列完全相同,SVD 似乎也能很好地执行其工作,它只会在生成的分解中显示哪些列/行是无用的,因为 U 中有 0 个组件> 或 V)
  2. 现在计算我的大矩阵的 SVD 有时会花费太多时间,我试图通过删除相同的列来减小它的大小,但我发现实际上添加虚拟相同的向量可以使它更快。那是正常的吗?发生什么事了?

从逻辑上讲,我想我的矩阵包含尽可能多的信息,因此

  • [A] 删除所有相同的列,在最好的情况下,也许
  • [B] 删除线性相关的列。

做 [A] 看起来很简单而且计算成本也不高,我可以在构造时散列我的向量以检查哪些可能是相同的向量,然后花时间检查这些向量,但是 [A] 有好的计算技术吗和 [B]?
(我很感激 [A] 不必以蛮力方式检查新向量与整个过去向量的相等性,至于 [B],我不知道有什么好的方法来检查它/做它)。

添加了相关问题:关于我的第二个问题,为什么 SVD 的运行时行为仅通过添加一个类似的列就会发生如此巨大的变化?这是正常的可能行为,还是意味着我应该在 SVDLIBC 中查找错误?

最佳答案

如果没有快速和慢速输入矩阵的样本,很难说问题出在哪里。但是,由于 SVD 的主要用途之一是提供消除协方差的旋转,冗余(或相同)的列应该不会造成问题。

要回答有关缓慢行为是否是您正在使用的库中的错误的问题,我建议尝试使用其他工具检索同一矩阵的 SVD。例如,在 Octave 中,检索矩阵的 SVD 以比较运行时间:

[U, S, V] = svd(A)

关于node.js - SVD 和奇异/非奇异矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14270215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com