Bagaimana melakukan SVD untuk memasukkan nilai yang hilang, contoh konkret

8

Saya telah membaca komentar yang bagus mengenai bagaimana menangani nilai yang hilang sebelum menerapkan SVD, tetapi saya ingin tahu cara kerjanya dengan contoh sederhana:

        Movie1 Movie2 Movie3
User1     5             4
User2     2      5      5
User3            3      4
User4     1             5
User5     5      1      5

Mengingat matriks di atas, jika saya menghapus nilai-nilai NA, saya akan berakhir hanya memiliki User2 dan User5. Ini berarti bahwa u saya akan 2 × k. Tapi kalau aku memprediksi nilai-nilai yang hilang, U harus 5 × k, yang saya bisa kalikan dengan nilai-nilai tunggal dan V .

Apakah ada di antara Anda yang mengisi nilai-nilai yang hilang dalam matriks di atas dengan terlebih dahulu menghapus pengguna dengan nilai-nilai yang hilang dan kemudian menerapkan SVD? Harap berikan penjelasan yang sangat sederhana tentang prosedur yang Anda terapkan dan buat jawaban Anda praktis (yaitu angka dikalikan dengan nomor lain memberikan jawaban) daripada menggunakan terlalu banyak simbol matematika.

Saya telah membaca tautan berikut:

stats.stackexchange.com/q/33142

stats.stackexchange.com/q/31096

stats.stackexchange.com/q/33103

Boro Dega
sumber
Semua orang tidak menonton setidaknya satu film, kan? Jadi menghapus semua pengguna yang kehilangan data akan menghasilkan nol pengguna, dan nol baris dalam matriks utilitas (peringkat) Anda. Jadi, Anda tidak dapat menghapus baris yang kehilangan beberapa data, bukan? SVD tidak membantu untuk dataset dengan nilai yang hilang. Namun ada teknik faktorisasi matriks lain yang dapat menyalahkan mereka. Lihat, SVD akan membutuhkan Anda untuk memasukkan data yang hilang di muka, dengan cara lain. Anda dapat melakukan imputasi dengan cara konyol dengan hanya menggunakan konstanta lama tapi lalu apa gunanya menggunakan data sampah seperti itu? Apakah Anda ingin sampah menjadi keluaran?
Geoffrey Anderson

Jawaban:

5

SVD hanya didefinisikan untuk matriks lengkap. Jadi, jika Anda tetap menggunakan SVD biasa, Anda harus mengisi nilai-nilai yang hilang ini sebelumnya (SVD bukan algoritma pengungkitan per se). Kesalahan yang Anda perkenalkan semoga akan dibatalkan oleh pendekatan faktorisasi matriks Anda (asumsi umum: data dihasilkan oleh model peringkat rendah).

Menghapus baris lengkap seperti yang ingin Anda lakukan hanya buruk. Bahkan mengatur nilai yang hilang ke nol akan lebih baik.

Ada banyak strategi imputasi, tetapi dalam kasus ini, saya akan menyalahkan dengan rata-rata kolom (atau mungkin rata-rata baris). Ini pada dasarnya adalah rekomendasi strategi di tautan ke-2 Anda.

        Movie1 Movie2 Movie3
User1   5             4
User2   2      5      5
User3          3      4
User4   1             5
User5   5      1      5

menjadi (rata-rata kolom; skor rata-rata film)

        Movie1 Movie2 Movie3
User1   5      3      4
User2   2      5      5
User3   3      3      4
User4   1      3      5
User5   5      1      5

Dan satu lagi komentar: Anda harus mengolah data. Setidaknya kurangi mean dari semua nilai!

Lihat pengantar ini . Ini mensitute pendekatan SVD + SVD dan juga berbicara tentang pemodelan yang lebih langsung dari nilai-nilai yang hilang. Tetapi dalam kasus ini, algoritma lain digunakan.

sascha
sumber
Terimakasih atas balasan anda. Silakan lihat tautan blog ini . Tampaknya Simon hanya menggunakan peringkat yang tidak hilang, yaitu dia mengabaikan peringkat yang hilang. Apakah ini tidak sama dengan yang saya usulkan. Mohon saran.
Boro Dega
2
Luangkan waktu Anda dan baca tautan saya. Ini mencakup persis strategi yang dijelaskan bloglink Anda. Dia tidak menyalahkan apa pun dan dia tidak menggunakan SVD . Dia hanya menggunakan beberapa formulasi gradien keturunan Stochastic dari pendekatan termotivasi SVD (yang menawarkan kemungkinan untuk mengabaikan semua entri yang hilang)! Untuk informasi lebih lanjut hanya google untuk faktorisasi matriks + gradien stokastik . Ada banyak pekerjaan!
sascha
2

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.

Geoffrey Anderson
sumber
Refleksi yang bagus. Saya sangat suka jawaban Anda dan sangat tepat. Apakah Anda dapat memperluas jawaban Anda dengan skrip yang menunjukkan solusi Anda. Maka itu akan menjadi jawaban untuk pertanyaan itu. Terima kasih
Boro Dega
2

Makalah ini membahas apa yang Anda cari dalam detail yang sangat elegan (menggunakan soft threshold SVD). Seperti yang ditunjukkan Geoffrey, mereka melakukan ini dengan menulis fungsi biaya mereka sendiri yang tidak termasuk dalam biaya, setiap prediksi yang dibuat terhadap nilai-nilai yang hilang.

Ringkasan: Mazumdar et al menggunakan teknik relaksasi cembung untuk memberikan urutan solusi tingkat rendah yang teregulasi untuk masalah penyelesaian matriks skala besar. Algoritma SOFT-IMPUTE secara iteratif menggantikan elemen-elemen yang hilang dengan yang diperoleh dari SVD soft-threshold. Memanfaatkan struktur masalah, mereka menunjukkan bahwa tugas dapat dilakukan dengan kompleksitas urutan linear dalam dimensi matriks. Algoritma mudah terukur ke matriks besar; misalnya, cocok dengan pendekatan peringkat-95 ke pelatihan Netflix penuh yang ditetapkan dalam 3,3 jam. Metode mencapai pelatihan yang baik dan kesalahan pengujian dan memiliki timing yang unggul jika dibandingkan dengan teknik canggih lainnya yang kompetitif.

@artikel {mazumder2010spectral, title = {Algoritma regularisasi spektral untuk mempelajari matriks yang tidak lengkap}, penulis = {Mazumder, Rahul dan Hastie, Trevor dan Tibshirani, Robert}, jurnal = {Jurnal penelitian pembelajaran mesin}, volume = {11}, number = {Agt}, halaman = {2287--2322}, tahun = {2010}}

Ambareesh
sumber