Skip to content

Commit 4384f72

Browse files
Fixed Struc2Vec & XNetMF
1 parent 787071c commit 4384f72

11 files changed

Lines changed: 93 additions & 35 deletions

File tree

semb/methods/struc2vec/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
random_walks.txt

semb/methods/struc2vec/algorithms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def generate_random_walks(num_walks,walk_length,workers,vertices):
185185
save_random_walks(walks)
186186

187187
def save_random_walks(walks):
188-
with open('random_walks.txt', 'w') as file:
188+
with open(walk_fname, 'w') as file:
189189
for walk in walks:
190190
line = ''
191191
for v in walk:

semb/methods/struc2vec/algorithms_distances.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -607,7 +607,6 @@ def generate_distances_network(workers):
607607
logging.info('Creating distance network...')
608608

609609
os.system("rm "+returnPickle().replace(' ', '\ ')+"weights_distances-layer-*.pickle")
610-
print('!!!!!')
611610
print("rm "+returnPickle().replace(' ', '\ ')+"weights_distances-layer-*.pickle")
612611
with ProcessPoolExecutor(max_workers=1) as executor:
613612
job = executor.submit(generate_distances_network_part1,workers)

semb/methods/struc2vec/graph.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ def load_matfile(file_, variable_name="network", undirected=True):
229229
def from_networkx(G_input, undirected=True):
230230
G = Graph()
231231

232-
for idx, x in enumerate(G_input.nodes_iter()):
232+
for idx, x in enumerate(G_input.nodes()):
233233
for y in iterkeys(G_input[x]):
234234
G[x].append(y)
235235

semb/methods/struc2vec/method.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@
66
from time import time
77
from . import graph
88
from semb.methods import BaseMethod
9+
from .utils import *
10+
from .graph import *
911

1012
"""
1113
Driver for learning Struc2Vec embedding
1214
"""
1315
class Method(BaseMethod):
1416

15-
__PARAMS__ = dict(dim=128, walk_length=80, num_walks=10, window_size=10, util_layer=None, \
16-
iter=5, worker=1, weighted=False, directed=False, opt1=False, opt2=False, opt3=False)
17+
__PARAMS__ = dict(dim=128, walk_length=80, num_walks=10, window_size=10, until_layer=None, \
18+
iter=5, workers=1, weighted=False, directed=False, opt1=False, opt2=False, opt3=False)
1719

1820

1921
def exec_struc2vec(self):
@@ -22,7 +24,9 @@ def exec_struc2vec(self):
2224
until_layer = self.params['until_layer']
2325
else:
2426
until_layer = None
25-
G = struc2vec.Graph(self.graph, self.params['directed'],
27+
28+
graph = from_networkx(self.graph, not self.params['directed'])
29+
G = struc2vec.Graph(graph, self.params['directed'],
2630
self.params['workers'], untilLayer=until_layer)
2731
if self.params['opt1']:
2832
G.preprocess_neighbors_with_bfs_compact()
@@ -38,8 +42,10 @@ def exec_struc2vec(self):
3842
G.preprocess_parameters_random_walk()
3943
G.simulate_walks(self.params['num_walks'], self.params['walk_length'])
4044

45+
walks = LineSentence(walk_fname)
46+
4147
def learn_embeddings(self):
42-
walks = LineSentence('random_walks.txt')
48+
walks = LineSentence(walk_fname)
4349
self.model = Word2Vec(walks, size=self.params['dim'], window=self.params['window_size'],
4450
min_count=0, hs=1, sg=1, workers=self.params['workers'], iter=self.params['iter'])
4551
self.embeddings = self.model.wv
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.pickle

semb/methods/struc2vec/pickles/.gitkeep

Whitespace-only changes.

semb/methods/struc2vec/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from itertools import islice
66
import os.path
77

8-
# dir_f = str(Path().resolve()) #+ "/lib/struc2vec/src"#os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
9-
folder_pickles = os.path.abspath(os.getcwd()) + "/lib/struc2vec/pickles/" # + '/pickles/'
8+
folder_pickles = os.path.join(os.path.dirname(__file__), "pickles/")
9+
walk_fname = os.path.join(os.path.dirname(__file__), "random_walks.txt")
1010

1111
def returnPickle():
1212
return folder_pickles

semb/methods/xnetmf/internal/xnetmf.py

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -203,23 +203,3 @@ def get_representations(graph, rep_method, verbose = True):
203203
if rep_method.normalize:
204204
reprsn = reprsn / np.linalg.norm(reprsn, axis = 1).reshape((reprsn.shape[0],1))
205205
return reprsn
206-
207-
if __name__ == "__main__":
208-
if len(sys.argv) < 2:
209-
#####PUT IN YOUR GRAPH AS AN EDGELIST HERE (or pass as cmd line argument)#####
210-
#(see networkx read_edgelist() method...if networkx can read your file as an edgelist you're good!)
211-
graph_file = "data/arenas_combined_edges.txt"
212-
else:
213-
graph_file = sys.argv[1]
214-
nx_graph = nx.read_edgelist(graph_file, nodetype = int, comments="%")
215-
adj_matrix = nx.adjacency_matrix(nx_graph).todense()
216-
217-
graph = Graph(adj_matrix)
218-
rep_method = RepMethod(max_layer = 2) #Learn representations with xNetMF. Can adjust parameters (e.g. as in REGAL)
219-
representations = get_representations(graph, rep_method)
220-
print(representations.shape)
221-
222-
223-
224-
225-

semb/methods/xnetmf/method.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ def get_id(self):
1212
def train(self):
1313
# learn representations with xNetMF. Can adjust parameters (e.g. as in REGAL)
1414
rep_method = RepMethod(max_layer=self.params['max_layer'], p=self.params['dim'],
15-
alpha=self.params['discount'], gammastruc=self.params['gamma'])
16-
# FIXME: this doesnt look like a standard embeddings format
17-
self.embeddings = get_representations(self.graph, rep_method)
18-
15+
alpha=self.params['discount'], gammastruc=self.params['gamma'])
16+
17+
graph = Graph(nx.adjacency_matrix(self.graph))
18+
# FIXME: best way to convert/represent it in the format of the original code?
19+
self.embeddings = get_representations(graph, rep_method)

0 commit comments

Comments
 (0)