iMoonLab / DeepHypergraph

A pytorch library for graph and hypergraph computation.
https://deephypergraph.com/
Apache License 2.0
663 stars 64 forks source link

How to transform a igraph or networkx object into hypergraph? #29

Open wanglu2014 opened 1 year ago

wanglu2014 commented 1 year ago

How to transform a igraph or networkx object into hypergraph object used in DHG?

yifanfeng97 commented 1 year ago

Hi, you can extract the edge list and the number of vertices from G of networkx. Then, you can construct a DHG's Graph with the default construction function https://deephypergraph.readthedocs.io/en/0.9.3/api/dhg.html#dhg.Graph . We will add the transform function of structures from igraph and networkx libraries in the next version. ^^

wanglu2014 commented 1 year ago

Thank you for your timely reply. Could you kindly suggest how to set node attribute?

yifanfeng97 commented 1 year ago

If you don't have the node attribute, you can try the following ways:

  1. initialize the vertex feature with the normal distribution and set it as trainable parameters. (Common in recommender system)
  2. initialize the vertex feature with the normal distribution.
  3. initialize the vertex feature with a one-hot encoded vector. (you can encode the degree of each vertex or directly use a identity matrix as the vertex feature)
  4. train a auto encoder: the input is the adjacency matrix A and the output is the same. initialize the vertex feature with the hidden embeddings.
wanglu2014 commented 1 year ago

Thanks. If I want to set a numeric vector (degree) as node attribute. How to assign the numbers to nodes?

yifanfeng97 commented 1 year ago

You can try to transform the degree to a one-hot vector. Refer to this https://github.com/weihua916/powerful-gnns/blob/master/util.py#L118

colltoaction commented 2 weeks ago

Hi @yifanfeng97 I wonder what encoding of Hypergraphs you would use in NetworkX transformations. I'm implementing such encoding and was hoping to use this one:

What do you think? Thanks!