SVD dari matriks dengan nilai yang hilang

12

Misalkan saya memiliki matriks rekomendasi gaya Netflix, dan saya ingin membangun model yang memprediksi peringkat film masa depan yang potensial untuk pengguna tertentu. Menggunakan pendekatan Simon Funk, orang akan menggunakan keturunan gradien stokastik untuk meminimalkan norma Frobenius antara matriks penuh dan item-by-item * pengguna-oleh-pengguna matriks dikombinasikan dengan istilah regularisasi L2.

Dalam praktiknya, apa yang dilakukan orang dengan nilai-nilai yang hilang dari matriks rekomendasi, yang merupakan inti dari melakukan perhitungan? Tebakan saya dari membaca posting blog Simon adalah bahwa ia HANYA menggunakan istilah yang tidak hilang (yang terdiri dari (katakanlah) ~ 1% dari matriks rekomendasi) untuk membangun model (dengan beberapa pilihan hiper-parameter dan regularisasi) untuk memprediksi 99% lainnya dari matriks?

Dalam praktiknya, apakah Anda benar-benar melewatkan semua nilai itu? Atau apakah Anda menyimpulkan sebanyak mungkin sebelum melakukan penurunan gradien stokastik? Apa saja praktik terbaik standar untuk menangani nilai-nilai yang hilang?

Vishal
sumber
1
Sepertinya pertanyaan yang sama untuk ini . Saya menjawab pertanyaan di sana.
d_ijk_stra
2
Saya juga menjawab .
Stumpy Joe Pete
2
@d_ijk_stra "answer" menempatkannya sedikit dengan murah hati untuk jumlah tautan ke PDF
ali_m

Jawaban:

6

Ya, dalam praktiknya nilai-nilai tersebut dilewati. Dalam deskripsi Anda dalam hal norma Frobenius, ini terkait dengan meminimalkan komponen-komponen norma yang dapat diukur, yaitu mereka yang telah mengetahui peringkat. Istilah regularisasi dapat dilihat sebagai Bayesian prior pada komponen vektor fitur, dengan SVD menghitung estimator kemungkinan maksimum, sesuai dengan nilai prior dan diketahui ini.

Mungkin terbaik untuk memikirkan SVD sebagai metode untuk menyimpulkan nilai yang hilang. Jika Anda sudah memiliki cara yang lebih baik untuk melakukan ini, mengapa Anda membutuhkan SVD? Jika tidak, maka SVD akan dengan senang hati mengisi celah untuk Anda.

Martin O'Leary
sumber
1
Bagaimana Anda menggunakan SVD untuk menyimpulkan nilai-nilai yang hilang? Sudahkah Anda mencoba metode lain untuk menyimpulkan nilai yang hilang, misalnya menggunakan nilai yang tidak hilang untuk melatih pengelompokan acak-hutan, yang kemudian dapat digunakan untuk menebak nilai Anda yang hilang? Apakah Anda mendapatkan hasil yang lebih baik, atau itu benar-benar tergantung masalah?
Vishal
1
Anda menyimpulkan nilai yang hilang dengan cara yang sama Anda akan memprediksi nilai masa depan, dengan menggunakan komponen yang relevan dari dekomposisi SVD. Memprediksi peringkat di masa depan adalah masalah yang sama persis dengan menyimpulkan nilai yang hilang. Jika Anda punya cara bagus untuk menyimpulkan nilai yang hilang, gunakan saja untuk memprediksi peringkat di masa depan. Jika Anda tidak melakukannya, maka itu gunanya SVD.
Martin O'Leary
"Mungkin terbaik untuk memikirkan SVD sebagai metode untuk menyimpulkan nilai yang hilang". Ah, tidak, sebenarnya SVD tergantung pada pengguna untuk melakukan pra-menyimpulkan semua nilai yang hilang dengan cara lain, sebelum menjalankan SVD. SVD tidak menyalahkan sama sekali.
Geoffrey Anderson
1

Dalam praktiknya, apa yang dilakukan orang dengan nilai-nilai yang hilang dari matriks rekomendasi, yang merupakan inti dari melakukan perhitungan? Tebakan saya dari membaca posting blog Simon adalah bahwa ia HANYA menggunakan istilah yang tidak ada untuk membangun sebuah model.

Itu benar - itulah gunanya model Anda dan Anda, untuk memprediksi istilah yang hilang, bukan? Ini adalah poin penting yang banyak dilupakan. Mereka pikir mereka hanya bisa "berasumsi" untuk menetapkan sebelumnya konstanta untuk data yang hilang tanpa perhatian di dunia, dan hal-hal ajaib akan bekerja dengan cukup baik dari SVD. Sampah, sampah: Ini nyata, dan Anda sebaiknya menontonnya. Anda sebaiknya tidak memberi makan data sampah ke model jika Anda ingin sesuatu yang bermanfaat dihasilkan.

