Networkx图聚类

Gen*_*eni 9 python data-visualization cluster-analysis graphviz networkx

在Networkx中,如何基于节点颜色来聚类节点?例如,我有100个节点,其中一些接近黑色,而另一些接近白色.在图形布局中,我希望具有相似颜色的节点保持彼此靠近,并且具有非常不同颜色的节点彼此远离.我怎样才能做到这一点?基本上,边缘权重如何影响spring_layout的布局?如果NetworkX无法做到这一点,是否还有其他工具可以帮助计算布局?

谢谢

Moo*_*ker 8

好吧,让我们按照简单的程序为该图建立邻接矩阵W:如果相邻的第i和第j个顶点具有相同的颜色,则它们之间的边缘权重W_ {i,j}是大数(您将在稍后的实验中调整),否则它是一些小数字,您将类似地弄清楚.

现在,让我们将矩阵的拉普拉斯算子写为L = D-W,其中D是对角矩阵,其元素d_ {i,i}等于第W i行的和.

现在,人们可以很容易地证明,如果具有巨大调整权重的顶点具有接近的f值,则fLf ^ T的值(其中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/