Thanks to visit codestin.com
Credit goes to github.com

Skip to content

SpectralClustering breaks normalized Laplacian when the row sums are negative #21274

@lobpcg

Description

@lobpcg

Describe the bug

_laplacian_dense from scipy\sparse\csgraph_laplacian.py breaks, crushing SpectralClustering

Steps/Code to Reproduce

import numpy as np
from sklearn.cluster import SpectralClustering
x = np.random.randn(100, 10)
x = x @ x.T
spectral = SpectralClustering(n_clusters=4, affinity='precomputed',
    random_state=0).fit(x)
result = list(spectral.labels_)
print(result)

Expected Results

No error

Actual Results

$ C:/Users/Name/AppData/Local/Programs/Python/Python37/python.exe c:/Users/Name/Downloads/tmp1.py
C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\sparse\csgraph\_laplacian.py:118: RuntimeWarning: invalid value encountered in sqrt
  w = np.where(isolated_node_mask, 1, np.sqrt(w))
Traceback (most recent call last):
  File "c:/Users/Name/Downloads/tmp1.py", line 6, in <module>
    random_state=0).fit(x)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\cluster\_spectral.py", line 590, in fit
    verbose=self.verbose,
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\cluster\_spectral.py", line 308, in spectral_clustering
    drop_first=False,
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\manifold\_spectral_embedding.py", line 300, in spectral_embedding
    laplacian, k=n_components, sigma=1.0, which="LM", tol=eigen_tol, v0=v0
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\sparse\linalg\eigen\arpack\arpack.py", line 1645, in eigsh
    hermitian=True, tol=tol)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\sparse\linalg\eigen\arpack\arpack.py", line 1069, in get_OPinv_matvec
    return LuInv(A).matvec
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\sparse\linalg\eigen\arpack\arpack.py", line 936, in __init__
    self.M_lu = lu_factor(M)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\scipy\linalg\decomp_lu.py", line 
70, in lu_factor
    a1 = asarray_chkfinite(a)
  File "C:\Users\Name\AppData\Local\Programs\Python\Python37\lib\site-packages\numpy\lib\function_base.py", line 489, in asarray_chkfinite
    "array must not contain infs or NaNs")
ValueError: array must not contain infs or NaNs

Versions

System:
python: 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)]
executable: C:\Users\Name\AppData\Local\Programs\Python\Python37\python.exe
machine: Windows-10-10.0.19041-SP0

Python dependencies:
pip: 21.2.4
setuptools: 58.1.0
sklearn: 1.0
numpy: 1.21.2
scipy: 1.7.1
Cython: 0.29.24
pandas: 1.3.3
matplotlib: 3.4.3
joblib: 1.0.1
threadpoolctl: 2.2.0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions