In [3]:
import os
from shutil import copy, copyfile
import subprocess
from save_embedded_graph27 import main_binary as embed_main
from spearmint_ghsom import main as ghsom_main
import numpy as np
import networkx as nx
import pickle
from time import time
from __future__ import division

def save_obj(obj, name):
    with open(name + '.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

def load_obj(name):
    with open(name + '.pkl', 'rb') as f:
        return pickle.load(f)
    
def fitness(x, gml, labels):
    
    params = {'w': 0.0001,
         'eta': 0.0001,
         'sigma': 1,
          'e_sg': x,
         'e_en': 0.8}
    
    return 1 - ghsom_main(params, gml, labels, lam=1000)[0][0]

def neighbour(x, p=0.1):
    return x + 2 * (np.random.rand() - 0.5) * p

def simulated_annealing(net, gml_filename, labels, initial_x=0.8, 
                        num_iter=50, start_temp=0.01, epsilon=0.05, no_improv_thres=10): 

    #load_progress
    progress_file = 'sa_progress_{}'.format(net)
    if os.path.isfile('{}.pkl'.format(progress_file)):
        start, xb, f_xb, temp, no_improvements = load_obj(progress_file)
        print 'loading simulated annealing progress'
    else:
        #new progress
        start = 0
        xb = initial_x
        f_xb = fitness(xb, gml_filename, labels)
        temp = start_temp
        no_improvements = 0
    print 'starting from iteration {}'.format(start)

    for i in range(start, num_iter):
        
        if no_improvements >= 2 * no_improv_thres:
            print 'no improvement for {} iterations, stopping'.format(2 * no_improv_thres)
            break
        
        if f_xb < epsilon:
            print 'function minimised to tolerance of {}, stopping'.format(epsilon)
            break

        if no_improvements >= no_improv_thres:    
            x = 0.8 + 2 * (np.random.rand() - 0.5) * 0.3
            print 'no improvement for 10 epochs, trying random value'
        else:    
            x = neighbour(xb)

        print 'trying x={}'.format(x)

        temp = 0.99 * temp

        f_x = fitness(x, gml_filename, labels)
        
        p = np.exp((f_xb - f_x) / temp)
        
        print 'f_xb={}, f_x={}, p={}'.format(f_xb, f_x, p)

        if f_x < f_xb or np.random.rand() < p:
            xb = x
            f_xb = f_x
            
            no_improvements = 0
        else:
            no_improvements += 1

        #save progress
        save_obj((i + 1, xb, f_xb, temp, no_improvements), progress_file)
                
        print 'epoch={}, xb={}, f_xb={}'.format(i, xb, f_xb)    
        print

    return xb

def graph_measures(gml_filename):
    
    G = nx.read_gml(gml_filename)
    
    density = nx.density(G)
    
    arr = np.array([val for key, val in nx.degree_centrality(G).iteritems()])
    arr = np.sort(arr)[::-1]
    
    k = len(arr)

    k1 = k

    sum = np.sum(arr)
    
    var = 1

    while var > 0.95:

        k -= 1

        var = np.sum(arr[:k]) / sum 
    
    centrality = k / k1
    
    assortativity = nx.degree_assortativity_coefficient(G)
    
    connectivity = nx.node_connectivity(G)
    
    return np.array([density, centrality, assortativity, connectivity])

In [14]:
from scipy.optimize import minimize_scalar

def fitness(x, gml, labels):
    
    params = {'w': 0.0001,
         'eta': 0.0001,
         'sigma': 1,
          'e_sg': x,
         'e_en': 0.8}
    
    return 1 - ghsom_main(params, gml, labels, lam=1000)[0][0]

res = minimize_scalar(fitness, bounds=(0.5, 1), method='bounded', 
                      args=('embedded_football.gml', 'value'), 
                      options={'maxiter' : 5, 'disp' : True})


---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-14-9755a0852f2a> in <module>()
     13 res = minimize_scalar(fitness, bounds=(0.5, 1), method='bounded', 
     14                       args=('embedded_football.gml', 'value'),
---> 15                       options={'maxiter' : 5, 'disp' : True})

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\_minimize.pyc in minimize_scalar(fun, bracket, bounds, args, method, tol, options)
    612             raise ValueError('The `bounds` parameter is mandatory for '
    613                              'method `bounded`.')
--> 614         return _minimize_scalar_bounded(fun, bounds, args, **options)
    615     elif meth == 'golden':
    616         return _minimize_scalar_golden(fun, bracket, args, **options)

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\optimize.pyc in _minimize_scalar_bounded(func, bounds, args, xatol, maxiter, disp, **unknown_options)
   1740         si = numpy.sign(rat) + (rat == 0)
   1741         x = xf + si * numpy.max([numpy.abs(rat), tol1])
-> 1742         fu = func(x, *args)
   1743         num += 1
   1744         fmin_data = (num, x, fu)

<ipython-input-14-9755a0852f2a> in fitness(x, gml, labels)
      9          'e_en': 0.8}
     10 