Tentunya BUKAN "terbaik untuk menyimpulkan nilai-nilai yang hilang" pada dataset mayoritas jarang dan kemudian jalankan SVD pada itu dengan beberapa harapan untuk menyalahkan nilai-nilai untuk Anda (yang Anda sudah diperhitungkan sebelum Anda menjalankan SVD, kan?). Bagaimana menurut Anda, seorang model adalah sihir? Tidak ada keajaiban atau teknologi untuk mengatasi sebagian besar data sampah. Anda tidak bisa berbohong pada model bahwa data adalah data nyata ketika itu tidak nyata sama sekali, tetapi sebenarnya hanya sampah yang Anda buat dari udara tipis.

SVD melakukan hal-hal berguna lainnya jadi saya tentu tidak mengatakan SVD tidak berguna sama sekali. Maju dan gunakan SVD hanya pada set data lengkap, mungkin Anda telah secara cerdas memperhitungkan nilai-nilai yang hilang karena sudah menggunakan model pembelajaran mesin dengan semua perhatian pada kesalahan bias dan kesalahan varians selama pengembangannya.

Pembelajaran mesin adalah caranya. Jadi, jika Anda masih ingin tahu bagaimana menyalahkan nilai menggunakan desain faktorisasi matriks, tentu ada cara yang baik untuk melakukan hal ini dengan menggunakan pembelajaran mesin, dan yang penting mereka tidak memasukkan data sampah ke model untuk mencoba belajar dari hal-hal yang sia-sia.

Model faktorisasi matriks pembelajaran mesin seperti itu disajikan dengan cukup baik oleh instruktur kursus online Penambangan Set Data Masif Stanford, dalam modul 5. Mereka menunjukkan matematika dan menjelaskan modelnya. Mereka tidak mengkodekannya untuk Anda.

Tidak apa-apa karena Anda dapat membuat kode sendiri, jika Anda memahami pembelajaran mesin dasar. Apakah Anda tahu apa fungsi kerugian dan fungsi biaya? Regularisasi? Keturunan gradien? APAKAH Anda OK dengan perkalian dan penambahan matriks? Kesalahan bias dan kesalahan varians? Jika demikian maka Anda baik. Jika tidak maka Anda harus mempertimbangkan untuk mengambil kursus pembelajaran online Andrew Ng di Coursera, yang merupakan salah satu dari banyak tempat awal yang baik. Kemudian ikuti kursus online Mining Massive Data Sets yang membahas tentang faktorisasi matriks dan pembelajaran mesin untuk membuat model yang direkomendasikan.

Cukuplah untuk mengatakan, Anda dapat benar-benar mendesain dan membuat kode model faktorisasi Anda sendiri yang menangani data yang hilang dengan sangat baik, seperti yang dilakukan Simon Funk, dan Anda dapat melakukannya dari awal tetapi tidak sulit sama sekali seperti itu kembali pada zamannya, karena sekarang Anda dapat menggunakan alat seperti TensorFlow atau Microsoft CNTK yang banyak membantu Anda. Tentukan fungsi kerugian dan fungsi biaya, pilih pengoptimal, pisahkan dataset Anda ke dalam pelatihan, dev, uji dari data yang sebenarnya tersedia (data berlabel) dan biarkan berjalan. Serius, ini berhasil. Tidak mudah men-debug TF dan kesalahan pembuatan grafiknya, tetapi pada akhirnya dapat bekerja dengan baik dan membutuhkan kurang dari satu halaman kode.

Secara khusus, salah satu cara untuk tidak memasukkan data palsu ke model pembelajaran mesin faktorisasi matriks, adalah dengan melompati elemen matriks data yang hilang dalam fungsi kerugian dan biaya Anda .

Geoffrey Anderson
sumber
1

Ada tesis yang meninjau banyak sistem rekomendasi dan membandingkannya, tetapi tidak berbicara tentang pelacakan jangka panjang dari barang-barang yang hilang, misalnya, untuk menguji prediksi. Itu bagian dari pertanyaan Anda? Menggunakan komponen waktu dengan cara itu? Di antara banyak makalah dan metode ulasan tesis adalah sistem sadar waktu / sensitif, seperti penelitian di makalah Rendle. Jika pertanyaan Anda juga tentang penanganan sparsity data, itu juga dibahas secara rinci di sepanjang tesis dan ada banyak metode. matriks jarang dan imputasi dengan nol atau faktorisasi matriks yang menambahkan matriks pengelompokan pengelompokan pengguna (pengguna yang menilai barang serupa) atau matriks pengelompokan pengelompokan item.

Judul tesis adalah "Model Peringkat Rendah untuk Sistem Rekomendasi dengan Informasi Preferensi Terbatas" oleh Evgeny Frolov https://www.skoltech.ru/app/data/uploads/2018/09/Frolov_Dissertation_Final1.pdf

nichole
sumber