parameters: (affinity, n_clusters=8, n_components=None,
                          eigen_solver=None, random_state=None, n_init=10,
                          eigen_tol=0.0, assign_labels='kmeans')
return_statement: return labels
docstring: Apply clustering to a projection of the normalized Laplacian.
  
      In practice Spectral Clustering is very useful when the structure of
      the individual clusters is highly non-convex or more generally when
      a measure of the center and spread of the cluster is not a suitable
      description of the complete cluster. For instance, when clusters are
      nested circles on the 2D plane.
  
      If affinity is the adjacency matrix of a graph, this method can be
      used to find normalized graph cuts.
  
      Read more in the :ref:`User Guide <spectral_clustering>`.
  
      Parameters
      ----------
      affinity : array-like or sparse matrix, shape: (n_samples, n_samples)
          The affinity matrix describing the relationship of the samples to
          embed. **Must be symmetric**.
  
          Possible examples:
            - adjacency matrix of a graph,
            - heat kernel of the pairwise distance matrix of the samples,
            - symmetric k-nearest neighbours connectivity matrix of the samples.
  
      n_clusters : integer, optional
          Number of clusters to extract.
  
      n_components : integer, optional, default is n_clusters
          Number of eigen vectors to use for the spectral embedding
  
      eigen_solver : {None, 'arpack', 'lobpcg', or 'amg'}
          The eigenvalue decomposition strategy to use. AMG requires pyamg
          to be installed. It can be faster on very large, sparse problems,
          but may also lead to instabilities
  
      random_state : int, RandomState instance or None (default)
          A pseudo random number generator used for the initialization of the
          lobpcg eigen vectors decomposition when eigen_solver == 'amg' and by
          the K-Means initialization. Use an int to make the randomness
          deterministic.
          See :term:`Glossary <random_state>`.
  
      n_init : int, optional, default: 10
          Number of time the k-means algorithm will be run with different
          centroid seeds. The final results will be the best output of
          n_init consecutive runs in terms of inertia.
  
      eigen_tol : float, optional, default: 0.0
          Stopping criterion for eigendecomposition of the Laplacian matrix
          when using arpack eigen_solver.
  
      assign_labels : {'kmeans', 'discretize'}, default: 'kmeans'
          The strategy to use to assign labels in the embedding
          space.  There are two ways to assign labels after the laplacian
          embedding.  k-means can be applied and is a popular choice. But it can
          also be sensitive to initialization. Discretization is another
          approach which is less sensitive to random initialization. See
          the 'Multiclass spectral clustering' paper referenced below for
          more details on the discretization approach.
  
      Returns
      -------
      labels : array of integers, shape: n_samples
          The labels of the clusters.
  
      References
      ----------
  
      - Normalized cuts and image segmentation, 2000
        Jianbo Shi, Jitendra Malik
        http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.160.2324
  
      - A Tutorial on Spectral Clustering, 2007
        Ulrike von Luxburg
        http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.165.9323
  
      - Multiclass spectral clustering, 2003
        Stella X. Yu, Jianbo Shi
        https://www1.icsi.berkeley.edu/~stellayu/publication/doc/2003kwayICCV.pdf
  
      Notes
      -----
      The graph should contain only one connect component, elsewhere
      the results make little sense.
  
      This algorithm solves the normalized cut for k=2: it is a
      normalized spectral clustering.
