class_docstr: An implementation of `"GEMSEC" <https://arxiv.org/abs/1802.03997>`_
  from the ASONAM '19 paper "GEMSEC: Graph Embedding with Self Clustering".
  The procedure uses random walks to approximate the pointwise mutual information
  matrix obtained by pooling normalized adjacency matrix powers. This matrix
  is decomposed by an approximate factorization technique which is combined
  with a k-means like clustering cost. A node embedding and clustering are
  learned jointly.
  
  Args:
      walk_number (int): Number of random walks. Default is 5.
      walk_length (int): Length of random walks. Default is 80.
      dimensions (int): Dimensionality of embedding. Default is 32.
      negative_samples (int): Number of negative samples. Default is 5.
      window_size (int): Matrix power order. Default is 5.
      learning_rate (float): Gradient descent learning rate. Default is 0.1.
      clusters (int): Number of cluster centers. Default is 10.
      gamma (float): Clustering cost weight coefficient. Default is 0.1.
      seed (int): Random seed value. Default is 42.
class_docstr_tok: ["An","implementation","of","`","``","GEMSEC","''","<","https",":","\/\/arxiv.org\/abs\/1802.03997",">","`","_","from","the","ASONAM","'19","paper","``","GEMSEC",":","Graph","Embedding","with","Self","Clustering","''",".","The","procedure","uses","random","walks","to","approximate","the","pointwise","mutual","information","matrix","obtained","by","pooling","normalized","adjacency","matrix","powers",".","This","matrix","is","decomposed","by","an","approximate","factorization","technique","which","is","combined","with","a","k-means","like","clustering","cost",".","A","node","embedding","and","clustering","are","learned","jointly",".","Args",":","walk_number","(","int",")",":","Number","of","random","walks",".","Default","is","5.","walk_length","(","int",")",":","Length","of","random","walks",".","Default","is","80.","dimensions","(","int",")",":","Dimensionality","of","embedding",".","Default","is","32.","negative_samples","(","int",")",":","Number","of","negative","samples",".","Default","is","5.","window_size","(","int",")",":","Matrix","power","order",".","Default","is","5.","learning_rate","(","float",")",":","Gradient","descent","learning","rate",".","Default","is","0.1.","clusters","(","int",")",":","Number","of","cluster","centers",".","Default","is","10.","gamma","(","float",")",":","Clustering","cost","weight","coefficient",".","Default","is","0.1.","seed","(","int",")",":","Random","seed","value",".","Default","is","42","."]
code: def __init__(
      self,
      walk_number: int = 5,
      walk_length: int = 80,
      dimensions: int = 32,
      negative_samples: int = 5,
      window_size: int = 5,
      learning_rate: float = 0.1,
      clusters: int = 10,
      gamma: float = 0.1,
      seed: int = 42,
  ):
      self.walk_number = walk_number
      self.walk_length = walk_length
      self.dimensions = dimensions
      self.negative_samples = negative_samples
      self.window_size = window_size
      self.learning_rate = learning_rate
      self.clusters = clusters
      self.gamma = gamma
      self.seed = seed
  
imports: import random
  import numpy
  import networkx
  from typing import Dict
  from karateclub.estimator import Estimator
  from karateclub.utils.walker import RandomWalker
label_desc: Use image node_id 1 to create a new GEMSEC object from inherited base classes: Estimator with example: obj = GEMSEC(walk_number, walk_length, dimensions, negative_samples, window_size, learning_rate, clusters, gamma, seed)