Ada banyak cara untuk memprediksi nilai yang hilang tetapi SVD klasik bukan salah satunya. Yang menyenangkan adalah bahwa pembelajaran mesin sekarang menawarkan banyak cara untuk melakukan ini, beberapa di antaranya didasarkan pada faktorisasi matriks, yang lain sama sekali berbeda dari faktorisasi matriks. Anda dapat memilih dan membuat model yang sepenuhnya khusus, dan ini biasa dilakukan sekarang karena alatnya cukup kuat saat ini. Faktorisasi matriks masih merupakan cara yang baik untuk memprediksi nilai yang hilang dalam data jarang, tetapi SVD sendiri tidak.
Jawaban yang diterima di sini, tampaknya menyarankan si penanya untuk hanya memilih nilai konstan seperti 0 atau 99 atau -3 atau apa pun, untuk menetapkan nilai-nilai yang hilang sebelumnya, dan kemudian jalankan SVD pada itu. Ini adalah jawaban yang buruk jika tujuannya adalah untuk memprediksi pada dataset yang jarang. Tetapi jika sebaliknya tujuan OP hanya untuk menjalankan SVD, maka pra-menetapkan nilai konstan akan berfungsi dengan baik, jadi pilih nilai apa pun dan jalankan SVD jika hasilnya tidak masalah untuk OP. Saya mengatakan SVD adalah solusi buruk untuk prediksi nilai-nilai yang hilang karena dengan asumsi nilai konstan di semua lokasi yang jarang bisa berakhir adalah Anda memperkenalkan lebih banyak titik kebisingan daripada titik data yang diketahui.
Apa gunanya belajar kebisingan? Dan mengapa Anda bahkan menyarankan bahwa nilai-nilai yang hilang sebenarnya adalah nilai konstan yang sama, ketika tujuan dari latihan ini adalah untuk memprediksi apa nilai-nilai itu? Anda tidak mengharapkan nilai yang hilang benar-benar sama, bukan? Itu akan meremehkan jumlah komponen utama yang dihasilkan jika ada data konstan yang meresap dalam dataset Anda, untuk satu hal. Juga itu masalah prediksi yang sangat mudah. Anda tidak perlu algoritma pembelajaran atau bahkan algoritma faktorisasi. Anda baru saja mengatakan bahwa nilai yang hilang adalah konstanta yang diketahui. Tidak perlu menyalahkan! Anda sudah melakukannya secara manual, hanya dengan menebak-nebak cara kuno.
Anda bisa mendapatkan ahli dengan SVD dan pre-impute nilai yang hilang menggunakan distribusi acak yang diturunkan secara empiris menggunakan mean dan standar deviasi dari data yang diketahui (tidak hilang). Tapi kemudian ada keacakan bukan pola dalam data dan Anda mungkin diharapkan faktorisasi matriks dan pengurangan dimensi yang melekat dalam teknik itu untuk menemukan pola yang Anda harapkan ada di sana. Anda tidak akan menemukan banyak pola penggunaan apa pun dalam noise acak, jadi tidak membantu menggunakan cara ini juga.
Intinya adalah bahwa output dari SVD - atau algoritma lainnya - akan sebagian besar sampah setiap kali ada sejumlah besar data sampah yang disediakan oleh penyelidik. Tidak ada algoritma yang dapat mempelajari model yang baik dari data sampah mayoritas. Katakan saja tidak pada "pendekatan" keseluruhan itu.
Tampaknya tujuan OP adalah untuk memprediksi, dan menggunakan desain faktorisasi matriks sebagai bagian dari algoritma pembelajaran. Dalam hal ini, hal baiknya adalah Anda dapat menulis fungsi biaya Anda sendiri yang sangat penting untuk menghilangkan biaya, setiap prediksi yang dibuat terhadap nilai yang hilang. Tidak ada data sampah yang diumpankan ke algoritma pembelajaran dengan cara ini.Gunakan pengoptimal berbasis gradient-descent yang baik, seperti Adam (ada yang lain). Anda bisa mendapatkan solusi yang terukur akurat hingga tingkat apa pun pada pelatihan, dev, dan dataset uji, asalkan Anda mengikuti metodologi proyek pembelajaran mesin yang baik. Jangan ragu untuk menambahkan istilah dan kompleksitas ke model Anda seperti bias pengguna, bias item, bias global, regularisasi, atau apa pun yang Anda butuhkan untuk mengontrol kesalahan bias dan kesalahan varians untuk persyaratan proyek Anda dan kumpulan data yang tersedia.
Paket pengembangan pembelajaran mesin modern menjadikan ini pendekatan praktis sekarang. TensorFlow misalnya (atau Microsoft CNTK et al) dapat membantu Anda melakukan apa yang saya jelaskan pada dataset yang jarang menggunakan model faktorisasi matriks.