如何将networkx图形用作sklearn的输入

3

我想使用sklearn的图聚类算法,但它们不接受以.gexf格式的networkx输入。我需要哪种库/转换来将我的.gexf图形转换为适用于sklearn的格式?


你想应用哪种聚类算法?networkx有一些聚类算法,比如k最近邻算法 https://networkx.github.io/documentation/networkx-1.9.1/reference/algorithms.html - Eskapp
我想使用亲和传播和谱聚类算法,而不是networkx库中包含的聚类算法。 - Mnemosyne
1
@Mnemosyne,你看过这里吗?https://dev59.com/Q1YO5IYBdhLWcg3wKOft - hellpanderr
1个回答

3
集群算法接受距离矩阵、相似度矩阵或特征矩阵。例如,k-means算法接受一个特征矩阵(假设X由n个m维点组成)并应用欧几里得距离测量方式,而亲和传播算法则接受一个相似度矩阵(即nxn维的方阵D)或特征矩阵(取决于亲和性参数)。
如果您想应用sklearn(或非图形)集群算法,可以从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_)

您还可以将邻接矩阵转换为距离矩阵,以便应用其他算法或甚至将邻接/距离矩阵投影到特征矩阵上。要获得距离矩阵,如果有二元边缘,则可以执行D = 1 - A; 如果有带权边缘,则可以执行D = A.max() - A

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