---> 11     return 1 - ghsom_main(params, gml, labels, lam=1000)[0][0]
     12 
     13 res = minimize_scalar(fitness, bounds=(0.5, 1), method='bounded', 

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in main(params, gml_filename, labels, lam)
    624 
    625     return fitness(params['w'], params['eta'], params['sigma'],
--> 626                    params['e_sg'], params['e_en'], gml_filename, labels, lam)
    627 
    628 def main_no_labels(params, gml_filename, lam=10000):

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in fitness(w, eta, sigma, e_sg, e_en, gml_filename, labels, lam)
    605 
    606     #run ghsom algorithm
--> 607     network, MQE = ghsom(G, lam, w, eta, sigma, float("inf"), e_sg, e_en, layer)
    608 
    609     #label graph

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in ghsom(G, lam, w, eta, sigma, e_0, e_sg, e_en, layer)
    478 
    479             #recursively run algorithm to create new network for subgraph of this neurons nodes
--> 480             n, e = ghsom(H, lam, w, eta, sigma, e_0, e_sg, e_en, layer + 1)
    481 
    482             #repack

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in ghsom(G, lam, w, eta, sigma, e_0, e_sg, e_en, layer)
    449 
    450         #train for l epochs
--> 451         train_network(X, network, lam, eta, sigma, N)
    452 
    453         #classify nodes

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in train_network(X, network, num_epochs, eta_0, sigma_0, N)
     82 
     83             #determine winning neuron
---> 84             win_neuron = winning_neuron(x, network)
     85 
     86             # update weights

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in winning_neuron(x, network)
    108 
    109         #distance between input vector and neuron weight
--> 110         distance = np.linalg.norm(x - v)
    111 
    112         # if we have a new closest neuron

C:\Miniconda3\envs\py27\lib\site-packages\numpy\linalg\linalg.pyc in norm(x, ord, axis, keepdims)
   2127                 sqnorm = dot(x.real, x.real) + dot(x.imag, x.imag)
   2128             else:
-> 2129                 sqnorm = dot(x, x)
   2130             ret = sqrt(sqnorm)
   2131             if keepdims:

KeyboardInterrupt: 

In [13]:
print res


     fun: 1.0
 message: 'Maximum number of function calls reached.'
    nfev: 5
  status: 1
 success: False
       x: 0.95491502812526285

In [4]:
from scipy.optimize import basinhopping

basinhopping(fitness, 0.8, niter=5,
             minimizer_kwargs={'args' : ('embedded_football.gml', 'value')})


---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-4-87d72b9de908> in <module>()
      2 
      3 basinhopping(fitness, 0.8, niter=5,
----> 4              minimizer_kwargs={'args' : ('embedded_football.gml', 'value')})

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\_basinhopping.pyc in basinhopping(func, x0, niter, T, stepsize, minimizer_kwargs, take_step, accept_test, callback, interval, disp, niter_success)
    603 
    604     bh = BasinHoppingRunner(x0, wrapped_minimizer, take_step_wrapped,
--> 605                             accept_tests, disp=disp)
    606 
    607     # start main iteration loop

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\_basinhopping.pyc in __init__(self, x0, minimizer, step_taking, accept_tests, disp)
     71 
     72         # do initial minimization
---> 73         minres = minimizer(self.x)
     74         if not minres.success:
     75             self.res.minimization_failures += 1

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\_basinhopping.pyc in __call__(self, x0)
    271             return self.minimizer(x0, **self.kwargs)
    272         else:
--> 273             return self.minimizer(self.func, x0, **self.kwargs)
    274 
    275 

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\_minimize.pyc in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
    442         return _minimize_cg(fun, x0, args, jac, callback, **options)
    443     elif meth == 'bfgs':
--> 444         return _minimize_bfgs(fun, x0, args, jac, callback, **options)
    445     elif meth == 'newton-cg':
    446         return _minimize_newtoncg(fun, x0, args, jac, hess, hessp, callback,

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\optimize.pyc in _minimize_bfgs(fun, x0, args, jac, callback, gtol, norm, eps, maxiter, disp, return_all, **unknown_options)
    932             alpha_k, fc, gc, old_fval, old_old_fval, gfkp1 = \
    933                      _line_search_wolfe12(f, myfprime, xk, pk, gfk,
--> 934                                           old_fval, old_old_fval, amin=1e-100, amax=1e100)
    935         except _LineSearchError:
    936             # Line search failed to find a better solution.

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\optimize.pyc in _line_search_wolfe12(f, fprime, xk, pk, gfk, old_fval, old_old_fval, **kwargs)
    763     ret = line_search_wolfe1(f, fprime, xk, pk, gfk,
    764                              old_fval, old_old_fval,
--> 765                              **kwargs)
    766 
    767     if ret[0] is None:

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\linesearch.pyc in line_search_wolfe1(f, fprime, xk, pk, gfk, old_fval, old_old_fval, args, c1, c2, amax, amin, xtol)
     99     stp, fval, old_fval = scalar_search_wolfe1(
    100             phi, derphi, old_fval, old_old_fval, derphi0,
--> 101             c1=c1, c2=c2, amax=amax, amin=amin, xtol=xtol)
    102 
    103     return stp, fc[0], gc[0], fval, old_fval, gval[0]

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\linesearch.pyc in scalar_search_wolfe1(phi, derphi, phi0, old_phi0, derphi0, c1, c2, amax, amin, xtol)
    172         if task[:2] == b'FG':
    173             alpha1 = stp
--> 174             phi1 = phi(stp)
    175             derphi1 = derphi(stp)
    176         else:

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\linesearch.pyc in phi(s)
     85     def phi(s):
     86         fc[0] += 1
---> 87         return f(xk + s*pk, *args)
     88 
     89     def derphi(s):

C:\Miniconda3\envs\py27\lib\site-packages\scipy\optimize\optimize.pyc in function_wrapper(*wrapper_args)
    290     def function_wrapper(*wrapper_args):
    291         ncalls[0] += 1
--> 292         return function(*(wrapper_args + args))
    293 
    294     return ncalls, function_wrapper

<ipython-input-3-18bd35b2fafa> in fitness(x, gml, labels)
     26          'e_en': 0.8}
     27 
---> 28     return 1 - ghsom_main(params, gml, labels, lam=1000)[0][0]
     29 
     30 def neighbour(x, p=0.1):

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in main(params, gml_filename, labels, lam)
    624 
    625     return fitness(params['w'], params['eta'], params['sigma'],
--> 626                    params['e_sg'], params['e_en'], gml_filename, labels, lam)
    627 
    628 def main_no_labels(params, gml_filename, lam=10000):

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in fitness(w, eta, sigma, e_sg, e_en, gml_filename, labels, lam)
    605 
    606     #run ghsom algorithm
--> 607     network, MQE = ghsom(G, lam, w, eta, sigma, float("inf"), e_sg, e_en, layer)
    608 
    609     #label graph

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in ghsom(G, lam, w, eta, sigma, e_0, e_sg, e_en, layer)
    449 
    450         #train for l epochs
--> 451         train_network(X, network, lam, eta, sigma, N)
    452 
    453         #classify nodes

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in train_network(X, network, num_epochs, eta_0, sigma_0, N)
     85 
     86             # update weights
---> 87             update_weights(x, network, win_neuron, eta, sigma)
     88 
     89         # drop neighbourhood

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in update_weights(x, network, win_neuron, eta, sigma)
    131 
    132         #new v -- move along shortest path by move distance
--> 133         v += eta * neighbourhood(network, i, win_neuron, sigma) * (x - v)
    134 
    135         #save to network

C:\Miniconda3\Jupyter\GHSOM_simplex_dsd\spearmint_ghsom.pyc in neighbourhood(network, r, win_neuron, sigma)
    139 def neighbourhood(network, r, win_neuron, sigma):
    140 
--> 141     return np.exp(-(nx.shortest_path_length(network, r, win_neuron)) ** 2 / (2 * sigma ** 2))
    142 
    143 # assign nodes into clusters

C:\Miniconda3\envs\py27\lib\site-packages\networkx\algorithms\shortest_paths\generic.pyc in shortest_path_length(G, source, target, weight)
    243             ## Find shortest source-target path.
    244             if weight is None:
--> 245                 p=nx.bidirectional_shortest_path(G,source,target)
    246                 paths=len(p)-1
    247             else:

C:\Miniconda3\envs\py27\lib\site-packages\networkx\algorithms\shortest_paths\unweighted.pyc in bidirectional_shortest_path(G, source, target)
    150     while w is not None:
    151         path.append(w)
--> 152         w=succ[w]
    153 
    154     return path

KeyboardInterrupt: 

In [6]:
#root dir
os.chdir("C:\Miniconda3\Jupyter\GHSOM_simplex_dsd")

#save directory
dir = os.path.abspath("parameter_tests_small_density_simulated_annealing")

#number of networks to generate
num_networks = 200

#number of times to repeat
num_jobs = 10

#make save directory
if not os.path.isdir(dir):
    os.mkdir(dir)

#change to dir
os.chdir(dir)    

#network file names -- output of network generator
network = "network.dat"
first_level = "community.dat"

#community labels
labels = 'firstlevelcommunity'

#number of nodes in the graph
N = 64

MAX_EDGES = N * (N - 1) / 2 + 1
MIN_DENSITY = 0.05
MAX_DENSITY = 0.4

if os.path.isfile('data.pkl'):
    data = load_obj('data')
    print 'loading data'
else:
    data = np.zeros((num_networks, 4))

if os.path.isfile('best_e_sgs.pkl'):
    best_e_sgs = load_obj('best_e_sgs')
    print 'loading best e_sgs'
else:
    best_e_sgs = np.zeros(num_networks)

for i in range(num_networks):
    
    #make benchmark parameter file
    filename = "benchmark_flags_{}.dat".format(i)
        
    if not os.path.isfile(filename):
    
        #number of edges
        num_edges = np.random.randint(MAX_EDGES * MIN_DENSITY, MAX_EDGES * MAX_DENSITY)
        
        print 'num edges: {}'.format(num_edges)

        #number of nodes in micro community
        minc = 5
        maxc = np.random.randint(16, 30)

        #average degree
        k = np.ceil(num_edges / N)

        #max degree
        maxk = 2 * k

        #mixing factor
        mu = np.random.rand() * 0.5

        print_string = '-N {} -k {} -maxk {} -minc {} -maxc {} -mu {}'.format(N, k, maxk, minc, maxc, mu)
        
        print print_string
        with open(filename,"w") as f:
            f.write(print_string)
        print 'written flag file: {}'.format(filename)
    
    #copy executable
    ex = "benchmark.exe"   
    if not os.path.isfile(ex):

        source = "C:\\Users\\davem\\Documents\\PhD\\Benchmark Graph Generators\\binary_networks\\benchmark.exe"
        copyfile(source, ex)
        
        print 'copied executable'

    #cmd strings
    change_dir_cmd = "cd {}".format(dir)
    generate_network_cmd = "benchmark -f {}".format(filename)

    #output of cmd
    output_file = open("cmd_output.out".format(i), 'w')
    
    network_rename = '{}_{}'.format(i, network)
    first_level_rename = '{}_{}'.format(i, first_level)

    #generate network and rename
    if not os.path.isfile(network_rename):

        process = subprocess.Popen(change_dir_cmd + " && " + generate_network_cmd, 
                                stdout=output_file, 
                                stderr=output_file, 
                                shell=True)
        process.wait()

        print 'generated network {}'.format(i)
        
        ##rename
        os.rename(network, network_rename)
        os.rename(first_level, first_level_rename)

    gml_filename = 'embedded_network_{}.gml'.format(i)    

    #embed into gml file
    if not os.path.isfile(gml_filename):

        ##embed graph
        embed_main(network_rename, first_level_rename, gml_filename)

        print 'embedded network {} as {} in {}'.format(i, gml_filename, os.getcwd())

    if not np.all(data[i]):
        data[i] = graph_measures(gml_filename)
        save_obj(data, 'data')
        print 'graph measures for network {}: {}'.format(i, data[i])
    
    if not np.all(best_e_sgs[i]):
        
        print 'using simulated annealing to optimise e_sg on {}'.format(gml_filename)
        
        best_e_sgs[i] = simulated_annealing(i, gml_filename, labels)
        
        print 'best setting: {}'.format(best_e_sgs[i])
        
        save_obj(best_e_sgs, 'best_e_sgs')
        print 'saved best setting'
        print
    
print 'DONE'


loading data
loading best e_sgs
DONE

In [3]:
for i in range(num_networks):
    
    print i
    print 'density={}'.format(data[i, 0])
    print 'degree={}'.format(data[i, 1])
    print 'assortativity={}'.format(data[i, 2])
    print 'connectivity={}'.format(data[i, 3])
    print best_e_sgs[i]
    print


0
density=0.172119487909
degree=0.894736842105
assortativity=0.140361247201
connectivity=1.0
0.831204590969

1
density=0.0500992063492
degree=0.90625
assortativity=-0.0589250165893
connectivity=1.0
0.523654505201

2
density=0.0997023809524
degree=0.90625
assortativity=-0.054333630733
connectivity=4.0
0.489985990975

3
density=0.0724206349206
degree=0.921875
assortativity=0.0756115394842
connectivity=3.0
0.551399114004

4
density=0.0987103174603
degree=0.921875
assortativity=-0.0822713942949
connectivity=3.0
0.531578807129

5
density=0.104166666667
degree=0.90625
assortativity=0.129391863786
connectivity=3.0
0.3900944472

6
density=0.0739087301587
degree=0.921875
assortativity=-0.137556093946
connectivity=3.0
0.548779461445

7
density=0.110741971207
degree=0.906976744186
assortativity=0.121673129827
connectivity=1.0
0.483773388043

8
density=0.101686507937
degree=0.90625
assortativity=-0.0392703335153
connectivity=4.0
0.296994249766

9
density=0.0486111111111
degree=0.921875
assortativity=-0.0722346336713
connectivity=2.0
0.385431842906

10
density=0.0724206349206
degree=0.921875
assortativity=-0.0107198671616
connectivity=3.0
0.674837290666

11
density=0.0768849206349
degree=0.90625
assortativity=-0.0903658829274
connectivity=3.0
0.621088991129

12
density=0.0997023809524
degree=0.90625
assortativity=-0.0211202228067
connectivity=3.0
0.762131385554

13
density=0.0739087301587
degree=0.921875
assortativity=-0.112517468557
connectivity=3.0
0.837902570296

14
density=0.103670634921
degree=0.90625
assortativity=-0.0153881311063
connectivity=4.0
0.564617779054

15
density=0.046130952381
degree=0.921875
assortativity=0.199940670424
connectivity=1.0
0.550916063481

16
density=0.062996031746
degree=0.921875
assortativity=-0.0460152352964
connectivity=3.0
0.396208358495

17
density=0.0446428571429
degree=0.921875
assortativity=-0.0123521681997
connectivity=2.0
0.528770178414

18
density=0.0559049615653
degree=0.925925925926
assortativity=-0.0997513125173
connectivity=1.0
0.548961841806

19
density=0.0719246031746
degree=0.921875
assortativity=-0.18247683235
connectivity=3.0
0.688703482828

20
density=0.093253968254
degree=0.921875
assortativity=0.0681751712461
connectivity=2.0
0.634816244034

21
density=0.0739087301587
degree=0.921875
assortativity=0.0754510376473
connectivity=3.0
0.598901115558

22
density=0.0992063492063
degree=0.921875
assortativity=-0.0283827087829
connectivity=2.0
0.450514070198

23
density=0.0724206349206
degree=0.921875
assortativity=0.00382891465694
connectivity=3.0
0.452961884572

24
density=0.047619047619
degree=0.921875
assortativity=-0.102337969814
connectivity=2.0
0.530625055104

25
density=0.0962301587302
degree=0.921875
assortativity=0.0856777801885
connectivity=1.0
0.586600569783

26
density=0.0674603174603
degree=0.921875
assortativity=-0.117984505293
connectivity=2.0
0.478805462929

27
density=0.0758928571429
degree=0.90625
assortativity=-0.112990702479
connectivity=3.0
0.683479575909

28
density=0.0674603174603
degree=0.921875
assortativity=-0.0913809588854
connectivity=3.0
0.669797862376

29
density=0.047619047619
degree=0.921875
assortativity=0.21434528774
connectivity=2.0
0.125645058006

30
density=0.078869047619
degree=0.90625
assortativity=-0.0340421496812
connectivity=3.0
0.537893133396

31
density=0.0704365079365
degree=0.921875
assortativity=0.162642275227
connectivity=3.0
0.460112583084

32
density=0.0421626984127
degree=0.921875
assortativity=-0.0320672478207
connectivity=1.0
0.248057005839

33
density=0.0502630040912
degree=0.915254237288
assortativity=-0.143345216875
connectivity=2.0
0.54669365512

34
density=0.0456349206349
degree=0.921875
assortativity=0.0553468569997
connectivity=1.0
0.487020296808

35
density=0.0749007936508
degree=0.90625
assortativity=-0.125265309944
connectivity=3.0
0.714429289267

36
density=0.196638655462
degree=0.914285714286
assortativity=-0.149294574744
connectivity=1.0
0.8

37
density=0.0500992063492
degree=0.90625
assortativity=0.160432252702
connectivity=2.0
0.612042438572

38
density=0.121553884712
degree=0.912280701754
assortativity=-0.0351993266571
connectivity=1.0
0.64655760247

39
density=0.046626984127
degree=0.921875
assortativity=-0.123038516405
connectivity=1.0
0.369508877853

40
density=0.102678571429
degree=0.90625
assortativity=-0.0429066187789
connectivity=4.0
0.404647763943

41
density=0.0421626984127
degree=0.921875
assortativity=0.0497022724511
connectivity=1.0
0.403203891301

42
density=0.0729166666667
degree=0.921875
assortativity=-0.0208128449574
connectivity=3.0
0.416111014346

43
density=0.0699404761905
degree=0.921875
assortativity=-0.178662290604
connectivity=2.0
0.688698664286

44
density=0.0793650793651
degree=0.90625
assortativity=0.0023824602672
connectivity=3.0
0.401634334917

45
density=0.0446428571429
degree=0.921875
assortativity=-0.0065127294257
connectivity=1.0
0.681272319856

46
density=0.0907111756168
degree=0.905660377358
assortativity=-0.0279104332148
connectivity=1.0
0.393815066861

47
density=0.0984848484848
degree=0.909090909091
assortativity=-0.0426987497051
connectivity=1.0
0.896766168358

48
density=0.0684523809524
degree=0.921875
assortativity=-0.0849825863903
connectivity=2.0
0.382532098958

49
density=0.105158730159
degree=0.90625
assortativity=-0.156796001952
connectivity=4.0
0.837390517513

50
density=0.183531746032
degree=0.90625
assortativity=-0.0793681545979
connectivity=7.0
0.749875109748

51
density=0.0813492063492
degree=0.90625
assortativity=0.122569869725
connectivity=3.0
0.840616606121

52
density=0.182043650794
degree=0.90625
assortativity=-0.061611752982
connectivity=7.0
0.619953886189

53
density=0.0679563492063
degree=0.921875
assortativity=-0.174152221942
connectivity=3.0
0.583934314814

54
density=0.0987103174603
degree=0.921875
assortativity=-0.0988143631436
connectivity=4.0
0.331607577974

55
density=0.0753968253968
degree=0.90625
assortativity=-0.0994338363507
connectivity=3.0
0.633504965613

56
density=0.100198412698
degree=0.90625
assortativity=0.0163146215172
connectivity=4.0
0.551370209925

57
density=0.187003968254
degree=0.90625
assortativity=-0.00287006519773
connectivity=7.0
0.553375418782

58
density=0.103174603175
degree=0.90625
assortativity=-0.0303281453284
connectivity=4.0
0.480466885535

59
density=0.0927579365079
degree=0.921875
assortativity=-0.00489133421674
connectivity=4.0
0.639891306275

60
density=0.105654761905
degree=0.90625
assortativity=-0.0850465232744
connectivity=3.0
0.645502180569

61
density=0.186507936508
degree=0.90625
assortativity=0.0183499582594
connectivity=7.0
0.701534104903

62
density=0.0996078431373
degree=0.901960784314
assortativity=-0.0472764307773
connectivity=2.0
0.886713798158

63
density=0.172123015873
degree=0.921875
assortativity=-0.0779535225741
connectivity=7.0
0.803275476028

64
density=0.125496031746
degree=0.90625
assortativity=0.0533223292295
connectivity=4.0
0.482407354113

65
density=0.0694444444444
degree=0.921875
assortativity=-0.049919712022
connectivity=3.0
0.726102010884

66
density=0.0922619047619
degree=0.921875
assortativity=-0.0591602213188
connectivity=4.0
0.62898267886

67
density=0.08357685564
degree=0.898305084746
assortativity=0.0517535091301
connectivity=1.0
0.538887410591

68
density=0.175099206349
degree=0.90625
assortativity=0.226999533947
connectivity=7.0
0.618064946974

69
density=0.154265873016
degree=0.90625
assortativity=-0.134630582958
connectivity=6.0
0.719413403725

70
density=0.0436507936508
degree=0.921875
assortativity=-0.0213048163807
connectivity=1.0
0.70730336955

71
density=0.0947420634921
degree=0.921875
assortativity=-0.145384078152
connectivity=4.0
0.8

72
density=0.244444444444
degree=0.8
assortativity=-0.117647058824
connectivity=1.0
0.46005555991

73
density=0.136408730159
degree=0.90625
assortativity=0.587314125054
connectivity=3.0
0.591697961446

74
density=0.108134920635
degree=0.90625
assortativity=-0.0718296463435
connectivity=4.0
0.672386743286

75
density=0.122807017544
degree=0.842105263158
assortativity=-0.178571428571
connectivity=1.0
0.759476937458

76
density=0.0664682539683
degree=0.921875
assortativity=0.0724918130396
connectivity=3.0
0.800958110915

77
density=0.207837301587
degree=0.90625
assortativity=0.0208085851016
connectivity=8.0
0.586026386106

78
density=0.178571428571
degree=0.90625
assortativity=-0.188409554987
connectivity=6.0
0.566100986215

79
density=0.131448412698
degree=0.90625
assortativity=-0.0528838226862
connectivity=5.0
0.584829788321

80
density=0.155753968254
degree=0.90625
assortativity=0.0187335333417
connectivity=6.0
0.81325858827

81
density=0.0982142857143
degree=0.921875
assortativity=-0.0648071681638
connectivity=4.0
0.601079742433

82
density=0.093253968254
degree=0.921875
assortativity=-0.0993703159308
connectivity=4.0
0.463984595561

83
density=0.150793650794
degree=0.90625
assortativity=-0.0725853108477
connectivity=6.0
0.584449066885

84
density=0.0659722222222
degree=0.921875
assortativity=-0.206098406098
connectivity=3.0
0.784065719121

85
density=0.101686507937
degree=0.90625
assortativity=-0.163439941234
connectivity=4.0
0.602140270383

86
density=0.167658730159
degree=0.90625
assortativity=-0.0627677073074
connectivity=6.0
0.700999786157

87
density=0.18005952381
degree=0.90625
assortativity=-0.0988077312264
connectivity=7.0
0.544567212836

88
density=0.194444444444
degree=0.90625
assortativity=0.205562594776
connectivity=7.0
0.814737445583

89
density=0.1875
degree=0.90625
assortativity=-0.050240832459
connectivity=7.0
0.547482670593

90
density=0.176091269841
degree=0.90625
assortativity=-0.0713017643544
connectivity=7.0
0.788288109

91
density=0.222222222222
degree=0.888888888889
assortativity=-0.263157894737
connectivity=1.0
0.917367151944

92
density=0.0977182539683
degree=0.921875
assortativity=-0.114575060722
connectivity=4.0
0.360910667538

93
density=0.167162698413
degree=0.921875
assortativity=0.122022006567
connectivity=7.0
0.724833731146

94
density=0.0649801587302
degree=0.921875
assortativity=0.137870378795
connectivity=2.0
0.596617862245

95
density=0.173611111111
degree=0.921875
assortativity=-0.145063257855
connectivity=6.0
0.313676221745

96
density=0.0456349206349
degree=0.921875
assortativity=-0.103812117086
connectivity=2.0
0.665696327932

97
density=0.0967261904762
degree=0.921875
assortativity=-0.0374547776123
connectivity=4.0
0.690594856542

98
density=0.145833333333
degree=0.921875
assortativity=0.0458230097239
connectivity=6.0
0.667434895105

99
density=0.0977182539683
degree=0.921875
assortativity=-0.0604330748723
connectivity=4.0
0.628167745721

100
density=0.210813492063
degree=0.90625
assortativity=0.168473840665
connectivity=8.0
0.726108736121

101
density=0.101686507937
degree=0.90625
assortativity=-0.0258877160178
connectivity=4.0
0.743265707191

102
density=0.100198412698
degree=0.90625
assortativity=0.0565205982682
connectivity=4.0
0.691302475929

103
density=0.104166666667
degree=0.90625
assortativity=-0.167870657035
connectivity=4.0
0.611792502817

104
density=0.0625
degree=0.921875
assortativity=-0.109500737308
connectivity=2.0
0.566218227386

105
density=0.0824079485681
degree=0.898305084746
assortativity=-0.112167787384
connectivity=1.0
0.691876453134

106
density=0.0962301587302
degree=0.921875
assortativity=-0.0148691000778
connectivity=4.0
0.514823611065

107
density=0.130952380952
degree=0.90625
assortativity=0.121057203586
connectivity=5.0
0.63003605687

108
density=0.15763546798
degree=0.896551724138
assortativity=-0.0695770804911
connectivity=1.0
0.49911950756

109
density=0.175595238095
degree=0.90625
assortativity=0.116423336328
connectivity=7.0
0.763187257208

110
density=0.157738095238
degree=0.90625
assortativity=-0.00488753478032
connectivity=6.0
0.699669048942

111
density=0.166666666667
degree=0.90625
assortativity=-0.109814626127
connectivity=6.0
0.74149027928

112
density=0.0456349206349
degree=0.90625
assortativity=-0.102701657726
connectivity=1.0
0.191740355088

113
density=0.18253968254
degree=0.90625
assortativity=-0.0173465652753
connectivity=7.0
0.523644297699

114
density=0.183531746032
degree=0.90625
assortativity=0.108838865767
connectivity=5.0
0.640470693235

115
density=0.197420634921
degree=0.90625
assortativity=-0.103112431209
connectivity=7.0
0.8

116
density=0.18253968254
degree=0.90625
assortativity=-0.179145209112
connectivity=2.0
0.78434560466

117
density=0.183531746032
degree=0.90625
assortativity=-0.0728273740246
connectivity=7.0
0.778748137311

118
density=0.109126984127
degree=0.90625
assortativity=-0.103409103442
connectivity=4.0
0.840084822725

119
density=0.156746031746
degree=0.90625
assortativity=0.00366703404247
connectivity=6.0
0.622411640022

120
density=0.191474493361
degree=0.907407407407
assortativity=0.0394961562886
connectivity=1.0
0.742597933939

121
density=0.0957341269841
degree=0.921875
assortativity=-0.076353680795
connectivity=4.0
0.63566463408

122
density=0.145833333333
degree=0.921875
assortativity=0.200053633682
connectivity=2.0
0.536042890068

123
density=0.047123015873
degree=0.921875
assortativity=-0.100005461795
connectivity=1.0
0.674014319565

124
density=0.078869047619
degree=0.90625
assortativity=-0.125259673843
connectivity=3.0
0.354247660049

125
density=0.047123015873
degree=0.921875
assortativity=-0.064374069037
connectivity=1.0
0.521975029417

126
density=0.09375
degree=0.921875
assortativity=-0.0170162120432
connectivity=2.0
0.585807951324

127
density=0.176587301587
degree=0.90625
assortativity=0.171361965155
connectivity=7.0
0.58679074157

128
density=0.178075396825
degree=0.90625
assortativity=-0.0160436219673
connectivity=7.0
0.660684403688

129
density=0.1875
degree=0.90625
assortativity=-0.194633629885
connectivity=7.0
0.809124709492

130
density=0.10119047619
degree=0.90625
assortativity=-0.0051817149347
connectivity=4.0
0.671837991418

131
density=0.0684523809524
degree=0.921875
assortativity=-0.0656995443581
connectivity=1.0
0.424160382084

132
density=0.150793650794
degree=0.90625
assortativity=0.00392948013429
connectivity=6.0
0.742471041821

133
density=0.141865079365
degree=0.921875
assortativity=-0.0999737505071
connectivity=6.0
0.669769476355

134
density=0.142361111111
degree=0.921875
assortativity=0.00782178085666
connectivity=6.0
0.62329457542

135
density=0.203373015873
degree=0.90625
assortativity=-0.0694834632009
connectivity=8.0
0.83476751198

136
density=0.132936507937
degree=0.90625
assortativity=0.205172459715
connectivity=3.0
0.534377375859

137
density=0.162698412698
degree=0.90625
assortativity=0.0357382072197
connectivity=6.0
0.717638762435

138
density=0.140873015873
degree=0.90625
assortativity=-0.0633867893517
connectivity=5.0
0.8

139
density=0.14880952381
degree=0.921875
assortativity=-0.068540095296
connectivity=6.0
0.644366296041

140
density=0.179563492063
degree=0.90625
assortativity=0.576529258533
connectivity=3.0
0.731522100331

141
density=0.155257936508
degree=0.90625
assortativity=-0.00770399156292
connectivity=6.0
0.765351741042

142
density=0.150793650794
degree=0.90625
assortativity=0.257337839594
connectivity=6.0
0.503198033224

143
density=0.0694444444444
degree=0.921875
assortativity=0.0559128260093
connectivity=3.0
0.530008179923

144
density=0.466666666667
degree=0.904761904762
assortativity=-0.207498790889
connectivity=5.0
0.626690326679

145
density=0.215277777778
degree=0.90625
assortativity=0.0610601004297
connectivity=8.0
0.743422549389

146
density=0.181818181818
degree=0.909090909091
assortativity=-0.351351351351
connectivity=1.0
0.376484599329

147
density=0.111607142857
degree=0.90625
assortativity=-0.162982628268
connectivity=4.0
0.772686628377

148
density=0.181818181818
degree=0.909090909091
assortativity=-0.515151515152
connectivity=1.0
0.558255591183

149
density=0.210813492063
degree=0.90625
assortativity=-0.0303402128825
connectivity=8.0
0.626449521665

150
density=0.164186507937
degree=0.90625
assortativity=-0.160479481245
connectivity=6.0
0.806639814565

151
density=0.168154761905
degree=0.921875
assortativity=-0.052167807855
connectivity=7.0
0.823426870517

152
density=0.153273809524
degree=0.90625
assortativity=0.285807274658
connectivity=6.0
0.250851694157

153
density=0.143353174603
degree=0.921875
assortativity=-0.0276861326236
connectivity=6.0
0.502925844882

154
density=0.108134920635
degree=0.90625
assortativity=-0.12566885884
connectivity=4.0
0.58199907849

155
density=0.0694444444444
degree=0.921875
assortativity=-0.0340124635431
connectivity=3.0
0.591785283554

156
density=0.131944444444
degree=0.90625
assortativity=-0.0420077072518
connectivity=5.0
0.895298053907

157
density=0.224206349206
degree=0.90625
assortativity=0.313039903389
connectivity=3.0
0.664422123862

158
density=0.0694444444444
degree=0.921875
assortativity=-0.174584349125
connectivity=3.0
0.542161639779

159
density=0.141369047619
degree=0.921875
assortativity=0.0892158041568
connectivity=5.0
0.582925087898

160
density=0.152777777778
degree=0.90625
assortativity=0.202600355761
connectivity=5.0
0.605667001229

161
density=0.0451388888889
degree=0.921875
assortativity=-0.256801661475
connectivity=2.0
0.636257999887

162
density=0.127976190476
degree=0.90625
assortativity=0.237780422469
connectivity=5.0
0.646144931804

163
density=0.105158730159
degree=0.90625
assortativity=-0.194325147415
connectivity=1.0
0.601222373291

164
density=0.130952380952
degree=0.90625
assortativity=-0.000204435592897
connectivity=5.0
0.686420447537

165
density=0.152777777778
degree=0.90625
assortativity=0.271276303681
connectivity=6.0
0.606982989709

166
density=0.179067460317
degree=0.90625
assortativity=-0.0926019998546
connectivity=7.0
0.888505464077

167
density=0.158234126984
degree=0.90625
assortativity=0.226016476319
connectivity=6.0
0.534006224185

168
density=0.155753968254
degree=0.90625
assortativity=0.00977500287309
connectivity=6.0
0.854191405024

169
density=0.156746031746
degree=0.90625
assortativity=-0.20460773957
connectivity=6.0
0.967897270022

170
density=0.046130952381
degree=0.921875
assortativity=-0.103614294433
connectivity=1.0
0.536812172048

171
density=0.182043650794
degree=0.90625
assortativity=-0.0702836129359
connectivity=7.0
0.754674900514

172
density=0.128968253968
degree=0.90625
assortativity=-0.0168859035358
connectivity=5.0
0.712213314176

173
density=0.171130952381
degree=0.921875
assortativity=0.163172273205
connectivity=7.0
0.515752940157

174
density=0.0927579365079
degree=0.921875
assortativity=-0.042750929368
connectivity=4.0
0.623747205996

175
density=0.190972222222
degree=0.90625
assortativity=-0.0175665365035
connectivity=7.0
0.72237953452

176
density=0.160714285714
degree=0.90625
assortativity=-0.131136269881
connectivity=6.0
0.703237022616

177
density=0.152777777778
degree=0.90625
assortativity=-0.0526183018352
connectivity=6.0
0.608970884853

178
density=0.147321428571
degree=0.921875
assortativity=0.0620591749056
connectivity=6.0
0.584409502755

179
density=0.206845238095
degree=0.90625
assortativity=-0.221772812435
connectivity=8.0
0.848916480199

180
density=0.101686507937
degree=0.90625
assortativity=-0.120672049481
connectivity=4.0
0.765551868457

181
density=0.157738095238
degree=0.90625
assortativity=-0.0131278711178
connectivity=6.0
0.712023931786

182
density=0.135912698413
degree=0.90625
assortativity=0.35017948529
connectivity=5.0
0.218402046638

183
density=0.0709325396825
degree=0.921875
assortativity=-0.0219686503266
connectivity=3.0
0.341042103385

184
density=0.0758928571429
degree=0.90625
assortativity=-0.0936351986331
connectivity=3.0
0.683133071922

185
density=0.183035714286
degree=0.90625
assortativity=0.544747219638
connectivity=6.0
0.595095973474

186
density=0.0744047619048
degree=0.921875
assortativity=-0.0909190332106
connectivity=3.0
0.683598892792

187
density=0.198412698413
degree=0.921875
assortativity=0.163030640394
connectivity=7.0
0.739577375044

188
density=0.152777777778
degree=0.90625
assortativity=-0.125175151798
connectivity=5.0
0.529137371233

189
density=0.132936507937
degree=0.90625
assortativity=0.35260487962
connectivity=2.0
0.332999024763

190
density=0.157738095238
degree=0.90625
assortativity=0.044868929623
connectivity=6.0
0.555623089361

191
density=0.26455026455
degree=0.892857142857
assortativity=-0.0303063951967
connectivity=1.0
0.50670131435

192
density=0.130952380952
degree=0.90625
assortativity=-0.0164175712384
connectivity=5.0
0.740692386861

193
density=0.0729166666667
degree=0.921875
assortativity=-0.0618524468211
connectivity=3.0
0.642117663633

194
density=0.0669642857143
degree=0.921875
assortativity=-0.0267111853088
connectivity=3.0
0.665584697154

195
density=0.047123015873
degree=0.921875
assortativity=-0.090657165479
connectivity=2.0
0.189621353173

196
density=0.200892857143
degree=0.90625
assortativity=0.111658523285
connectivity=2.0
0.580314595752

197
density=0.199900793651
degree=0.90625
assortativity=-0.0682205473526
connectivity=8.0
0.72706147404

198
density=0.157738095238
degree=0.90625
assortativity=0.0805084306096
connectivity=6.0
0.685892172198

199
density=0.0451388888889
degree=0.921875
assortativity=-0.270622818299
connectivity=2.0
0.551672197292


In [15]:
def trendline(xd, yd, order=1, c='r', alpha=1, Rval=False):
    """Make a line of best fit"""

    #Calculate trendline
    coeffs = np.polyfit(xd, yd, order)

    intercept = coeffs[-1]
    slope = coeffs[-2]
    power = coeffs[0] if order == 2 else 0

    minxd = np.min(xd)
    maxxd = np.max(xd)

    xl = np.array([minxd, maxxd])
    yl = power * xl ** 2 + slope * xl + intercept

    #Plot trendline
    plt.plot(xl, yl, c, alpha=alpha)

    #Calculate R Squared
    p = np.poly1d(coeffs)

    ybar = np.sum(yd) / len(yd)
    ssreg = np.sum((p(xd) - ybar) ** 2)
    sstot = np.sum((yd - ybar) ** 2)
    Rsqr = ssreg / sstot

    if not Rval:
        #Plot R^2 value
        plt.text(0.8 * maxxd + 0.2 * minxd, 0.8 * np.max(yd) + 0.2 * np.min(yd),
                 '$R^2 = %0.2f$' % Rsqr)
    else:
        #Return the R^2 value:
        return Rsqr

import matplotlib.pyplot as plt

densities = data[:,0]
densities[densities>0.4] = 0.2
degrees = data[:,1]
assortativity = data[:,2]
connectivity = data[:,3]

plt.plot(densities, best_e_sgs, 'x')
trendline(densities, best_e_sgs)
plt.xlabel('density')
plt.ylabel('best $\epsilon_{sg}$')
plt.show()



In [13]:
import scipy
slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(connectivity, best_e_sgs)
print 'slope={}'.format(slope)
print 'intercept={}'.format(intercept)
print 'r_value={}'.format(r_value)
print 'p_value={}'.format(p_value)
print 'std_err={}'.format(std_err)


slope=0.0230822650119
intercept=0.522312809817
r_value=0.319077091126
p_value=4.12280548958e-06
std_err=0.00487230274197

In [8]:
import os

os.chdir("C:\Miniconda3\Jupyter\GHSOM_simplex_dsd")

print graph_measures("embedded_karate.gml")
print graph_measures("embedded_dolphin.gml")
print graph_measures("embedded_polbooks.gml")
print graph_measures("embedded_football.gml")


[ 0.13903743  0.85294118 -0.4756131   1.        ]
[ 0.0840825   0.79032258 -0.04359403  1.        ]
[ 0.08076923  0.86666667 -0.12789601  2.        ]
[ 0.09397407  0.93043478  0.14206724  7.        ]

In [11]:
def get_setting(density):
    return 1.00178865854 * density + 0.492288799343

os.chdir("C:\Miniconda3\Jupyter\GHSOM_simplex_dsd")

for network in ['karate', 'dolphin', 'polbooks', 'football']:
    
    G = nx.read_gml('embedded_{}.gml'.format(network))
    
    print get_setting(nx.density(G))


0.63157492299
0.576521690251
0.573202498687
0.586430952457

In [ ]: