데이터가 매우 희소 한 매우 큰 양의 행렬 (65M x 3.4M)의 단일 값 분해 (SVD)를 계산하는 가장 좋은 방법은 무엇입니까?
행렬의 0.1 % 미만이 0이 아닙니다. 나는 그 방법이 필요하다 :
- 메모리에 들어갈 것입니다 (온라인 방법이 있다는 것을 알고 있습니다)
- 적당한 시간에 계산됩니다 : 3,4 일
- 정확도는 충분하지만 정확성은 저의 주요 관심사가 아니므로 얼마나 많은 리소스를 넣었는지 제어하고 싶습니다.
그것을 구현하는 Haskell, Python, C # 등의 라이브러리가 있으면 좋을 것입니다. mathlab 또는 R을 사용하지 않지만 필요한 경우 R을 사용할 수 있습니다.
3
당신은 얼마나 많은 메모리를 가지고 있습니까? 65M * 3.4M의 0.1 %는 여전히 0이 아닌 221e9입니다. 값당 4 바이트를 사용하는 경우 오버 헤드가 없다고 가정해도 여전히 55GB를 초과하므로 희소성이 여전히 문제를 해결하지 못합니다. 전체 세트를 메모리에 한 번에로드해야합니까?
—
Bitwise
나는 더 정확해야했다. 32 비트 정수로 250-500mb를 넘지 않아야합니다. 아마도 훨씬 적지 만, 치수 이해는 내가 이해하는 문제입니다. 16GB 컴퓨터가 있습니다.
—
Sonia
이건 어때요? quora.com/…
—
비트 별
이 웹 페이지는 "빠르고, 증분하며, 메모리가 적은 대용량 매트릭스 SVD 알고리즘"을 구현하는 Python 라이브러리에 연결되어 있습니다. en.wikipedia.org/wiki/Latent_semantic_analysis
—
Bitwise
stats.stackexchange.com/questions/2806 도 참조하십시오 .
—
amoeba는