在 Networkx 中,如何根据节点颜色对节点进行集群?例如,我有 100 个节点,其中一些接近黑色,而另一些接近白色。在图形布局中,我希望颜色相似的节点彼此靠近,颜色非常不同的节点彼此远离。我怎样才能做到这一点?基本上,边缘权重如何影响 spring_layout 的布局?如果 NetworkX 无法做到这一点,是否有任何其他工具可以帮助计算布局?
谢谢
在 Networkx 中,如何根据节点颜色对节点进行集群?例如,我有 100 个节点,其中一些接近黑色,而另一些接近白色。在图形布局中,我希望颜色相似的节点彼此靠近,颜色非常不同的节点彼此远离。我怎样才能做到这一点?基本上,边缘权重如何影响 spring_layout 的布局?如果 NetworkX 无法做到这一点,是否有任何其他工具可以帮助计算布局?
谢谢
好的,让我们按照简单的过程为该图构建邻接矩阵 W:如果相邻的第 i 个和第 j 个顶点都具有相同的颜色,那么它们之间的边的权重 W_{i,j} 是大数(你稍后会在你的实验中调整),否则它是一个很小的数字,你会以类似的方式计算出来。
现在,让我们将矩阵的拉普拉斯算子写为 L = D - W,其中 D 是对角矩阵,其中元素 d_{i,i} 等于第 W i 行的总和。
现在,可以很容易地证明,如果具有巨大调整权重的顶点具有接近的 f 值,则 fLf^T 的值(其中 f 是某个任意向量)很小。您可能会认为它是为带有 i 的图形设置坐标系的方式 - 顶点在一维空间中具有 f_i 坐标。
现在,让我们选择一些这样的向量 f^k ,它们可以将图表示为某个欧几里得空间中的一组点,例如,k-means 可以在其中工作:现在您有了初始图的第 i 个顶点具有坐标 f^1_i, f^2_i, ... 以及初始图上相同颜色的相邻向量将在这个新坐标空间中接近。
关于如何选择向量 f 的问题是一个简单的问题:只需将矩阵 L 的几个特征向量作为 f,它们对应于小但非零的特征值。
这是一种众所周知的方法,称为谱聚类。
进一步阅读: 统计学习的要素:数据挖掘、推理和预测。作者:特雷弗·哈斯蒂、罗伯特·蒂布希拉尼和杰罗姆·弗里德曼