/tests/test_node2vec.py

https://github.com/VHRanger/graph2vec · Python · 234 lines · 208 code · 14 blank · 12 comment · 16 complexity · 8546910d9c6eae274624751e444143ed MD5 · raw file

  1. import networkx as nx
  2. import numpy as np
  3. import os
  4. from scipy import sparse
  5. from sklearn import manifold
  6. import unittest
  7. import warnings
  8. import csrgraph as cg
  9. import nodevectors
  10. class TestGraphEmbedding(unittest.TestCase):
  11. """
  12. higher level tests
  13. """
  14. def test_n2v(self):
  15. tt = nx.generators.complete_graph(50)
  16. wordsize = 32
  17. # Gensim triggers deprecation warnings...
  18. warnings.simplefilter("ignore", category=PendingDeprecationWarning)
  19. warnings.simplefilter("ignore", category=DeprecationWarning)
  20. g2v = nodevectors.Node2Vec(
  21. walklen=5,
  22. epochs=5,
  23. threads=6,
  24. n_components=wordsize,
  25. keep_walks=True,
  26. verbose=False,
  27. w2vparams={"window":3, "negative":3, "iter":3,
  28. "batch_words":32, "workers": 2})
  29. g2v2 = nodevectors.Node2Vec(
  30. walklen=5,
  31. epochs=5,
  32. threads=6,
  33. n_components=wordsize,
  34. keep_walks=False,
  35. verbose=False,
  36. w2vparams={"window":3, "negative":3, "iter":3,
  37. "batch_words":32, "workers": 2})
  38. g2v.fit(tt)
  39. g2v2.fit(tt)
  40. res_v = g2v.predict(9)
  41. self.assertTrue(len(res_v) == wordsize)
  42. self.assertTrue(len(g2v2.predict(9)) == wordsize)
  43. self.assertTrue(hasattr(g2v, 'walks'))
  44. self.assertFalse(hasattr(g2v2, 'walks'))
  45. warnings.resetwarnings()
  46. # Test save/load
  47. fname = 'test_saving'
  48. try:
  49. g2v.save(fname)
  50. g2v_l = nodevectors.Node2Vec.load(fname + '.zip')
  51. res_l = g2v_l.predict(9)
  52. self.assertTrue(len(res_l) == wordsize)
  53. np.testing.assert_array_almost_equal(res_l, res_v)
  54. finally:
  55. os.remove(fname + '.zip')
  56. def test_skl(self):
  57. tt = nx.generators.complete_graph(25)
  58. ndim = 3
  59. skle = nodevectors.SKLearnEmbedder(
  60. manifold.Isomap,
  61. n_components=ndim,
  62. n_neighbors=3)
  63. skle.fit(tt)
  64. res_v = skle.predict(9)
  65. self.assertTrue(len(res_v) == ndim)
  66. # Test save/load
  67. fname = 'test_saving'
  68. try:
  69. skle.save(fname)
  70. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  71. res_l = g2v_l.predict(9)
  72. self.assertTrue(len(res_l) == ndim)
  73. np.testing.assert_array_almost_equal(res_l, res_v)
  74. finally:
  75. os.remove(fname + '.zip')
  76. def test_ggvec(self):
  77. tt = nx.generators.complete_graph(25)
  78. ndim = 3
  79. skle = nodevectors.GGVec(
  80. n_components=ndim,
  81. tol=0.15,
  82. max_loss=15,
  83. learning_rate=0.1,
  84. negative_ratio=0.3,
  85. order=1,
  86. verbose=False,
  87. max_epoch=2000)
  88. skle.fit(tt)
  89. res_v = skle.predict(9)
  90. self.assertTrue(len(res_v) == ndim)
  91. # Test save/load
  92. fname = 'test_saving'
  93. try:
  94. skle.save(fname)
  95. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  96. res_l = g2v_l.predict(9)
  97. self.assertTrue(len(res_l) == ndim)
  98. np.testing.assert_array_almost_equal(res_l, res_v)
  99. finally:
  100. os.remove(fname + '.zip')
  101. def test_ggvec_order2(self):
  102. tt = nx.generators.complete_graph(25)
  103. ndim = 3
  104. skle = nodevectors.GGVec(
  105. n_components=ndim,
  106. tol=0.15,
  107. max_loss=15,
  108. learning_rate=0.1,
  109. negative_ratio=0.3,
  110. order=2,
  111. verbose=False,
  112. max_epoch=2000)
  113. skle.fit(tt)
  114. res_v = skle.predict(9)
  115. self.assertTrue(len(res_v) == ndim)
  116. # Test save/load
  117. fname = 'test_saving'
  118. try:
  119. skle.save(fname)
  120. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  121. res_l = g2v_l.predict(9)
  122. self.assertTrue(len(res_l) == ndim)
  123. np.testing.assert_array_almost_equal(res_l, res_v)
  124. finally:
  125. os.remove(fname + '.zip')
  126. def test_glove(self):
  127. tt = nx.generators.complete_graph(25)
  128. ndim = 3
  129. skle = nodevectors.Glove(
  130. n_components=ndim,
  131. tol=0.005,
  132. max_loss=15,
  133. learning_rate=0.1,
  134. verbose=False,
  135. max_epoch=2000)
  136. skle.fit(tt)
  137. res_v = skle.predict(9)
  138. self.assertTrue(len(res_v) == ndim)
  139. # Test save/load
  140. fname = 'test_saving'
  141. try:
  142. skle.save(fname)
  143. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  144. res_l = g2v_l.predict(9)
  145. self.assertTrue(len(res_l) == ndim)
  146. np.testing.assert_array_almost_equal(res_l, res_v)
  147. finally:
  148. os.remove(fname + '.zip')
  149. def test_prone(self):
  150. tt = nx.generators.complete_graph(25)
  151. ndim = 3
  152. skle = nodevectors.ProNE(n_components=ndim)
  153. skle.fit(tt)
  154. res_v = skle.predict(9)
  155. self.assertTrue(len(res_v) == ndim)
  156. # Test save/load
  157. fname = 'test_saving'
  158. try:
  159. skle.save(fname)
  160. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  161. res_l = g2v_l.predict(9)
  162. self.assertTrue(len(res_l) == ndim)
  163. np.testing.assert_array_almost_equal(res_l, res_v)
  164. finally:
  165. os.remove(fname + '.zip')
  166. def test_grarep(self):
  167. tt = nx.generators.complete_graph(25)
  168. ndim = 3
  169. skle = nodevectors.GraRep(n_components=ndim)
  170. skle.fit(tt)
  171. res_v = skle.predict(9)
  172. self.assertTrue(len(res_v) == ndim)
  173. # Test save/load
  174. fname = 'test_saving'
  175. try:
  176. skle.save(fname)
  177. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  178. res_l = g2v_l.predict(9)
  179. self.assertTrue(len(res_l) == ndim)
  180. np.testing.assert_array_almost_equal(res_l, res_v)
  181. finally:
  182. os.remove(fname + '.zip')
  183. def test_node2vec_factored_names(self):
  184. tt = cg.read_edgelist("./tests/unfactored_edgelist.csv", sep=",")
  185. ndim = 3
  186. skle = nodevectors.Node2Vec(
  187. walklen=5,
  188. epochs=5,
  189. threads=1,
  190. n_components=ndim,
  191. keep_walks=True,
  192. verbose=False,
  193. w2vparams={"window":3, "negative":3, "iter":3,
  194. "batch_words":32, "workers": 2})
  195. skle.fit(tt)
  196. res_v = skle.predict(9)
  197. self.assertTrue(len(res_v) == ndim)
  198. # Test save/load
  199. fname = 'test_saving'
  200. try:
  201. skle.save(fname)
  202. g2v_l = nodevectors.SKLearnEmbedder.load(fname + '.zip')
  203. res_l = g2v_l.predict(9)
  204. self.assertTrue(len(res_l) == ndim)
  205. np.testing.assert_array_almost_equal(res_l, res_v)
  206. finally:
  207. os.remove(fname + '.zip')
  208. def test_node2vec_fit_transform(self):
  209. tt = cg.read_edgelist("./tests/unfactored_edgelist.csv", sep=",")
  210. ndim = 3
  211. skle = nodevectors.Node2Vec(
  212. walklen=5,
  213. epochs=5,
  214. threads=1,
  215. n_components=ndim,
  216. keep_walks=True,
  217. verbose=False,
  218. w2vparams={"window":3, "negative":3, "iter":3,
  219. "batch_words":32, "workers": 2})
  220. skle.fit_transform(tt)