raise LinAlgError(“SVD did not converge”) LinAlgError: SVD did not converge in matplotlib pca determination

前端 未结 9 1216
后悔当初
后悔当初 2021-02-05 02:10

code :

import numpy
from matplotlib.mlab import PCA
file_name = \"store1_pca_matrix.txt\"
ori_data = numpy.loadtxt(file_name,dtype=\'float\', comments=\'#\', de         


        
相关标签:
9条回答
  • 2021-02-05 02:42

    This may be due to the singular nature of your input datamatrix (which you are feeding to PCA)

    0 讨论(0)
  • 2021-02-05 02:43

    Even if your data is correct, it may happen because it runs out of memory. In my case, moving from a 32-bit machine to a 64-bit machine with bigger memory solved the problem.

    0 讨论(0)
  • 2021-02-05 02:48

    I do not have an answer to this question but I have the reproduction scenario with no nans and infs. Unfortunately the datataset is pretty large (96MB gzipped).

    import numpy as np
    from StringIO import StringIO
    from scipy import linalg
    import urllib2
    import gzip
    
    url = 'http://physics.muni.cz/~vazny/gauss/X.gz'
    X = np.loadtxt(gzip.GzipFile(fileobj=StringIO(urllib2.urlopen(url).read())), delimiter=',')
    linalg.svd(X, full_matrices=False)
    

    which rise:

    LinAlgError: SVD did not converge
    

    on:

    >>> np.__version__
    '1.8.1'
    >>> import scipy
    >>> scipy.__version__
    '0.10.1'
    

    but did not raise an exception on:

    >>> np.__version__
    '1.8.2'
    >>> import scipy
    >>> scipy.__version__
    '0.14.0'
    
    0 讨论(0)
  • 2021-02-05 02:53

    This can happen when there are inf or nan values in the data.

    Use this to remove nan values:

    ori_data.dropna(inplace=True)
    
    0 讨论(0)
  • 2021-02-05 02:53

    Following on @c-chavez answer, what worked for me was first replacing inf and -inf to nan, then removing nan. For example:

    data = data.replace(np.inf, np.nan).replace(-np.inf, np.nan).dropna()
    
    0 讨论(0)
  • 2021-02-05 03:01

    This happened to me when I accidentally resized an image dataset to (0, 64, 3). Try checking the shape of your dataset to see if one of the dimensions is 0.

    0 讨论(0)
提交回复
热议问题