如何使用 networkx 图作为 sklearn 的输入

How to use networkx graphs as input for sklearn

我想应用 sklearn 图聚类算法,但它们不接受来自 networkx 的 .gexf 格式的输入。我需要什么样的 library/transformations 才能使我的 .gexf 图适合 sklearn?

聚类算法接受距离矩阵、亲和度矩阵或特征矩阵。例如,kmeans 将接受特征矩阵(比如 m 维的 n 个点的 X)并应用欧几里得距离度量,而亲和传播接受亲和矩阵(即 nxn 维的方阵 D)或特征矩阵(取决于affinity 参数)。

如果您想应用 sklearn(或非图形)聚类算法,您可以 extract adjacency matrices 来自 networkx 图形。

A = nx.to_scipy_sparse_matrix(G)

我想你应该确定一下,你的对角线是 1;做 numpy.fill_diagonal(D, 1) 如果没有。

然后仅应用聚类算法:

from sklearn.cluster import AffinityPropagation


ap = AffinityPropagation(affinity='precomputed').fit(A)
print(ap.labels_)

如果您想应用其他算法甚至将 adjacency/distance 矩阵投影到特征矩阵,您还可以将邻接矩阵转换为距离矩阵。

要完成所有这些就太过分了,但是,至于获取距离矩阵,如果你有二元边,你可以这样做D = 1 - A;如果你有加权边缘,你可以 D = A.max() - A.