python pca variance explained




LinAlgError:"SVD가 수렴하지 않음"LinAlgError:SVD가 matplotlib pca 결정에 수렴하지 않음 (4)

나는 numpy 1.11.0을 사용하고있다. 행렬에 1 이상의 고유 값이 0 인 경우 'SVD가 수렴하지 않음'이 발생합니다.

코드 :

import numpy
from matplotlib.mlab import PCA
file_name = "store1_pca_matrix.txt"
ori_data = numpy.loadtxt(file_name,dtype='float', comments='#', delimiter=None,                 converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
result = PCA(ori_data)

이것은 내 코드입니다. 내 입력 행렬에 nan과 inf가 없지만 아래에 나와있는 오류가 발생합니다.

raise LinAlgError("SVD did not converge") LinAlgError: SVD did not converge

뭐가 문제 야?


나는이 지위가 오래되었음을 알고 있지만 다른 누군가가 같은 문제에 부딪 힐 경우에 대비해. @jseabold는 문제가 nan 또는 inf라고 말했을 때 맞았습니다. 데이터가 nan 또는 inf가 없다고 말하면 op가 아마 맞을 것입니다. 그러나 ori_data의 열 중 하나가 항상 동일한 값을 가지면 데이터는 Nans를 얻습니다. mlab의 PCA 구현은 입력 데이터를 정규화합니다.

ori_data = (ori_data - mean(ori_data)) / std(ori_data).

해결 방법은 다음과 같습니다.

result = PCA(ori_data, standardize=False)

이 방법으로 평균 만 표준 편차로 나누지 않고 뺍니다.


데이터가 정확하다고해도 메모리가 부족하여 문제가 발생할 수 있습니다. 필자의 경우, 32 비트 머신에서 더 큰 메모리를 가진 64 비트 머신으로 이동하면 문제가 해결됩니다.


이것은 입력 데이터 행렬 (PCA에 입력하는)의 단일 특성으로 인한 것일 수 있습니다.







pca