고차원 데이터를위한 가장 빠른 PCA 알고리즘


11

약 40,000 개의 샘플로 구성된 데이터 세트에서 PCA를 수행하고 싶습니다. 각 샘플에는 약 10,000 개의 기능이 표시됩니다.

Matlab princomp 기능을 사용하면 프로세스가 중단되는 시점에서 30 분 이상 일관됩니다. 10 분 이내에 실행되는 구현 / 알고리즘을 찾고 싶습니다. 가장 빠른 알고리즘은 무엇입니까? i7 듀얼 코어 / 4GB 램에 얼마나 걸립니까?


예, 당신 말이 맞아요, 더 정확해야합니다. 30 분 이상 걸리고 프로세스를 중단하기로 결정했습니다. 나는 그것이 10 분 미만의 작품은 뭔가 가지고 좋은 것입니다 않습니다, 적어도 열 번이 작업을 수행해야

행렬이 얼마나 희박합니까?
Arnold Neumaier

행렬에서 0의 비율은 80 % 이상

kernal-PCA도 확인하십시오.
meawoppl

답변:


11

우선, 모든 구성 요소를 원하는지 가장 중요한 구성 요소를 원하는지 지정해야합니다.

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A

AA

C


2

소수 (또는 수백)의 지배적 인 특이 값 / 벡터 쌍만 필요하다고 생각합니다. 그런 다음 반복 방법을 사용하는 것이 가장 좋습니다.이 방법은 훨씬 빠르며 훨씬 적은 메모리를 사용합니다.

Matlab에서 참조하십시오

svds 도움말


예, 처음 백 개의 구성 요소 만 필요한 경우 반복 방법이 훨씬 빠릅니다.
mellow

svds에 관한 한, 나는 행렬을 희소 형식으로 넣고 princomp 함수를 수정하여 svd 대신 svd를 넣었습니다. 놀랍게도 2000 * 4000 행렬 (15 초 대신 180 초)에서 훨씬 오래 걸렸습니다. ). 기괴한 ...
부드러운

1
스파 스 형식으로 전환 할 필요가 없습니다. 또한 계산하려는 특이 벡터의 수를 줄여야합니다. fiull svd를 계산할 때는 svds가 적합하지 않습니다.
Arnold Neumaier



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.