class_docstr: An implementation of `"FEATHER-N" <https://arxiv.org/abs/2005.07959>`_
  from the CIKM '20 paper "Characteristic Functions on Graphs: Birds of a Feather,
  from Statistical Descriptors to Parametric Models". The procedure
  uses characteristic functions of node features with random walk weights to describe
  node neighborhoods.
  
  Args:
      reduction_dimensions (int): SVD reduction dimensions. Default is 64.
      svd_iterations (int): SVD iteration count. Default is 20.
      theta_max (float): Maximal evaluation point. Default is 2.5.
      eval_points (int): Number of characteristic function evaluation points. Default is 25.
      order (int): Scale - number of adjacency matrix powers. Default is 5.
      seed (int): Random seed value. Default is 42.
docstr: Fitting a FEATHER-N model.
  
  Arg types:
      * **graph** *(NetworkX graph)* - The graph to be embedded.
      * **X** *(Scipy COO or Numpy array)* - The matrix of node features.
docstr_tok: ["Fitting","a","FEATHER-N","model",".","Arg","types",":","*","*","*","graph","*","*","*","(","NetworkX","graph",")","*","-","The","graph","to","be","embedded",".","*","*","*","X","*","*","*","(","Scipy","COO","or","Numpy","array",")","*","-","The","matrix","of","node","features","."]
code: def fit(
      self,
      graph: nx.classes.graph.Graph,
      X: Union[np.array, coo_matrix],
  ):
      """
      Fitting a FEATHER-N model.
  
      Arg types:
          * **graph** *(NetworkX graph)* - The graph to be embedded.
          * **X** *(Scipy COO or Numpy array)* - The matrix of node features.
      """
      self._set_seed()
      graph = self._check_graph(graph)
      X = self._create_reduced_features(X)
      A_tilde = self._create_A_tilde(graph)
      theta = np.linspace(0.01, self.theta_max, self.eval_points)
      X = np.outer(X, theta)
      X = X.reshape(graph.number_of_nodes(), -1)
      X = np.concatenate([np.cos(X), np.sin(X)], axis=1)
      self._feature_blocks = []
      for _ in range(self.order):
          X = A_tilde.dot(X)
          self._feature_blocks.append(X)
      self._feature_blocks = np.concatenate(
          self._feature_blocks, axis=1
      )
  
file_path: karateclub/karateclub/node_embedding/attributed/feathernode.py
imports: import scipy
  import numpy
  import networkx
  from typing import Union
  from scipy.sparse import coo_matrix
  from karateclub.estimator import Estimator
  from sklearn.decomposition import TruncatedSVD
label_desc: Use image node_id 6 for calling the FeatherNode obj's underlying member method code with example usage: obj.fit(graph, X) without return types