Apa cara terbaik untuk menghitung dekomposisi nilai singular (SVD) dari matriks positif yang sangat besar (65M x 3.4M) di mana data sangat jarang?
Kurang dari 0,1% dari matriks adalah nol. Saya butuh cara itu:
- akan masuk ke dalam memori (saya tahu bahwa ada metode online)
- akan dihitung dalam waktu yang wajar: 3,4 hari
- akan cukup akurat namun akurasi bukan perhatian utama saya dan saya ingin dapat mengontrol berapa banyak sumber daya yang saya masukkan ke dalamnya.
Akan sangat bagus untuk memiliki perpustakaan Haskell, Python, C # dll yang mengimplementasikannya. Saya tidak menggunakan mathlab atau R tetapi jika perlu saya bisa menggunakan R.
Jawaban:
Jika cocok dengan memori, buat matriks jarang dalam R menggunakan paket Matrix , dan coba irlba untuk SVD. Anda dapat menentukan berapa banyak vektor tunggal yang Anda inginkan dalam hasilnya, yang merupakan cara lain untuk membatasi perhitungan.
Itu matriks yang cukup besar, tapi saya sudah mendapatkan hasil yang sangat baik dengan metode ini di masa lalu.
irlba
cukup canggih. Ini menggunakan algoritma bi-diagonisasi Lanczos yang dimulai kembali secara implisit .Itu dapat mengunyah dataset hadiah Netflix (480.189 baris dengan 17.770 kolom, 100.480.507 entri tidak nol) dalam milidetik. Dataset Anda ~ 200.000 kali lebih besar dari dataset Netflix, jadi butuh waktu lebih lama dari itu. Mungkin masuk akal untuk berharap bahwa ia dapat melakukan perhitungan dalam beberapa hari.
sumber
Matrix
? Coba batasi jumlah nilai tunggal yang Anda hitung ... mungkin hanya melihat 10 besar?sumber