2013-06-09 5 views
6

잠정적 의미 론적 분석 (LSA)을 사용하는 프로젝트를 진행 중입니다. 대용량 데이터 세트에서 SVD (singular value decomposition)를 사용해야하는 경우가 있습니다. Windows/Visual Studio 환경에서 사용할 수있는 무작위 SVD (rSVD) 구현이 있습니까? redsvd라는 프로젝트를 보았지만 Linux에서만 지원되는 것으로 보입니다.Windows 환경에서 LSA LSI에 대한 무작위 SVD

답변

2

ILNumerics가있을 수도 있지만 rSVD를하고 있는지 여부를 알지 못했고 라이브러리에 대한 개인적인 경험이 없지만 다행스럽게도 NuGet을 통해 사용할 수 있습니다.

또한 NAG가

http://ilnumerics.net/apidoc/Index.html?topic=html/Overload_ILNumerics_ILMath_svd.htm

,하지만 지불 : 여기

http://ilnumerics.net

는 SVD 구현에 문서입니다 나는 또한 redsvd을 체크 아웃 http://www.nag.co.uk/numeric/numerical_libraries.asp

, 나는 내기 C#으로 이식하거나 윈도우에서 컴파일 할 수 있습니다. 그것들이 당신의 요구를 만족시키지 못한다면 나는 알려주고 포트의 복잡성을 살펴볼 것입니다.

업데이트 :

그럼 오늘 밤 집에있어 그것에게 주사를하기로 결정했다.

https://github.com/hoonto/redsvdwin

비주얼 스튜디오에서 rsvd3.sln를 열고을 구축, 당신은 얻을 것이다 : 여기 GitHub의에 게시 Visual Studio 2010에서 Visual Studio 2010를 사용하여 Windows 작업 redsvd 얻을 수있는 정말 빠른 방법입니다 Debug 디렉토리에있는 rsvd3.exe.

C:\Users\MLM\Documents\Visual Studio 2010\Projects\redsvdwin\Debug>rsvd3.exe 
usage: redsvd --input=string --output=string [options] ... 

redsvd supports the following format types (one line for each row) 

[format=dense] (<value>+\n)+ 
[format=sparse] ((colum_id:value)+\n)+ 
Example: 
>redsvd -i imat -o omat -r 10 -f dense 
compuate SVD for a dense matrix in imat and output omat.U omat.V, and omat.S 
with the 10 largest eigen values/vectors 
>redsvd -i imat -o omat -r 3 -f sparse -m PCA 
compuate PCA for a sparse matrix in imat and output omat.PC omat.SCORE 
with the 3 largest principal components 

options: 
    -i, --input  input file (string) 
    -o, --output output file's prefix (string) 
    -r, --rank  rank  (int [=10]) 
    -f, --format format type (dense|sparse) See example. (string [=dense]) 
    -m, --method method (SVD|PCA|SymEigen) (string [=SVD]) 

그리고 거기는 다음과 같습니다

를 실행합니다. 그런데 mains가있는 Incr 파일을 원하면 redsvdMain.cpp를 빌드하고 redsvdMainIncr.cpp를 포함 시키려면 redsvdMain.cpp을 만듭니다. 두 가지 모두 메인 버전을 가지고 있기 때문에 Incr 버전을 제외하고 일반 버전을 구축했습니다.

또한 Eigen3 헤더를 github 저장소에 포함 시켰으며이를 솔루션 구성에 대한 추가 포함에 넣었습니다. 따라서이 두 가지를 모두 참고할 필요가 없습니다.

마지막으로 Visual Studio에 대한 지식으로 cxxabi.h와 같은 것이 없으므로 일부 부정 행위를 했으므로 다음과 같이 주석을 달았 기 때문에 내가 변경 한 부분을 볼 수 있습니다.

//MLM: commented next 3 
//... 
//... 
//... 
//MLM: added 1 
... 

등. 따라서 조정이 필요한 경우 내 변경 사항을 알 수 있습니다.

+0

첫째, 노력에 감사드립니다! 둘째, 경제 QR 분해의 구현이 없기 때문에 수치 연산을 사용하여 SVD를 효율적으로 구현할 수 없습니다. – Leeor

+0

내게 기쁨, 그 문제가 있으면 SO 또는 github을 통해 문의하십시오. Ilnumerics 및 경제 QR에 대한 흥미로운.요즘 내 수학은 아주 녹슨 것이지만, 왜 일용량이 그렇게 큰 길이로 가고 왜 그렇게되지 않을지 궁금합니다. Matlab에 따르면, "m> n 일 경우 Q의 첫 번째 n 열과 R의 첫 번째 n 행만 계산됩니다 .m <= n이면 [Q, R] = qr (A)와 같습니다. . " 어쩌면 나는 그것을 볼 수는 없지만, 그것이 지표를 구현하는 것이 어렵지는 않을 것입니다. 나는 뭔가를 간과해야합니다. 아마 그들은 미래의 날을 위해 레이더에 가지고있을 것입니다. – hoonto

2

qr in ILNumerics에는 경제 규모의 분해를 수행 할 수있는 과부하 ILMath.qr (A, outR, outE, economy)이 있습니다.

+1

나는 어떻게 든 그 선택을 놓쳤다. .. 나는 그것을 조사 할 것이다, 고마워! – Leeor