如何使用 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
.
我想应用 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
.