대수 / 정확한 수준에서 주성분 분석과 특이 값 분해 간의 관계를 이해합니다. 내 질문은 scikit-learn 구현 에 관한 것 입니다.
" [TruncatedSVD]는 PCA와 매우 유사하지만 공분산 행렬 대신 샘플 벡터에서 직접 작동합니다. "는 두 방법의 대수적 차이를 반영합니다. " 추정자 [TruncatedSVD]는 두 개의 알고리즘을 지원합니다. 빠른 무작위 SVD 솔버와 ARPACK을 (X * XT) 또는 (XT * X)에서 고유 한 해석기로 사용하는"순진한 "알고리즘 중 더 큰 알고리즘 효율적인. ". PCA에 대하여"데이터를 투영하기 위해 데이터의 특이 값 분해를 사용한 선형 차원 축소 ..."라고 말합니다. 그리고 PCA 구현은 동일한 두 알고리즘 (랜덤 화 및 ARPACK) 솔버와 다른 하나 인 LAPACK을 지원합니다. 코드를 살펴보면 PCA와 TruncatedSVD의 ARPACK과 LAPACK 모두 샘플 데이터 X에서 svd를 수행하고 ARPACK은 희소 행렬을 처리 할 수 있습니다 (svds 사용).
따라서 다른 속성과 방법을 제외하고 PCA는 LAPACK, PCA 및 TruncatedSVD scikit-learn 구현을 사용하여 정확한 전체 특이 값 분해를 추가로 수행 할 수 있다는 점에서 정확히 동일한 알고리즘 인 것 같습니다. 첫 번째 질문 : 이것이 맞습니까?
두번째 질문 : LAPACK 및 ARPACK 사용 scipy.linalg.svd (X)과 scipy.linalg.svds (X) 인 X 샘플 행렬들은 특이 값 분해 또는 고유 분해를 계산하더라도 또는 X를 ※ 내부 X T "무작위"솔버는 제품을 계산할 필요가 없습니다. (이는 수치 안정성과 관련이 있습니다. 데이터의 SVD를 통해 데이터의 PCA가 필요한 이유는 무엇입니까? 참조 ). 이 올바른지?