net.new_edge_covariate('x').from_binary_function_ind(f_x) data_model = NonstationaryLogistic() data_model.beta['x'] = theta for name, block_theta in [('ll', 4.0), ('rr', 3.0), ('lr', -2.0)]: data_model.beta[name] = block_theta alpha_norm(net, alpha_sd) data_model.match_kappa(net, ('row_sum', 2)) net.generate(data_model) net.show_heatmap() net.offset_extremes() fit_base_model = NonstationaryLogistic() fit_base_model.beta['x'] = None fit_model = Blockmodel(fit_base_model, 2) #fit_model.base_model.fit = fit_model.base_model.fit_conditional # Initialize block assignments net.new_node_covariate_int('z') if from_truth: net.node_covariates['z'][:] = net.node_covariates['value'][:] else: net.node_covariates['z'][:] = np.random.random(N) < 0.5 # Calculate NLL at initialized block assignments fit_model.fit_sem(net, cycles=1, sweeps=0, use_best=False, store_all=True) baseline_nll = fit_model.sem_trace[0][0] nll_trace = [] z_trace = np.empty((steps, N))
for b in range(params['B']): name = 'x_%d' % b covariates.append(name) data_base_model.beta[name] = np.random.normal(0, params['beta_sd']) def f_x(i_1, i_2): return np.random.uniform(-np.sqrt(3), np.sqrt(3)) net.new_edge_covariate(name).from_binary_function_ind(f_x) # Initialize data (block)model from base model class_probs = np.random.dirichlet(np.repeat(params['class_conc'], params['K'])) z = np.where(np.random.multinomial(1, class_probs, params['N']) == 1)[1] net.new_node_covariate_int('z_true')[:] = z data_model = Blockmodel(data_base_model, params['K'], 'z_true') Theta = np.random.normal(params['Theta_mean'], params['Theta_sd'], (params['K'], params['K'])) Theta += params['Theta_diag'] * np.identity(params['K']) Theta -= np.mean(Theta) data_model.Theta = Theta net.generate(data_model) if params['plot_network']: net.show_heatmap('z_true') # Initialize fitting model fit_base_model = StationaryLogistic() for c in covariates: fit_base_model.beta[c] = None fit_model = Blockmodel(fit_base_model, params['fit_K'])
np.random.seed(137) # Report parameters for the run print 'Parameters:' for field in params: print '%s: %s' % (field, str(params[field])) # Initialize political blogs network from file. The "value" covariate # is the ground truth membership to the left-leaning (0) or # right-leaning (1) class. net = network_from_file_gml('data/polblogs/polblogs.gml', ['value']) net.new_node_covariate_int('truth')[:] = net.node_covariates['value'][:] # Initialize fitting model fit_base_model = StationaryLogistic() fit_model = Blockmodel(fit_base_model, params['fit_K']) if params['fit_nonstationary']: n_fit_base_model = NonstationaryLogistic() n_fit_model = Blockmodel(n_fit_base_model, params['fit_K']) net.new_node_covariate_int('z') if params['blockmodel_fit_method'] == 'kl': fit_model.fit = fit_model.fit_kl n_fit_model.fit = n_fit_model.fit_kl # Set up recording of results from experiment s_results = Results(params['sub_sizes'], params['sub_sizes'], params['num_reps'], 'Stationary fit') add_array_stats(s_results) def class_mismatch(n): truth = n.node_covariates['truth'][:] estimated = n.node_covariates['z'][:]
#!/usr/bin/env python from Models import Stationary, Blockmodel, FixedMargins from Network import Network net = Network(100) net.new_node_covariate_int('r')[:] = 20 net.new_node_covariate_int('c')[:] = 20 net.new_node_covariate_int('z')[:] = ([0] * 50) + ([1] * 50) base_model = Blockmodel(Stationary(),2) base_model.Theta[0,0] = 3.0 base_model.Theta[0,1] = -1.0 base_model.Theta[1,0] = -2.0 base_model.Theta[1,1] = 0.0 model = FixedMargins(base_model) net.generate(base_model) net.show_heatmap('z') net.generate(model) net.show_heatmap('z')
#!/usr/bin/env python from Models import Stationary, Blockmodel, FixedMargins from Network import Network net = Network(100) net.new_node_covariate_int('r')[:] = 20 net.new_node_covariate_int('c')[:] = 20 net.new_node_covariate_int('z')[:] = ([0] * 50) + ([1] * 50) base_model = Blockmodel(Stationary(), 2) base_model.Theta[0, 0] = 3.0 base_model.Theta[0, 1] = -1.0 base_model.Theta[1, 0] = -2.0 base_model.Theta[1, 1] = 0.0 model = FixedMargins(base_model) net.generate(base_model) net.show_heatmap('z') net.generate(model) net.show_heatmap('z')
for b in range(params['B']): name = 'x_%d' % b covariates.append(name) data_base_model.beta[name] = np.random.normal(0, params['beta_sd']) def f_x(i_1, i_2): return np.random.uniform(-np.sqrt(3), np.sqrt(3)) net.new_edge_covariate(name).from_binary_function_ind(f_x) # Initialize data (block)model from base model class_probs = np.random.dirichlet(np.repeat(params['class_conc'], params['K'])) z = np.where(np.random.multinomial(1, class_probs, params['N']) == 1)[1] net.new_node_covariate_int('z_true')[:] = z data_model = Blockmodel(data_base_model, params['K'], 'z_true') Theta = np.random.normal(params['Theta_mean'], params['Theta_sd'], (params['K'],params['K'])) Theta += params['Theta_diag'] * np.identity(params['K']) Theta -= np.mean(Theta) data_model.Theta = Theta net.generate(data_model) if params['plot_network']: net.show_heatmap('z_true') # Initialize fitting model fit_base_model = StationaryLogistic() for c in covariates: fit_base_model.beta[c] = None fit_model = Blockmodel(fit_base_model, params['fit_K'])
data_model = NonstationaryLogistic() data_model.beta['x'] = theta for name, block_theta in [('ll', 4.0), ('rr', 3.0), ('lr', -2.0)]: data_model.beta[name] = block_theta alpha_norm(net, alpha_sd) data_model.match_kappa(net, ('row_sum', 2)) net.generate(data_model) net.show_heatmap() net.offset_extremes() fit_base_model = NonstationaryLogistic() fit_base_model.beta['x'] = None fit_model = Blockmodel(fit_base_model, 2) #fit_model.base_model.fit = fit_model.base_model.fit_conditional # Initialize block assignments net.new_node_covariate_int('z') if from_truth: net.node_covariates['z'][:] = net.node_covariates['value'][:] else: net.node_covariates['z'][:] = np.random.random(N) < 0.5 # Calculate NLL at initialized block assignments fit_model.fit_sem(net, cycles = 1, sweeps = 0, use_best = False, store_all = True) baseline_nll = fit_model.sem_trace[0][0] nll_trace = []