docstring_summary: Apply clustering to a projection of the normalized Laplacian.
docstring_tokens: Apply clustering to a projection of the normalized Laplacian .
function: def spectral_clustering(affinity, n_clusters=8, n_components=None,
                          eigen_solver=None, random_state=None, n_init=10,
                          eigen_tol=0.0, assign_labels='kmeans'):
      """Apply clustering to a projection of the normalized Laplacian.
  
      In practice Spectral Clustering is very useful when the structure of
      the individual clusters is highly non-convex or more generally when
      a measure of the center and spread of the cluster is not a suitable
      description of the complete cluster. For instance, when clusters are
      nested circles on the 2D plane.
  
      If affinity is the adjacency matrix of a graph, this method can be
      used to find normalized graph cuts.
  
      Read more in the :ref:`User Guide <spectral_clustering>`.
  
      Parameters
      ----------
      affinity : array-like or sparse matrix, shape: (n_samples, n_samples)
          The affinity matrix describing the relationship of the samples to
          embed. **Must be symmetric**.
  
          Possible examples:
            - adjacency matrix of a graph,
            - heat kernel of the pairwise distance matrix of the samples,
            - symmetric k-nearest neighbours connectivity matrix of the samples.
  
      n_clusters : integer, optional
          Number of clusters to extract.
  
      n_components : integer, optional, default is n_clusters
          Number of eigen vectors to use for the spectral embedding
  
      eigen_solver : {None, 'arpack', 'lobpcg', or 'amg'}
          The eigenvalue decomposition strategy to use. AMG requires pyamg
          to be installed. It can be faster on very large, sparse problems,
          but may also lead to instabilities
  
      random_state : int, RandomState instance or None (default)
          A pseudo random number generator used for the initialization of the
          lobpcg eigen vectors decomposition when eigen_solver == 'amg' and by
          the K-Means initialization. Use an int to make the randomness
          deterministic.
          See :term:`Glossary <random_state>`.
  
      n_init : int, optional, default: 10
          Number of time the k-means algorithm will be run with different
          centroid seeds. The final results will be the best output of
          n_init consecutive runs in terms of inertia.
  
      eigen_tol : float, optional, default: 0.0
          Stopping criterion for eigendecomposition of the Laplacian matrix
          when using arpack eigen_solver.
  
      assign_labels : {'kmeans', 'discretize'}, default: 'kmeans'
          The strategy to use to assign labels in the embedding
          space.  There are two ways to assign labels after the laplacian
          embedding.  k-means can be applied and is a popular choice. But it can
          also be sensitive to initialization. Discretization is another
          approach which is less sensitive to random initialization. See
          the 'Multiclass spectral clustering' paper referenced below for
          more details on the discretization approach.
  
      Returns
      -------
      labels : array of integers, shape: n_samples
          The labels of the clusters.
  
      References
      ----------
  
      - Normalized cuts and image segmentation, 2000
        Jianbo Shi, Jitendra Malik
        http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.160.2324
  
      - A Tutorial on Spectral Clustering, 2007
        Ulrike von Luxburg
        http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.165.9323
  
      - Multiclass spectral clustering, 2003
        Stella X. Yu, Jianbo Shi
        https://www1.icsi.berkeley.edu/~stellayu/publication/doc/2003kwayICCV.pdf
  
      Notes
      -----
      The graph should contain only one connect component, elsewhere
      the results make little sense.
  
      This algorithm solves the normalized cut for k=2: it is a
      normalized spectral clustering.
      """
      if assign_labels not in ('kmeans', 'discretize'):
          raise ValueError("The 'assign_labels' parameter should be "
                           "'kmeans' or 'discretize', but '%s' was given"
                           % assign_labels)
  
      random_state = check_random_state(random_state)
      n_components = n_clusters if n_components is None else n_components
  
      # The first eigen vector is constant only for fully connected graphs
      # and should be kept for spectral clustering (drop_first = False)
      # See spectral_embedding documentation.
      maps = spectral_embedding(affinity, n_components=n_components,
                                eigen_solver=eigen_solver,
                                random_state=random_state,
                                eigen_tol=eigen_tol, drop_first=False)
  
      if assign_labels == 'kmeans':
          _, labels, _ = k_means(maps, n_clusters, random_state=random_state,
                                 n_init=n_init)
      else:
          labels = discretize(maps, random_state=random_state)
  
      return labels
function_tokens: def spectral_clustering ( affinity , n_clusters = 8 , n_components = None , eigen_solver = None , random_state = None , n_init = 10 , eigen_tol = 0.0 , assign_labels = 'kmeans' ) : if assign_labels not in ( 'kmeans' , 'discretize' ) : raise ValueError ( "The 'assign_labels' parameter should be " "'kmeans' or 'discretize', but '%s' was given" % assign_labels ) random_state = check_random_state ( random_state ) n_components = n_clusters if n_components is None else n_components # The first eigen vector is constant only for fully connected graphs # and should be kept for spectral clustering (drop_first = False) # See spectral_embedding documentation. maps = spectral_embedding ( affinity , n_components = n_components , eigen_solver = eigen_solver , random_state = random_state , eigen_tol = eigen_tol , drop_first = False ) if assign_labels == 'kmeans' : _ , labels , _ = k_means ( maps , n_clusters , random_state = random_state , n_init = n_init ) else : labels = discretize ( maps , random_state = random_state ) return labels