Files
2026-07-13 12:36:30 +08:00

176 lines
5.0 KiB
Python

from __future__ import print_function
import argparse
import csv
import time
import warnings
from datetime import datetime
import easygraph as eg
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
import torch
from easygraph.datasets.citation_graph import CiteseerGraphDataset
from easygraph.functions.community import greedy_modularity_communities
from easygraph.functions.community import modularity
from easygraph.functions.graph_embedding import *
from mpl_toolkits.mplot3d import Axes3D
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
warnings.filterwarnings("ignore")
if __name__ == "__main__":
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
dataset = CiteseerGraphDataset(
force_reload=True
) # Download CiteseerGraphDataset contained in EasyGraph
num_classes = dataset.num_classes
g = dataset[0]
labels = g.ndata["label"]
print(labels, labels.shape, len(g.nodes))
print("Graph embedding via DeepWalk...........")
deepwalk_emb, _ = deepwalk(g, dimensions=128, walk_length=80, num_walks=10)
# print(deepwalk_emb, len(deepwalk_emb))
dw_emb = []
for i in range(0, len(deepwalk_emb)):
dw_emb.append(list(deepwalk_emb[i]))
# print(len(dw_emb))
dw_emb = np.array(dw_emb)
print(dw_emb)
tsne = TSNE(n_components=2, verbose=1, random_state=0)
z = tsne.fit_transform(dw_emb)
z_data = np.vstack((z.T, labels)).T
df_tsne = pd.DataFrame(z_data, columns=["Dim1", "Dim2", "class"])
df_tsne["class"] = df_tsne["class"].astype(int)
plt.figure(figsize=(8, 8))
sns.scatterplot(
data=df_tsne,
hue="class",
x="Dim1",
y="Dim2",
palette=["green", "orange", "brown", "red", "blue", "black"],
)
plt.savefig(
"figs/dw_citeseer.pdf", bbox_inches="tight"
) # save embeddings if needed
plt.savefig("figs/dw_citeseer.png", bbox_inches="tight")
plt.show()
print("Graph embedding via Node2Vec..............")
node2vec_emb, _ = node2vec(
g, dimensions=128, walk_length=80, num_walks=10, p=4, q=0.25
)
# print(node2vec_emb, len(node2vec_emb))
n2v_emb = []
for i in range(0, len(node2vec_emb)):
n2v_emb.append(list(node2vec_emb[i]))
# print(len(n2v_emb))
n2v_emb = np.array(n2v_emb)
print(n2v_emb)
tsne = TSNE(n_components=2, verbose=1, random_state=0)
z = tsne.fit_transform(n2v_emb)
z_data = np.vstack((z.T, labels)).T
df_tsne = pd.DataFrame(z_data, columns=["Dim1", "Dim2", "class"])
df_tsne["class"] = df_tsne["class"].astype(int)
plt.figure(figsize=(8, 8))
sns.scatterplot(
data=df_tsne,
hue="class",
x="Dim1",
y="Dim2",
palette=["green", "orange", "brown", "red", "blue", "black"],
)
plt.savefig("figs/n2v_citeseer.pdf", bbox_inches="tight")
plt.savefig("figs/n2v_citeseer.png", bbox_inches="tight")
plt.show()
print("Graph embedding via LINE........")
model = LINE(
dimension=128,
walk_length=80,
walk_num=10,
negative=5,
batch_size=128,
init_alpha=0.025,
order=2,
)
model.train()
line_emb = model(g, return_dict=True)
l_emb = []
for i in range(0, len(line_emb)):
l_emb.append(list(line_emb[i]))
# print(len(l_emb))
l_emb = np.array(l_emb)
print(l_emb)
tsne = TSNE(n_components=2, verbose=1, random_state=0)
z = tsne.fit_transform(l_emb)
z_data = np.vstack((z.T, labels)).T
df_tsne = pd.DataFrame(z_data, columns=["Dim1", "Dim2", "class"])
df_tsne["class"] = df_tsne["class"].astype(int)
plt.figure(figsize=(8, 8))
sns.scatterplot(
data=df_tsne,
hue="class",
x="Dim1",
y="Dim2",
palette=["green", "orange", "brown", "red", "blue", "black"],
)
plt.savefig("figs/line_citeseer.pdf", bbox_inches="tight")
plt.savefig("figs/line_citeseer.png", bbox_inches="tight")
plt.show()
print("Graph embedding via SDNE...........")
model = eg.SDNE(
g,
node_size=len(g.nodes),
nhid0=256,
nhid1=32,
dropout=0.025,
alpha=5e-4,
beta=10,
)
sdne_emb = model.train(model)
sd_emb = []
for i in range(0, len(sdne_emb)):
sd_emb.append(list(sdne_emb[i]))
# print(len(sd_emb))
sd_emb = np.array(sd_emb)
print(sd_emb)
tsne = TSNE(n_components=2, verbose=1, random_state=0)
z = tsne.fit_transform(sd_emb)
z_data = np.vstack((z.T, labels)).T
df_tsne = pd.DataFrame(z_data, columns=["Dim1", "Dim2", "class"])
df_tsne["class"] = df_tsne["class"].astype(int)
plt.figure(figsize=(8, 8))
sns.scatterplot(
data=df_tsne,
hue="class",
x="Dim1",
y="Dim2",
palette=["green", "orange", "brown", "red", "blue", "black"],
)
plt.savefig("figs/sdne_citeseer2.pdf", bbox_inches="tight")
plt.savefig("figs/sdne_citeseer2.png", bbox_inches="tight")
plt.show()