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","."]
docstr: Updating the embedding weights and cluster centers with gradient descent.
docstr_tok: ["Updating","the","embedding","weights","and","cluster","centers","with","gradient","descent","."]
code: def _do_gradient_descent(self):
      """
      Updating the embedding weights and cluster centers with gradient descent.
      """
      random.shuffle(self._walker.walks)
      for walk in self._walker.walks:
          for i, source_node in enumerate(
              walk[: self.walk_length - self.window_size]
          ):
              for step in range(1, self.window_size + 1):
                  target_node = walk[i + step]
                  self._update_a_weight(source_node, target_node)
  
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 10 for calling the GEMSEC obj's underlying member method code with example usage: obj._do_gradient_descent() without return types