网络图聚类

10
在 Networkx 中,我如何基于节点颜色对节点进行聚类?例如,我有100个节点,其中一些接近黑色,而其他一些接近白色。在图形布局中,我希望具有相似颜色的节点彼此靠近,颜色非常不同的节点彼此远离。我该怎么做?基本上,边缘权重如何影响 spring_layout 的布局?如果 NetworkX 无法实现这一点,是否有其他工具可以帮助计算布局?
谢谢
1个回答

8
好的,我们按照简单的步骤为该图建立邻接矩阵W: 如果相邻的第i个和第j个顶点都是同一种颜色,则它们之间的边缘权重W_{i,j}是一个大数(稍后您将调整这个数字),否则它是一些您类比得出的小数。
现在,让我们把该矩阵的拉普拉斯算子写成 L = D - W,其中D是对角线矩阵,其元素d_{i,i}等于W第i行的总和。
现在,人们可以很容易地证明值fLf^T,其中f是任意向量,如果具有巨大调整权重的顶点具有接近f值,则它很小。您可以将其看作为图设置坐标系的方法,其中第i个顶点在1D空间中具有f_i坐标。
现在,让我们选择一些这样的向量f^k,它们给我们提供了表示图形的点集,例如,在某些欧几里得空间中,k-means起作用:现在,初始图形的第i个顶点具有坐标f^1_i,f^2_i,...还有初始图形上同一颜色的相邻向量在该新坐标空间中是接近的。
如何选择向量f的问题很简单:只需将矩阵L的几个对应于小但非零特征值的特征向量作为f。
这是一个众所周知的方法,称为“谱聚类”。
进一步阅读: 《统计学习基础:数据挖掘、推理和预测》。由Trevor Hastie,Robert Tibshirani和Jerome Friedman编写。
作者页面上免费提供下载:http://www-stat.stanford.edu/~tibs/ElemStatLearn/

这不就是在scikit-learn SpectralClustering中实现的吗? - Juh_
@Juh_ 可能是因为我在写作时不知道 scikit-learn。 - Moonwalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接