Apa yang terjadi ketika Anda menerapkan SVD ke masalah pemfilteran kolaboratif? Apa perbedaan keduanya?

21

Dalam pemfilteran Kolaboratif, kami memiliki nilai yang tidak diisi. Misalkan pengguna tidak menonton film maka kami harus meletakkan 'na' di sana.

Jika saya akan mengambil SVD dari matriks ini, maka saya harus memasukkan beberapa angka di sana - katakan 0. Sekarang, jika saya membuat faktorisasi matriks, saya punya metode untuk menemukan pengguna yang serupa (dengan mencari tahu pengguna mana yang lebih dekat di ruang dimensi berkurang). Tetapi preferensi yang diprediksi itu sendiri - untuk pengguna ke item akan menjadi nol. (karena itulah yang kami masukkan pada kolom yang tidak dikenal).

Jadi saya terjebak dengan masalah filtering kolaboratif vs SVD. Mereka tampaknya hampir sama, tetapi tidak cukup.

Apa perbedaan di antara mereka dan apa yang terjadi ketika saya menerapkan SVD pada masalah pemfilteran kolaboratif? Ya, dan hasilnya tampaknya dapat diterima dalam hal menemukan pengguna terdekat, yang bagus, tetapi bagaimana?

Jason
sumber

Jawaban:

25

Ok, ketika Anda mengatakan SVD, mungkin Anda berbicara tentang SVD terpotong (di mana Anda hanya menyimpan nilai singular terbesar). Ada dua cara berbeda untuk melihat SVD terpotong dari sebuah matriks. Salah satunya adalah definisi standar:k

Pertama Anda melakukan SVD: , di mana dan adalah matriks rotasi, dan memiliki nilai singular di sepanjang diagonal. Kemudian Anda memilih nilai tunggal atas , nol di luar sisanya, dan memangkas baris dan kolom yang tidak relevan untuk membuat perkiraan -rank ke aslinya: UVΣkkX ˜ X = ˜ U n × k k × k ˜ Σ ˜ V T k × mXn×m=Un×nΣn×mVTm×mUVΣkkXX~=U~n×kΣ~k×kV~Tk×m

Ini semua bagus dan keren (dan mudah diimplementasikan dalam R atau matlab), tetapi tidak masuk akal ketika berbicara tentang matriks dengan nilai yang hilang. Namun, ada properti menarik dari SVD terpotong - Ini adalah pendekatan -rank terbaik ke aslinya! Itu adalah:kkk

X~=SebuahrgmsayanB:rSebuahnk(B)=ksaya,j(Xsayaj-Bsayaj)2

Properti ini tampaknya mudah digeneralisasi dengan nilai kasus yang hilang. Pada dasarnya Anda sedang mencari matriks -rank yang meminimalkan kesalahan kuadrat elemen-bijaksana di seluruh entri yang diketahui dari matriks asli. Artinya, saat Anda melatih sistem, Anda mengabaikan semua nilai yang hilang. (Untuk tips tentang bagaimana Anda benar-benar dapat menemukan perkiraan -rank, berikut adalah beberapa tempat untuk dilihat).kk

Kemudian, setelah Anda menghasilkan pendekatan "tutup" -rank yang sesuai dengan aslinya, Anda menggunakannya untuk mengisi nilai yang hilang. Yaitu, jika tidak ada, maka Anda mengisi . Tada! Anda sudah selesai.kXsayajX~sayaj

Joe Pete yang kekar
sumber
3

Sepertinya ada banyak pendekatan tentang cara menangani nilai-nilai yang hilang. Makalah berikut dengan ulasan di Bagian 1.3 mungkin merupakan titik awal yang baik.

d_ijk_stra
sumber
0

Saya perlu lebih banyak reputasi untuk mengomentari jawaban Stumpy Joe Pete karena itu saya memposting ini sebagai jawaban.

Terima kasih kekar atas jawabannya meskipun saya pikir itu perlu sedikit klarifikasi. Khususnya saya maksud kalimat ini:

Pada dasarnya Anda mencari matriks k-rank yang meminimalkan kesalahan kuadrat elemen-bijaksana di seluruh entri yang diketahui dari matriks asli.

Pertama - bukankah peringkat tertinggi selalu meminimalkan ini, atau benar-benar merekonstruksi matriks X asli? Kedua - Mengapa Anda hanya mengambil entri yang diketahui . Secara intuitif memang masuk akal, tetapi prosedur ini juga cocok dengan tempat kosong yang diganti dengan beberapa angka yang masuk akal.

Pendekatan saya adalah melakukan sesuatu seperti validasi silang:

  1. Isi tempat kosong dengan 0s atau cara atau angka masuk akal lainnya.
  2. Ganti salah satu dari n elemen yang diketahui dengan 0 atau angka yang masuk akal
  3. Melakukan rekonstruksi SVD pangkat k
  4. Periksa nilai elemen rekonstruksi yang dikenal .
  5. ulangi untuk semua elemen yang mungkin diketahui dan hitung MSE
  6. ulangi untuk semua kemungkinan k dan pilih satu dengan MSE terendah.
Karol Przybylak
sumber
1. Anda ingin memilih k rendah untuk menghindari overfitting (jauh lebih rendah dari dimensi X apa pun). Ini pada dasarnya karena alasan yang sama bahwa regresi linier adalah pilihan yang lebih baik daripada quintic untuk pemasangan dataset 6 poin. 2. Anda tidak tahu apa yang seharusnya menjadi entri yang tidak dikenal, jadi Anda tidak bisa mengukur "elemen-bijaksana MSE" di dalamnya. Prosedur saya mengisi nilai-nilai yang hilang dengan angka-angka yang diturunkan dengan meminimalkan kesalahan terhadap nilai-nilai yang diketahui (dan membatasi bahwa matriks harus peringkat rendah).
Stumpy Joe Pete