Guest User

Untitled

a guest
Sep 22nd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. def _build_og(self, original_ppi):
  2. """ Build the original graph, without any nodes removed. """
  3.  
  4. try:
  5. graph_fp = open(original_ppi, 'r')
  6. except IOError:
  7. sys.exit("Could not open file: {}".format(original_ppi))
  8.  
  9. G = nx.DiGraph()
  10. edge_list = []
  11.  
  12. # parse network input
  13. for line in graph_fp.readlines():
  14. split_line = line.rstrip().split('t')
  15. # assume input graph is a simple edgelist with weights
  16. edge_list.append((split_line[0], split_line[1], float(split_line[2])))
  17.  
  18. G.add_weighted_edges_from(edge_list)
  19. graph_fp.close()
  20. print edge_list
  21.  
  22. return G
  23.  
  24. 1 1 0.9
  25. 1 2 0.075
  26. 1 3 0.25
  27. 2 1 0.15
  28. 2 2 0.8
  29. 2 3 0.05
  30. 3 1 0.25
  31. 3 2 0.25
  32. 3 3
  33.  
  34. def _build_matrices(self, original_ppi):
  35. """ Build column-normalized adjacency matrix for each graph.
  36.  
  37. NOTE: these are column-normalized adjacency matrices (not nx
  38. graphs), used to compute each p-vector
  39. """
  40. original_graph = self._build_og(original_ppi)
  41. self.OG = original_graph
  42. og_not_normalized = nx.to_numpy_matrix(original_graph)
  43. self.og_matrix = self._normalize_cols(og_not_normalized)
  44.  
  45. def run_exp(self, source):
  46.  
  47. CONV_THRESHOLD = 0.000001
  48. # set up the starting probability vector
  49. p_0 = self._set_up_p0(source)
  50. diff_norm = 1
  51. # this needs to be a deep copy, since we're reusing p_0 later
  52. p_t = np.copy(p_0)
  53.  
  54. while (diff_norm > CONV_THRESHOLD):
  55. # first, calculate p^(t + 1) from p^(t)
  56. p_t_1 = self._calculate_next_p(p_t, p_0)
  57.  
  58. # calculate L1 norm of difference between p^(t + 1) and p^(t),
  59. # for checking the convergence condition
  60. diff_norm = np.linalg.norm(np.subtract(p_t_1, p_t), 1)
  61.  
  62. # then, set p^(t) = p^(t + 1), and loop again if necessary
  63. # no deep copy necessary here, we're just renaming p
  64. p_t = p_t_1
  65.  
  66. def _set_up_p0(self, source):
  67. """ Set up and return the 0th probability vector. """
  68. p_0 = [0] * self.OG.number_of_nodes()
  69. # convert self.OG.number_of_nodes() to list
  70. l = list(self.OG.nodes())
  71. #nx.draw(self.OG, with_labels=True)
  72. #plt.show()
  73. for source_id in source:
  74. try:
  75. # matrix columns are in the same order as nodes in original nx
  76. # graph, so we can get the index of the source node from the OG
  77. source_index = l.index(source_id)
  78. p_0[source_index] = 1 / float(len(source))
  79. except ValueError:
  80. sys.exit("Source node {} is not in original graph. Source: {}. Exiting.".format(source_id, source))
  81.  
  82. return np.array(p_0)
  83.  
  84. def _calculate_next_p(self, p_t, p_0):
  85. """ Calculate the next probability vector. """
  86. print 'p_0t{}'.format(p_0)
  87. print 'p_tt{}'.format(p_t)
  88. epsilon = np.squeeze(np.asarray(np.dot(self.og_matrix, p_t)))
  89. print 'epsilont{}'.format(epsilon)
  90. print 10*"*"
  91. return np.array(epsilon)
  92.  
  93. p_0 [0. 1. 0.]
  94. p_t [0. 1. 0.]
  95. epsilon [0.3125 0.625 0.0625]
  96. **********
  97. p_0 [0. 1. 0.]
  98. p_t [0.3125 0.625 0.0625]
  99. epsilon [0.41582532 0.46461004 0.11956464]
  100. **********
  101. p_0 [0. 1. 0.]
  102. p_t [0.41582532 0.46461004 0.11956464]
  103. epsilon [0.44104068 0.3969176 0.16204171]
  104. **********
  105. p_0 [0. 1. 0.]
  106. p_t [0.44104068 0.3969176 0.16204171]
  107. epsilon [0.44017539 0.36889829 0.19092632]
  108. **********
  109. p_0 [0. 1. 0.]
  110. p_t [0.44017539 0.36889829 0.19092632]
  111. epsilon [0.43274594 0.35763862 0.20961544]
  112. **********
  113. p_0 [0. 1. 0.]
  114. p_t [0.43274594 0.35763862 0.20961544]
  115. epsilon [0.42532978 0.35332572 0.22134451]
  116. **********
  117. p_0 [0. 1. 0.]
  118. p_t [0.42532978 0.35332572 0.22134451]
  119. epsilon [0.41962966 0.35181043 0.22855991]
  120. **********
  121. p_0 [0. 1. 0.]
  122. p_t [0.41962966 0.35181043 0.22855991]
  123. epsilon [0.41569093 0.35137062 0.23293845]
  124. **********
  125. p_0 [0. 1. 0.]
  126. p_t [0.41569093 0.35137062 0.23293845]
  127. epsilon [0.41311858 0.3513113 0.23557012]
  128. **********
  129. p_0 [0. 1. 0.]
  130. p_t [0.41311858 0.3513113 0.23557012]
  131. epsilon [0.41149463 0.35136436 0.23714102]
  132. **********
  133. p_0 [0. 1. 0.]
  134. p_t [0.41149463 0.35136436 0.23714102]
  135. epsilon [0.41049166 0.35143431 0.23807403]
  136. **********
  137. p_0 [0. 1. 0.]
  138. p_t [0.41049166 0.35143431 0.23807403]
  139. epsilon [0.40988136 0.35149249 0.23862616]
  140. **********
  141. p_0 [0. 1. 0.]
  142. p_t [0.40988136 0.35149249 0.23862616]
  143. epsilon [0.40951383 0.35153418 0.23895199]
  144. **********
  145. p_0 [0. 1. 0.]
  146. p_t [0.40951383 0.35153418 0.23895199]
  147. epsilon [0.40929414 0.35156196 0.2391439 ]
  148. **********
  149. p_0 [0. 1. 0.]
  150. p_t [0.40929414 0.35156196 0.2391439 ]
  151. epsilon [0.40916352 0.35157973 0.23925675]
  152. **********
  153. p_0 [0. 1. 0.]
  154. p_t [0.40916352 0.35157973 0.23925675]
  155. epsilon [0.40908617 0.35159079 0.23932304]
  156. **********
  157. p_0 [0. 1. 0.]
  158. p_t [0.40908617 0.35159079 0.23932304]
  159. epsilon [0.40904049 0.35159756 0.23936195]
  160. **********
  161. p_0 [0. 1. 0.]
  162. p_t [0.40904049 0.35159756 0.23936195]
  163. epsilon [0.40901358 0.35160165 0.23938477]
  164. **********
  165. p_0 [0. 1. 0.]
  166. p_t [0.40901358 0.35160165 0.23938477]
  167. epsilon [0.40899775 0.35160411 0.23939815]
  168. **********
  169. p_0 [0. 1. 0.]
  170. p_t [0.40899775 0.35160411 0.23939815]
  171. epsilon [0.40898845 0.35160557 0.23940599]
  172. **********
  173. p_0 [0. 1. 0.]
  174. p_t [0.40898845 0.35160557 0.23940599]
  175. epsilon [0.40898299 0.35160643 0.23941058]
  176. **********
  177. p_0 [0. 1. 0.]
  178. p_t [0.40898299 0.35160643 0.23941058]
  179. epsilon [0.40897978 0.35160695 0.23941327]
  180. **********
  181. p_0 [0. 1. 0.]
  182. p_t [0.40897978 0.35160695 0.23941327]
  183. epsilon [0.40897791 0.35160725 0.23941485]
  184. **********
  185. p_0 [0. 1. 0.]
  186. p_t [0.40897791 0.35160725 0.23941485]
  187. epsilon [0.4089768 0.35160743 0.23941577]
  188. **********
  189. p_0 [0. 1. 0.]
  190. p_t [0.4089768 0.35160743 0.23941577]
  191. epsilon [0.40897616 0.35160753 0.23941631]
  192. **********
  193. p_0 [0. 1. 0.]
  194. p_t [0.40897616 0.35160753 0.23941631]
  195. epsilon [0.40897578 0.35160759 0.23941662]
  196. **********
  197. 1 0.41
  198. 3 0.35
  199. 2 0.24
Add Comment
Please, Sign In to add comment