Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Comm+Sim/Citeseer_1000_2000_comsim.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Metric,Value
Dataset,Citeseer
Number of Communities,34
Original Edge Count,3679
Final Edge Count,4317
Edges Modified,638
Edges to be Added (Budget),1000
Edges to be Removed (Budget),2000
Mean edges by cluster,0.0016603416827790686
Covariance edges by cluster,0.00034657850797783314
Mean edges intra-cluster,0.01649730374288271
Covariance edges intra-cluster,0.0008512322502035165
Mean edges inter-cluster,0.0007611318609546055
Covariance edges inter-cluster,0.0003032834856890727
14 changes: 14 additions & 0 deletions Comm+Sim/Citeseer_2000_2000_comsim.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Metric,Value
Dataset,Citeseer
Number of Communities,38
Original Edge Count,3679
Final Edge Count,4716
Edges Modified,1037
Edges to be Added (Budget),2000
Edges to be Removed (Budget),2000
Mean edges by cluster,0.004361091394654539
Covariance edges by cluster,0.001054218127622854
Mean edges intra-cluster,0.0677765981107619
Covariance edges intra-cluster,0.013538898498386564
Mean edges inter-cluster,0.0009332261667568449
Covariance edges inter-cluster,0.00016823893234729564
7 changes: 4 additions & 3 deletions Comm+Sim/comsim.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import torch
import networkx as nx
import nx_cugraph as nxcg
# import nx_cugraph as nxcg
import numpy as np
import pandas as pd
import os
Expand All @@ -16,8 +16,9 @@ def modify_graph(data, dataset_name, budget_add, budget_delete, seed):
print("=============================================================")
print("Rewiring based on feature similarity...")
G = to_networkx(data, to_undirected=True)
nxcg_G = nxcg.from_networkx(G)
communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(G)
# communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities = list(nx.community.louvain_communities(G, seed=seed))
cluster_dict_before = {node: i for i, cluster in enumerate(communities) for node in cluster}
cluster_list_before = [cluster_dict_before[node] for node in range(len(data.y))]
nmiscoremod_before = NMI(cluster_list_before, data.y.cpu().numpy())
Expand Down
10 changes: 7 additions & 3 deletions Comm+Sim/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from matplotlib import pyplot as plt
#from comsim_onlysim2 import *
from comsim import *
from onlysim import *
# from onlysim import *
args = parse_args()


Expand Down Expand Up @@ -107,15 +107,19 @@

## For Community+SimilarityBased Rewiring ####
algo_stime = time.time()
# ComFy
data,nmiscoremod_before = modify_graph(data,args.dataset,budget_edges_add,budget_edges_delete,seed)
# FeaSt
# data, nmiscoremod_before, nmiscoremod_after = modify_graph(data, args.dataset, budget_edges_add, budget_edges_delete, seed)
algo_etime = time.time()
rewire_time = algo_etime - algo_stime
print(f"Time Taken for Rewiring : {rewire_time}")


newG = to_networkx(data, to_undirected=True)
nxcg_G = nxcg.from_networkx(newG)
communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(newG)
# communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities_after = list(nx.community.louvain_communities(newG, seed=seed))
cluster_dict_after = {node: i for i, cluster in enumerate(communities_after) for node in cluster}
cluster_list_after = [cluster_dict_after[node] for node in range(len(data.y))]
nmiscoremod_after = NMI(cluster_list_after, data.y.cpu().numpy())
Expand Down
3 changes: 2 additions & 1 deletion Comm+Sim/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ def reset_parameters(self):
for bn in self.bns:
bn.reset_parameters()

def forward(self, x, edge_index):
# def forward(self, x, edge_index):
def forward(self, x, edge_index, p=0.0):
for i, conv in enumerate(self.convs[:-1]):
x = conv(x, edge_index)
if self.use_bn:
Expand Down
12 changes: 7 additions & 5 deletions Comm+Sim/onlysim.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import networkx as nx
import nx_cugraph as nxcg
# import nx_cugraph as nxcg
import numpy as np
import pandas as pd
import os
Expand All @@ -17,8 +17,9 @@ def modify_graph(data, dataset_name, budget_edges_add, budget_edges_delete, seed
print("=============================================================")
print("Rewiring based on feature similarity...")
G = to_networkx(data, to_undirected=True)
nxcg_G = nxcg.from_networkx(G)
communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(G)
# communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities = list(nx.community.louvain_communities(G, seed=seed))
cluster_dict_before = {node: i for i, cluster in enumerate(communities) for node in cluster}
cluster_list_before = [cluster_dict_before[node] for node in range(len(data.y))]
nmiscoremod_before = NMI(cluster_list_before, data.y.cpu().numpy())
Expand Down Expand Up @@ -94,8 +95,9 @@ def modify_graph(data, dataset_name, budget_edges_add, budget_edges_delete, seed
print("similarity before and after",sim,sim2)
pyg_data = from_networkx(G)
newG = to_networkx(pyg_data, to_undirected=True)
nxcg_G = nxcg.from_networkx(newG)
communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(newG)
# communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities_after = list(nx.community.louvain_communities(newG, seed=seed))
cluster_dict_after = {node: i for i, cluster in enumerate(communities_after) for node in cluster}
cluster_list_after = [cluster_dict_after[node] for node in range(len(data.y))]
nmiscoremod_after = NMI(cluster_list_after, data.y.cpu().numpy())
Expand Down
2 changes: 2 additions & 0 deletions Comm+Sim/results_baseline.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Dataset,AvgValAcc,DeviationVal,AvgTestAcc,Deviation,ELI,AdjHom,NMIBefore,NMIAfter,EdgesAdded,EdgesDeleted,HiddenDim,LR,Dropout,GCNTime,RewireTime
Citeseer,77.94,0.35,77.62,0.33,0.4437396170928487,0.6620897112374549,0.3257939098082461,0.3257939098082461,0,0,32,0.01,0.31,111.7904372215271,1.0000636577606201
3 changes: 3 additions & 0 deletions Comm+Sim/results_citeseer_final.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Dataset,AvgValAcc,DeviationVal,AvgTestAcc,Deviation,ELI,AdjHom,NMIBefore,NMIAfter,EdgesAdded,EdgesDeleted,HiddenDim,LR,Dropout,GCNTime,RewireTime
Citeseer,76.93,0.39,76.62,0.38,0.29706154481533353,0.5336210227744842,0.3257939098082461,0.35253033523293986,1000,2000,32,0.01,0.31,120.44084429740906,2.041614294052124
Citeseer,72.09,0.43,72.23,0.40,0.29706154481533353,0.5336210227744842,0.3257939098082461,0.35253033523293986,1000,2000,32,0.01,0.31,113.30892968177795,2.047795295715332
2 changes: 2 additions & 0 deletions Comm+Sim/results_comfy.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Dataset,AvgValAcc,DeviationVal,AvgTestAcc,Deviation,ELI,AdjHom,NMIBefore,NMIAfter,EdgesAdded,EdgesDeleted,HiddenDim,LR,Dropout,GCNTime,RewireTime
Citeseer,76.29,0.37,76.16,0.35,0.38227746056556877,0.6060492452747333,0.32000240378789907,0.3148810758800009,2000,2000,32,0.01,0.31,117.36940407752991,2.1097404956817627
2 changes: 2 additions & 0 deletions Comm+Sim/results_feast.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Dataset,AvgValAcc,DeviationVal,AvgTestAcc,Deviation,ELI,AdjHom,NMIBefore,NMIAfter,EdgesAdded,EdgesDeleted,HiddenDim,LR,Dropout,GCNTime,RewireTime
Citeseer,76.67,0.34,76.48,0.35,0.4820896180314216,0.6932820241627689,0.32000240378789907,0.3400549267819509,2000,2000,32,0.01,0.31,113.85506987571716,1.1044039726257324
13 changes: 13 additions & 0 deletions Comm+Sim/simrewirings/similarityreports/Citeseer_0_0_onlysim.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Metric,Value
Dataset,Citeseer
Number of Communities,34
Edges to be Added,0
Edges to be Removed,0
Mean edges by cluster,0.0
Covariance edges by cluster,0.0
Mean edges intra-cluster,0.0
Covariance edges intra-cluster,0.0
Mean edges inter-cluster,0.0
Covariance edges inter-cluster,0.0
NMI before,0.3257939098082461
NMI after,0.3257939098082461
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Metric,Value
Dataset,Citeseer
Number of Communities,38
Edges to be Added,2000
Edges to be Removed,2000
Mean edges by cluster,0.0021284272871995575
Covariance edges by cluster,0.00010463365938457873
Mean edges intra-cluster,0.03465807046907419
Covariance edges intra-cluster,0.0009286828389534813
Mean edges inter-cluster,0.0003700681962874153
Covariance edges inter-cluster,9.734140853178402e-07
NMI before,0.32000240378789907
NMI after,0.3400549267819509
26 changes: 26 additions & 0 deletions CommunityRewiring/clustering.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import networkx as nx
import numpy as np
import scipy.sparse.linalg
from sklearn.cluster import KMeans
import sklearn.preprocessing


def k_way_spectral(G, k):
assert nx.is_connected(G), "the graph must be connnected"
clusters = []
if G.order() < k:
clusters = list(G.nodes())
else:
L = nx.laplacian_matrix(G)
_, eigenvecs = scipy.sparse.linalg.eigsh(L.asfptype(), k=k+1, which='SM')
eigenvecs = eigenvecs[:, 1:]
eigenvecs = sklearn.preprocessing.normalize(eigenvecs)
kmeans = KMeans(n_clusters=k).fit(eigenvecs)
cluster_labels = kmeans.labels_
clusters = [[] for _ in range(max(cluster_labels) + 1)]
for node_id, cluster_id in zip(G.nodes(), cluster_labels):
clusters[cluster_id].append(node_id)
return clusters,cluster_labels

def maximize_modularity(G):
return nx.community.greedy_modularity_communities(G)
7 changes: 4 additions & 3 deletions CommunityRewiring/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

from sklearn.metrics.cluster import normalized_mutual_info_score as NMI

import nx_cugraph as nxcg
# import nx_cugraph as nxcg

######### Hyperparams to use #############
#Cora --> Dropout = 0.4130296 ; LR = 0.01 ; Hidden_Dimension = 32
Expand Down Expand Up @@ -254,8 +254,9 @@


newG = to_networkx(data, to_undirected=True)
nxcg_G = nxcg.from_networkx(newG)
communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(newG)
# communities_after = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities_after = list(nx.community.louvain_communities(newG, seed=seed))
cluster_dict_after = {node: i for i, cluster in enumerate(communities_after) for node in cluster}
cluster_list_after = [cluster_dict_after[node] for node in range(len(data.y))]
nmiscoremod_after = NMI(cluster_list_after, data.y.cpu().numpy())
Expand Down
12 changes: 7 additions & 5 deletions CommunityRewiring/methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from torch_geometric.utils import to_networkx,from_networkx,homophily
import random
from clustering import *
import nx_cugraph as nxcg
# import nx_cugraph as nxcg
from sklearn.metrics.cluster import normalized_mutual_info_score as NMI

def proxydelmin(data, nxgraph,seed, max_iterations):
Expand Down Expand Up @@ -672,8 +672,9 @@ def community_rewiring(data, seed, comm_delete, comm_add):
initial_edges = graph.number_of_edges()

# Perform community detection
nxcg_G = nxcg.from_networkx(graph)
communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(graph)
# communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities = list(nx.community.louvain_communities(graph, seed=seed))

cluster_dict = {node: i for i, cluster in enumerate(communities) for node in cluster}

Expand Down Expand Up @@ -749,8 +750,9 @@ def inverse_community_rewiring(data, seed, intra_delete, inter_add):
initial_edges = graph.number_of_edges()

# Perform community detection
nxcg_G = nxcg.from_networkx(graph)
communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
# nxcg_G = nxcg.from_networkx(graph)
# communities = list(nx.community.louvain_communities(nxcg_G, seed=seed))
communities = list(nx.community.louvain_communities(graph, seed=seed))

cluster_dict = {node: i for i, cluster in enumerate(communities) for node in cluster}

Expand Down
2 changes: 2 additions & 0 deletions CommunityRewiring/results_comma.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Method,Dataset,AvgValAcc,DeviationVal,AvgTestAcc,Deviation,ELI,AdjHom,NMI,EdgesAdded,EdgesDeleted,FinalGap,HiddenDim,LR,Dropout,RewiringTime,GCNTime
community_rewiring,Citeseer,73.35,0.38,73.63,0.41,0.33304799654311035,0.5685390036963097,0.32185336244421514,2000,40,1.8829173342757362e-07,32,0.01,0.31,0.5870213508605957,118.51752805709839
Binary file added data/Citeseer/Citeseer/processed/data.pt
Binary file not shown.
Binary file added data/Citeseer/Citeseer/processed/pre_filter.pt
Binary file not shown.
Binary file added data/Citeseer/Citeseer/processed/pre_transform.pt
Binary file not shown.
Binary file added data/Citeseer/Citeseer/raw/ind.citeseer.allx
Binary file not shown.
Binary file added data/Citeseer/Citeseer/raw/ind.citeseer.ally
Binary file not shown.
Binary file added data/Citeseer/Citeseer/raw/ind.citeseer.graph
Binary file not shown.
Loading