대규모 PCA도 가능합니까?


10

PCA (Principal Component Analysis)의 고전적인 방법은 열의 평균이 0 인 입력 데이터 매트릭스에서 수행하는 것입니다 (PCA는 "분산을 최대화 할 수 있습니다"). 컬럼을 중심으로하여 쉽게 달성 할 수 있습니다. 그러나 입력 행렬이 희소 인 경우 중심 행렬은 더 이상 희소하므로 행렬이 매우 큰 경우 더 이상 메모리에 맞지 않습니다. 스토리지 문제에 대한 알고리즘 솔루션이 있습니까?


5
전체 데이터 행렬이 메모리에 맞지 않더라도 공분산 또는 그람 행렬이 메모리에 적합 할 수 있습니다. 이것들은 PCA를 수행하기에 충분합니다. 어떤 크기의 입력 데이터 매트릭스를 생각하십니까? stats.stackexchange.com/questions/35185 도 참조하십시오 .
amoeba

1
@amoeba : 500K 샘플 (행)과 300K 기능 (열)을보고 있습니다
Roy

소프트웨어와 관련하여 Apache Spark는 spark.apache.org/docs/latest/… 를 사용하여 구현시 메모리 부족 데이터를 처리합니다.
Tim

답변:


11

네 가능합니다.

데이터 매트릭스가 RAM에 맞지 않으면 아직 끝나지 않았습니다. 하드 드라이브에 저장된 데이터를 처리 할 수있는 효율적인 알고리즘이 있습니다. Halko et al., 2010, 대규모 데이터 세트의 주성분 분석 알고리즘에 설명 된대로 무작위 PCA를 참조하십시오 .

6.2 절에서 저자는 400k 곱하기 100k 데이터 매트릭스에서 알고리즘을 시도했으며

본 논문의 알고리즘은 1.5 GB의 RAM을 갖는 랩탑 컴퓨터를 사용하여 디스크에 저장된이 150 세트의 모든 데이터 세트를 처리하는데 12.3 시간이 필요했다 [...].

이것은 옛날의 마그네틱 하드 드라이브였습니다. 오늘날에는 훨씬 빠른 솔리드 스테이트 드라이브가 사용 가능하므로 동일한 알고리즘이 훨씬 더 빠른 성능을 발휘할 것 같습니다.

무작위 PCA : 수많은 기능 (> 10K)을위한 최고의 PCA 알고리즘에 대한 자세한 내용은이 오래된 스레드를 참조하십시오 . Halko et al.에 의한 2011 년 대규모 검토 : 랜덤 성을 갖는 구조 찾기 : 근사 행렬 분해를 구성하기위한 확률 알고리즘 .

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