Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
self.num_sampling_edge = self.walk_length * self.walk_num * self.num_node
node2id = dict([(node, vid) for vid, node in enumerate(G.nodes())])
self.edges = [[node2id[e[0]], node2id[e[1]]] for e in self.G.edges()]
self.edges_prob = np.asarray([G[u][v].get("weight", 1.0) for u, v in G.edges()])
self.edges_prob /= np.sum(self.edges_prob)
self.edges_table, self.edges_prob = alias_setup(self.edges_prob)
degree_weight = np.asarray([0] * self.num_node)
for u, v in G.edges():
degree_weight[node2id[u]] += G[u][v].get("weight", 1.0)
if not self.is_directed:
degree_weight[node2id[v]] += G[u][v].get("weight", 1.0)
self.node_prob = np.power(degree_weight, 0.75)
self.node_prob /= np.sum(self.node_prob)
self.node_table, self.node_prob = alias_setup(self.node_prob)
if self.order == 3:
self.dimension = int(self.dimension / 2)
if self.order == 1 or self.order == 3:
print("train line with 1-order")
print(type(self.dimension))
self.emb_vertex = (
np.random.random((self.num_node, self.dimension)) - 0.5
) / self.dimension
self._train_line(order=1)
embedding1 = preprocessing.normalize(self.emb_vertex, "l2")
if self.order == 2 or self.order == 3:
print("train line with 2-order")
self.emb_vertex = (
np.random.random((self.num_node, self.dimension)) - 0.5
def _get_alias_edge(self, src, dst):
# Get the alias edge setup lists for a given edge.
G = self.G
unnormalized_probs = []
for dst_nbr in G.neighbors(dst):
if dst_nbr == src:
unnormalized_probs.append(G[dst][dst_nbr]["weight"] / self.p)
elif G.has_edge(dst_nbr, src):
unnormalized_probs.append(G[dst][dst_nbr]["weight"])
else:
unnormalized_probs.append(G[dst][dst_nbr]["weight"] / self.q)
norm_const = sum(unnormalized_probs)
normalized_probs = [float(u_prob) / norm_const for u_prob in unnormalized_probs]
return alias_setup(normalized_probs)
self.neighbors = [
[node2id[v] for v in self.G.neighbors(id2node[i])]
for i in range(self.num_node)
]
s = time.time()
self.alias_nodes = {}
self.node_weight = {}
for i in range(self.num_node):
unnormalized_probs = [
G[id2node[i]][nbr].get("weight", 1.0) for nbr in G.neighbors(id2node[i])
]
norm_const = sum(unnormalized_probs)
normalized_probs = [
float(u_prob) / norm_const for u_prob in unnormalized_probs
]
self.alias_nodes[i] = alias_setup(normalized_probs)
self.node_weight[i] = dict(
zip(
[node2id[nbr] for nbr in G.neighbors(id2node[i])],
unnormalized_probs,
)
)
t = time.time()
print("alias_nodes", t - s)
# run netsmf algorithm with multiprocessing and apply randomized svd
print(
"number of sample edges ", self.num_round * self.num_edge * self.window_size
)
print("random walk start...")
t0 = time.time()
def train(self, G):
# run LINE algorithm, 1-order, 2-order or 3(1-order + 2-order)
self.G = G
self.is_directed = nx.is_directed(self.G)
self.num_node = G.number_of_nodes()
self.num_edge = G.number_of_edges()
self.num_sampling_edge = self.walk_length * self.walk_num * self.num_node
node2id = dict([(node, vid) for vid, node in enumerate(G.nodes())])
self.edges = [[node2id[e[0]], node2id[e[1]]] for e in self.G.edges()]
self.edges_prob = np.asarray([G[u][v].get("weight", 1.0) for u, v in G.edges()])
self.edges_prob /= np.sum(self.edges_prob)
self.edges_table, self.edges_prob = alias_setup(self.edges_prob)
degree_weight = np.asarray([0] * self.num_node)
for u, v in G.edges():
degree_weight[node2id[u]] += G[u][v].get("weight", 1.0)
if not self.is_directed:
degree_weight[node2id[v]] += G[u][v].get("weight", 1.0)
self.node_prob = np.power(degree_weight, 0.75)
self.node_prob /= np.sum(self.node_prob)
self.node_table, self.node_prob = alias_setup(self.node_prob)
if self.order == 3:
self.dimension = int(self.dimension / 2)
if self.order == 1 or self.order == 3:
print("train line with 1-order")
print(type(self.dimension))
self.emb_vertex = (