Tôi đang làm việc trên một dự án bao gồm việc sử dụng phân tích ngữ nghĩa tiềm ẩn (LSA). Điều này đòi hỏi việc sử dụng phân tách giá trị số ít (SVD), đôi khi trên các tập dữ liệu lớn. Có thực hiện ngẫu nhiên-SVD (rSVD) có sẵn cho môi trường Windows \ Visual Studio không? Tôi đã thấy một dự án gọi là redsvd nhưng có vẻ như nó chỉ được hỗ trợ trên Linux.SVD ngẫu nhiên cho LSA LSI trên môi trường Windows
Trả lời
ILNumerics có thể có nó nhưng tôi không thấy liệu họ làm rSVD và tôi không có kinh nghiệm cá nhân với thư viện nhưng nó có sẵn thông qua NuGet may mắn thay.
Dưới đây là các tài liệu về việc thực hiện SVD của họ:
http://ilnumerics.net/apidoc/Index.html?topic=html/Overload_ILNumerics_ILMath_svd.htm
Ngoài ra còn có NAG, nhưng trả nó: http://www.nag.co.uk/numeric/numerical_libraries.asp
Tôi cũng kiểm tra ra redsvd, và tôi đặt cược Tôi có thể hoặc là cổng nó đến C# cho bạn hoặc ít nhất có được nó để biên dịch trên cửa sổ. Nếu những người không đáp ứng nhu cầu của bạn cho tôi biết và tôi sẽ xem xét sự phức tạp của cảng.
UPDATE:
Vâng tôi về nhà tối nay và quyết định để cho nó một shot. Đây là một cách thực sự nhanh chóng để có được redsvd làm việc trên Windows sử dụng Visual Studio 2010. Tôi đăng nó trên github:
https://github.com/hoonto/redsvdwin
Mở rsvd3.sln trong Visual Studio, xây dựng nó, và bạn sẽ nhận được một rsvd3.exe trong thư mục Debug.
Run rằng:
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])
Và có nó được. Bằng cách này, điều này xây dựng redsvdMain.cpp, nếu bạn muốn các tập tin Incr với chính nó, loại trừ redsvdMain.cpp và bao gồm redsvdMainIncr.cpp. Vì cả hai đều có chính trong họ, tôi chỉ loại trừ phiên bản Incr và xây dựng phiên bản thông thường.
Ngoài ra, tôi cũng bao gồm các tiêu đề Eigen3 trong kho lưu trữ github và đặt chúng trong phần Bao gồm bổ sung cho cấu hình giải pháp, vì vậy bạn không cần phải giả mạo điều đó chút nào.
Một điều cuối cùng, không có những điều như cxxabi.h cho kiến thức của tôi cho Visual Studio, vì vậy tôi đã làm một số gian lận, bạn sẽ thấy nơi tôi đã thực hiện thay đổi bởi vì họ sẽ được bình luận như vậy:
//MLM: commented next 3
//...
//...
//...
//MLM: added 1
...
v.v. Vì vậy, nếu bạn cần phải thực hiện điều chỉnh, bạn sẽ biết những thay đổi của tôi ở đâu.
qr trong ILNumerics có quá tải ILMath.qr (A, outR, outE, economy) cho phép thực hiện phân đoạn có kích thước kinh tế đó.
Tôi bằng cách nào đó đã bỏ lỡ tùy chọn đó ... Tôi sẽ kiểm tra nó, cảm ơn! – Leeor
Đầu tiên, cảm ơn nỗ lực! Thứ hai, việc thực hiện SVD hiệu quả không thể thực hiện được với Ilnumerics vì không có việc thực hiện phân tích QR nền kinh tế ... – Leeor
Niềm vui của tôi, nếu bạn có bất kỳ vấn đề nào, vui lòng liên hệ với SO hoặc qua github. Thú vị về Ilnumerics và nền kinh tế QR.Toán học của tôi là rất gỉ trong những ngày này, nhưng tôi tự hỏi tại sao Ilnumerics sẽ đi đến độ dài tuyệt vời như vậy và không làm điều đó? Theo Matlab nó chỉ là: "Nếu m> n, chỉ có n cột đầu tiên của Q và n hàng đầu tiên của R được tính toán. Nếu m <= n, điều này giống như [Q, R] = qr (A) . " Có lẽ tôi không nhìn thấy nó, nhưng điều đó không có vẻ khó khăn cho việc thực hiện. Tôi phải nhìn cái gì đó. Có lẽ họ có nó trên radar cho một ngày trong tương lai. – hoonto