Skip to content

Instantly share code, notes, and snippets.

View tomonori-masui's full-sized avatar

Tomonori Masui tomonori-masui

View GitHub Profile
@tomonori-masui
tomonori-masui / run_gcn.py
Last active September 27, 2022 00:25
Run GCN training and evaluation
model = Net(dataset.num_features, 128, 64).to(device)
optimizer = torch.optim.Adam(params=model.parameters(), lr=0.01)
criterion = torch.nn.BCEWithLogitsLoss()
model = train_link_predictor(model, train_data, val_data, optimizer, criterion)
test_auc = eval_link_predictor(model, test_data)
print(f"Test: {test_auc:.3f}")
@tomonori-masui
tomonori-masui / split_nodes.py
Last active September 28, 2022 05:08
Randomly split nodes in a graph
import torch_geometric.transforms as T
split = T.RandomNodeSplit(num_val=0.1, num_test=0.2)
graph = split(graph)
@tomonori-masui
tomonori-masui / visualize_graph.py
Last active September 22, 2022 05:53
Visualizing Graph
import random
from torch_geometric.utils import to_networkx
import networkx as nx
def convert_to_networkx(graph, n_sample=None):
g = to_networkx(graph, node_attrs=["x"])
y = graph.y.numpy()
if n_sample is not None:
@tomonori-masui
tomonori-masui / outlier_distribution.py
Created September 17, 2022 22:31
Show outlier distribution on inj_cora
"""
0: inlier
1: contextual outlier only
2: structural outlier only
3: both contextual outlier and structural outlier
"""
Counter(graph.y.tolist())
@tomonori-masui
tomonori-masui / split_links.py
Last active September 28, 2022 05:06
Splitting links to train, valid, test
@tomonori-masui
tomonori-masui / graph_anomaly_detector.py
Last active September 23, 2022 05:47
Training graph anomaly detector
from pygod.models import DOMINANT
from sklearn.metrics import roc_auc_score, average_precision_score
def train_anomaly_detector(model, graph):
return model.fit(graph)
def eval_anomaly_detector(model, graph):
outlier_scores = model.decision_function(graph)
auc = roc_auc_score(graph.y.numpy(), outlier_scores)
@tomonori-masui
tomonori-masui / load_inj_cora.py
Created September 16, 2022 04:49
Loading anomaly injected Cora
from pygod.utils import load_data
graph = load_data('inj_cora')
@tomonori-masui
tomonori-masui / link_predictor.py
Last active September 27, 2022 00:23
Link predictor training and evaluation
@tomonori-masui
tomonori-masui / gcn_node_classifier.py
Last active September 21, 2022 04:37
GCN node classifier
from torch_geometric.nn import GCNConv
import torch.nn.functional as F
class GCN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(dataset.num_node_features, 16)
self.conv2 = GCNConv(16, dataset.num_classes)
def forward(self, data):
@tomonori-masui
tomonori-masui / load_cora.py
Created September 16, 2022 04:41
Loading Cora dataset
from torch_geometric.datasets import Planetoid
dataset = Planetoid(root='/tmp/Cora', name='Cora')
graph = dataset[0]