奇异值分解 - 社交网络分析
Posted
技术标签:
【中文标题】奇异值分解 - 社交网络分析【英文标题】:Singular Value Decomposition - Social Network Analysis 【发布时间】:2013-02-16 14:26:38 【问题描述】:我有一个由邻接矩阵表示的非常大的节点网络。我想减少网络中的节点数量以包含更重要的节点。我知道 SVD 可以帮助我实现这一点,我已经使用 ILNumerics 库在邻接矩阵上运行 svd() 方法。
有人可以简单地向我解释一下输出是如何帮助我减少网络维度的吗? SVD 过程给我留下了一个大小相同的矩阵,其对角线的递减值范围从 ~2 到多个 0。我如何知道要删除哪些维度被认为不重要?
我可能在整个过程中错误地执行了此过程,因此我们将不胜感激任何帮助!网上的许多解释很快就会变得非常混乱。
【问题讨论】:
对您来说重要的节点到底是什么?也许 SVD 不是您想要的。 【参考方案1】:我对 ILNumerics 不太熟悉,因此我将尝试解释 SVD 在您的情况下通常能够做什么。首先,Wikipedia 给出了 SVD 可能应用的一些基本信息。在您的情况下,关于“范围、零空间和秩”和“低秩矩阵近似”的部分特别感兴趣。奇异值分解可以帮助您确定系统矩阵的真实等级。如果您的邻接图是稀疏的,则您的系统矩阵(例如,N 乘以 N 矩阵)的秩 M 可能小于 N。在这种情况下,您可以计算它的低秩近似。也就是说,您构建了 M 乘以 M (M
编辑:在您的示例数据中,您的原始矩阵 A 已分解为 A = outU svdOut outV。对角矩阵 svdOut 由 A 的特征值奇异值组成,而 outU 和 outV 的列/行分别是 A 的左奇异向量和右奇异向量。在您的示例中,奇异值为 1.61803、1.41421、0.61803 和 0(两次)。因此,原始矩阵的等级由非零奇异值的数量(在您的示例中为三个)给出。因此,您可以定义矩阵 B = outU svdOut* outV,其中星号表示已删除最不重要的奇异值。例如,您可以决定要忽略最小的特征值,因此
svdOut* =
| 1.61803 0 0 0 0 |
| 0 1.41421 0 0 0 |
| 0 0 0 0 0 |
| 0 0 0 0 0 |
| 0 0 0 0 0 |
但是,在再次考虑之后,我认为邻接矩阵的 SVD 不会直接为您提供所需的内容。您必须以某种方式定义 important 节点在您的上下文中实际上是什么。
Edit2(响应下面的 cmets):SVD 不会为您提供有关节点的直接信息,而是有关您的矩阵的信息。奇异向量形成一个正交基,可用于以不同形式表达原始矩阵。奇异值为您提供了有关每个向量的影响有多强的信息。同样,Wikipedia 可能会帮助您了解如何解释这一点。 回到您最初的问题,我认为简单的 SVD 并不是您真正想要的。
【讨论】:
感谢您的快速回复,这很有帮助,我的困惑在于流程的输出。以下是在一个小的 5x5 矩阵上通过以下方法生成的矩阵的链接:pastie.org/6195368(对格式表示歉意,矩阵作为文本非常尴尬)。 'ILRetArray以上是关于奇异值分解 - 社交网络分析的主要内容,如果未能解决你的问题,请参考以下文章