奇异值分解 - 社交网络分析

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 svdOut = ILMath.svd(A, outU, outV);'根据 Wikipedia 文章的 范围、零空间和排名 部分中所说的内容,svdOut 和向量矩阵的输出如何帮助我确定要保留哪些维度以及要丢弃哪些维度?跨度> 这真的很有帮助。据我了解,SVD 有助于降低数据的维数,就像我的邻接矩阵一样。我期望的“重要”节点将是该向量具有高特征值奇异值的节点。在这种奇异值简单下降的格式中,我看不到它如何让我将 svdOut* 与我的邻接矩阵 A 进行比较,以确定要删除哪些维度。您对为此目的使用 SVD 有什么建议吗?为此,我对线性代数的了解是非常新的,所以如果你认为我这样做是错误的,请说! 感谢您的所有帮助。经过一番思考,现在我更好地理解了 SVD,我认为光谱聚类或社区检测等过程将更符合我的要求!

以上是关于奇异值分解 - 社交网络分析的主要内容,如果未能解决你的问题,请参考以下文章

奇异值分解SVD

矩阵奇异值分解SVD

奇异值分解的意义

PCA(主成分分析)+SVD(奇异值分解)+区别

[机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用

奇异分解(SVD)理论介绍