Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
import utils
import optimize
class Experiment:
def __init__(self,df,num_roles,num_segments,algo_ver,dest,tuning_params,num_levels=None,refValue = 0):
self.df=df
self.num_roles=num_roles
self.num_segments=num_segments
self.algo_ver = algo_ver
self.dest = dest
self.num_levels = num_levels
self.refValue = refValue
self.tuning_params = tuning_params
def execute(self):
# Extract nodes
nodes_arr = np.union1d(self.df['target'],self.df['source']).astype(int)
# list of nodes
nodes = nodes_arr.tolist()
num_vertices = len(nodes)
# Extract graph
G = utils.getGraph(nodes_arr,self.df.values)
# User parameters
num_roles=self.num_roles
num_segments=self.num_segments
# Time stamps
t_df = self.df["timestamp"]
t_df = sorted(t_df)
print('TIME')
print(len(t_df))
# initilaize group assignment randomly
group_assignment= np.random.randint(num_roles, size=(num_vertices))
# node-group dictionary
group_dic = {}
keys = nodes
values = list(group_assignment)
group_dic = dict(zip(keys,values))
# create a new dictionary - key: node-pair , value: list of timestamps
dic=self.df.groupby(['source','target'])['timestamp'].apply(list).to_dict()
print(len(dic.values()))
# initialize change points
change_points_arr = np.zeros((num_roles, num_roles, num_segments+1) , dtype=int)
#Initialize lamda
lambda_estimates = np.zeros((num_roles, num_roles,num_segments) , dtype=float)
### K-segmentation ###
if self.algo_ver == 1:
opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,None,self.tuning_params)
[group_dic,lambda_estimates,change_points_arr,likelihood] = opt.k_seg()
### (K,H)-segmentation variant-1 ###
elif self.algo_ver == 2:
opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic, self.num_levels,self.tuning_params)
[group_dic,lambda_estimates,change_points_arr,likelihood] = opt.k_h_seg_var_1()
### (K,H)-segmentation variant-2 ###
elif self.algo_ver == 3:
opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,self.num_levels,self.tuning_params)
[group_dic,lambda_estimates,change_points_arr,likelihood,itr] = opt.k_h_seg_var_2()
print (itr)
### Level-dependent (K,H)-segmentation variant-2 ###
elif self.algo_ver == 4:
opt = optimize.Optimize( group_dic,lambda_estimates,change_points_arr,nodes,num_roles,num_segments,dic,self.num_levels,self.tuning_params)
[group_dic,lambda_estimates,change_points_arr,likelihood,g_mapping,itr] = opt.mm_k_h_seg_var_2()
print (itr)
# print('g_mapping_discoverd {}'.format(g_mapping))
# for e_h in range(0,self.num_levels):
# g_a = group_dic[e_h]
# list_of_groups= [[] for _ in range(num_roles)]
# for idx, val in g_a.items():
# list_of_groups[val].append(idx)
# print('group assignments {}: {}'.format(e_h,list_of_groups))
# Plotting
# dest_folder= self.dest + str(self.algo_ver)+'/'
# utils.generate_plots(G,group_dic,lambda_estimates,num_roles,num_segments,dest_folder,nodes,change_points_arr,t_df,self.refValue)
# list_of_groups= [[] for _ in range(num_roles)]
# for idx, val in group_dic.items():
# list_of_groups[val].append(idx)
# print('group assignments: {}'.format(list_of_groups))
# print('lambdas: {}'.format(lambda_estimates))
# return [likelihood,group_dic,lambda_estimates,change_points_arr]
return [itr,likelihood,group_dic,lambda_estimates,change_points_arr]
# return [_itr,likelihood]