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


11

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

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


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

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

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

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

답변:


11

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

A∈RN×MNM

C∈RM×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.