How to know node/feature contributions?

Viewed 54

I'm working on GCN (Graph Convolutional Network) in PyTorch, in my application: a patient is a graph, nodes represent its genes, for each gene I have 2 features (gene structure and expression value).

The task is I'm doing a regression model to predict the risk of each patient to get a disease.

My question is,

1- how to know which nodes (genes) contribute to the prediction?

2- and which feature of the 2 that I have (gene structure and expression value) contribute to the prediction?

Any suggestions/ideas would be helpful, thanks.

1 Answers

I am suggesting possibly the simplest solution. However, it can work well.

According to your description of the problem, you want to learn the graph (that represents a patient) representation which can be used to predict the risk of getting a disease. As we know, GCN (graph convolution network) can provide vector representations for each node in the graph.

All the node representations can be turned into a single vector representation which would represent the entire graph and this can be done in many ways. For example, you can use max-pooling or self-attentive pooling. In both ways, you can identify which nodes contributed most to the final prediction.

For example, in self-attentive pooling, every node gets a weight and the single vector representation is a weighted vector representation. So, the weights can indicate the nodes' contribution. If we use max-pooling, then we can count how many of the features from a node is pooled while applying the max-pooling. The count itself can indicate the contribution.

Which feature of the 2 that I have (gene structure and expression value) contribute to the prediction?

The same above idea you can apply. For example, you can have learnable weights for the 2 features to combine them while computing the single vector representation of the graph.

Related