Pertanyaan
Bagaimana cara memprediksi peringkat untuk pengguna baru dalam model ALS yang dilatih di Spark? (Baru = tidak terlihat selama waktu pelatihan)
Masalah
Saya mengikuti tutorial resmi Spark ALS di sini:
http://ampcamp.berkeley.edu/big-data-mini-course/movie-recommendation-with-mllib.html
Saya dapat membangun pemberi rekomendasi yang baik dengan MSE yang layak tetapi saya berjuang dengan cara memasukkan data baru ke model. Tutorial mengubah peringkat pengguna pertama sebelum pelatihan, tetapi ini benar-benar hack. Mereka memberikan petunjuk berikut:
9.2. Faktor matriks augmentasi:
Dalam tutorial ini, kami menambahkan peringkat Anda ke set pelatihan. Cara yang lebih baik untuk mendapatkan rekomendasi untuk Anda adalah melatih model faktorisasi matriks terlebih dahulu dan kemudian menambah model menggunakan peringkat Anda. Jika ini terdengar menarik bagi Anda, Anda dapat melihat implementasi MatrixFactorizationModel dan melihat cara memperbarui model untuk pengguna baru dan film baru.
Implementasinya tidak membantu saya sama sekali. Idealnya, saya mencari sesuatu seperti:
predictions = model.predictAllNew(newinput)
Tetapi tidak ada metode seperti itu. Saya bisa pergi dan memodifikasi RDD yang asli, tetapi saya pikir itu akan mengharuskan saya untuk melatih ulang model, sehingga tidak akan menjadi solusi yang ideal juga. Tentunya harus ada cara yang lebih elegan?
Di mana saya sekarang:
Saya pikir saya perlu menemukan representasi laten dari vektor baru. Menurut kertas asli kita dapat menghitung seperti ini:
Upaya saya saat ini:
V = model.productFeatures().map(lambda x: (x[1])).collect() #product latent matrix Y
Cui = alpha * np.abs(newinput)
Cui = (1. + Cui) / (Cui)
Cui[np.where(newinput == 0)] = 0
Cui = np.diag(Cui)
lambdaI = len(np.where(newinput!=0)) * regularization_parameter * np.eye(np.shape(V)[1]) #
term = np.dot(np.dot(Vt,Cui),V)+lambdaI
term = np.dot(np.linalg.inv(term),Vt)
term = np.dot(term,Cui)
term = np.dot(term,newinput)
latentinput = term
Tapi ini tidak cocok.