Note
Go to the end to download the full example code
Score Conversion¶
Currently, the majority of outlier detectors are on node level. However,
in some real-world applications, we may interest in the outlier edges or
outlier graphs. In this tutorial, we introduce score converters provided
in pygod.utils
module, including to_edge_score
and
to_graph_score
.
(Time estimate: 3 minutes)
Data Loading¶
We first load the data from PyGOD with load_data
function.
Data(x=[8405, 400], edge_index=[2, 407963], y=[8405], train_mask=[8405], test_mask=[8405], val_mask=[8405])
Detector Training¶
Initialize and train a detector in PyGOD. Here, we use
pygod.detector.DOMINANT
as an example. For faster demonstration,
we set epoch
to 3.
DOMINANT(act=<function relu at 0x7fa534639f80>,
backbone=<class 'torch_geometric.nn.models.basic_gnn.GCN'>,
batch_size=8405, compile_model=False, contamination=0.1,
dropout=0.0, epoch=3, gpu=None, hid_dim=64, lr=0.004,
num_layers=4, num_neigh=[-1, -1, -1, -1], save_emb=False,
sigmoid_s=False, verbose=0, weight=0.5, weight_decay=0.0)
Obtaining Node Score¶
After training, we obtain raw outlier scores for each node with
predict
. The shape of node_score
is (N, )
.
node_score = detector.predict(data, return_pred=False, return_score=True)
print(node_score.shape)
torch.Size([8405])
Converting Score to Edge Level¶
To detect outlier edges, we convert the outlier scores on node level
to edge level. The shape of edge_score
is (E, )
.
from pygod.utils import to_edge_score
edge_score = to_edge_score(node_score, data.edge_index)
print(edge_score.shape)
torch.Size([407963])
Converting Score to Graph Level¶
To detect outlier graphs, we convert the outlier scores on node level
to graph level for each graph. graph_score
is a scalar for each
Data
object. Here, we give an example for scoring a list of graph.
from pygod.utils import to_graph_score
data_list = [data, data, data]
graph_scores = []
for data in data_list:
node_score = detector.predict(data, return_pred=False, return_score=True)
graph_score = to_graph_score(node_score)
graph_scores.append(graph_score.item())
print(graph_scores)
[19068.12890625, 19068.12890625, 19068.12890625]
Total running time of the script: (0 minutes 29.238 seconds)