Let's say I have a partly connected graph that represents members of many unrelated communities. I would like to predict the possible friendships between members of the same community: on an sliding scale between 0 to 10 how likey would they like each other? I have some characteristics of them whether they are christian, or like sports, and also some geographical features, the distance between them.
The connections could be whether or not they are friends on a social media platform. In the networks, they are not necessarily connected with edges.
I am using pytorch_geometric
to build a graph for each community and add edges for connections on the social media platform. One edge for each direction, so the graph is bi-directional. Then I create Data()
instances.
Data(x=x, edge_index=edge_index)
Where x
is an array with node features and edge_index
x = array([[ 0, 4, 6, 0, 0, 1],
[ 1, 4, 6, 0, 0, 1],
[ 2, 4, 6, 0, 0, 1],
[ 3, 4, 6, 0, 1, 0],
[ 4, 4, 6, 0, 1, 0],
...])
edge_index = [[0, 1],
[0, 9],
[0, 10],
[0, 11],
[1, 2],
[1, 7],
[1, 12],
[2, 3],
[2, 6],
[2, 13],
[3, 4],
...]
Not sure what is the best route from here to train on and predict relationships. What is generally used in this case? There are a few options mentioned in the documentation: EdgeConv, DynamicEdgeConv, GCNCon. I am not sure what to try first. Is there anything available that is made for this kind of problems or do I have to setup my own MessagePassing
class?
Data()
accepts an argument y
to train on nodes. Can I actually use pytorch_geometric
for this kind of problem or do I have to go back to pytorch
?
dense_diff_pool
which also returns a "auxiliary link prediction objective". There is an example enzymes_diff_pool.py which demonstrates it's use.https://pytorch-geometric.readthedocs.io/en/latest/modules/nn.html#torch_geometric.nn.dense.diff_pool.dense_diff_pool
https://github.com/rusty1s/pytorch_geometric/blob/master/examples/enzymes_diff_pool.py
– zbyte Oct 18 '19 at 22:40