R을 사용하여 텍스트 분류 작업을 수행하고 있으며 크기가 22490 x 120,000 (0이 아닌 4 백만 개, 1 % 미만) 인 문서 용어 행렬을 얻습니다. 이제 PCA (Principal Component Analysis)를 사용하여 차원을 줄이려고합니다. 불행히도 R은이 거대한 행렬을 처리 할 수 없으므로이 희소 행렬을 “매트릭스 마켓 형식”의 파일에 저장하고 다른 기술을 사용하여 PCA를 수행하기를 희망합니다.
따라서 누구나 유용한 라이브러리 (프로그래밍 언어에 관계없이)에 대한 힌트를 줄 수 있습니다.이 대규모 행렬로 PCA를 쉽게 수행하거나 직접 PCA를 수행 할 수 있습니다. 즉, 처음에 공분산 행렬을 계산하고 공분산 행렬에 대한 고유 값과 고유 벡터를 계산합니다 .
내가 원하는 것은 모든 PC (120,000) 를 계산하고 90 % 차이를 차지하는 상위 N 개의 PC 만 선택하는 것 입니다. 분명히,이 경우에는 매우 작은 분산 값을 0으로 설정하기 위해 임계 값에 우선 순위를 부여해야합니다 (공분산 행렬에서). 그렇지 않으면 공분산 행렬은 희소하지 않으며 크기는 120,000 x 120,000입니다. 하나의 기계로 처리 할 수 없습니다. 또한, 로딩 (고유 벡터)은 매우 클 것이며 희소 형식으로 저장해야합니다.
어떤 도움을 주셔서 대단히 감사합니다!
참고 : 24GB RAM과 8 개의 CPU 코어가있는 컴퓨터를 사용하고 있습니다.
답변
irlba 패키지를 제안합니다-svd와 거의 동일한 결과를 생성하지만 해결하기 위해 더 작은 수의 특이 값을 정의 할 수 있습니다. 희소 행렬을 사용하여 Netflix 상을 해결하는 예는 다음에서 찾을 수 있습니다. http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html
답변
SLEPc 를 사용하여 부분 SVD를 계산하는 것이 좋습니다 . 자세한 내용은 사용 설명서의 4 장 및 SVD 매뉴얼 페이지 를 참조하십시오.
답변
다른 NLP / TA 작업에도 적합하고 맵 / 축소를 구현하는 mahout에 투표합니다 .
답변
증분 특이 값 분해를 사용하는 것이 좋습니다. 그중 많은 문헌이 있습니다. 예를 들어 :
- Matthew Brand 1 과 2 의 기술 보고서 는 상당히 이해하기 쉽습니다.
- Chris Baker의 석사 논문 , 소프트웨어 IncPACK 및 이후 증분 SVD 방법에 대한 논문
- 번치와 닐슨은 가장 오래된 알려진 논문을 출판
- 고유 값 문제 1 및 2 업데이트에 대한 Hall의 논문
- Levy 등의 순차적 Karhunen-Loeve 분석 ( 기본적으로 동일한 것)
이러한 모든 접근 방식은 다음과 같이 축소됩니다.
- 작은 데이터 세트로 시작
- 어떻게 든 SVD를 계산하십시오 (이 단계는 단일 열 행렬의 경우 간단합니다)
- 완료 될 때까지 반복하십시오.
- 새로운 데이터 세트 추가
- 기존 SVD 및 업데이트 규칙을 사용하여 새 데이터 세트의 SVD 계산
응용 프로그램에서 상위 값에 대한 특이 값 임계 값의 위치를 알 수있는 경우 해당 값을 사용하여 잘린 SVD를 계산할 수 있습니다. 임계 값이 충분히 작 으면 메모리에 유지해야하는 행렬도 작아집니다 (임계 값을 초과하는 특이 값 만 단일 벡터와 함께 유지되므로 왼쪽과 오른쪽을 모두 단수로 유지할 필요조차 없습니다) 브랜드 알고리즘에서 벡터).
N답변
여전히 R을 사용할 수 있습니다.
Revolution R
RAM보다 큰 데이터 세트를 처리하는 R의 빌드입니다. 기능을 사용하십시오 princomp
.
또한 선형 회귀, 로지스틱 회귀, Quantile 등과 같이 RAM에 맞지 않는 빅 데이터 스타일 문제를 위해 특별히 설계된 모든 범위의 통계 기능을 가지고 있습니다.
“아카데미입니다”상자를 선택하여 모든 기능을 갖춘 Academic 버전을 무료로 다운로드 할 수 있습니다.