【问题标题】:How to use networkx graphs as input for sklearn如何使用networkx图作为sklearn的输入
【发布时间】:2019-08-31 03:51:55
【问题描述】:

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

【问题讨论】:

标签: python scikit-learn networkx graph-theory


【解决方案1】:

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

如果您想应用 sklearn(或只是非图)集群算法,您可以 extract adjacency matrices from networkx graphs。

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

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2020-02-19
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多