1

Je suis de déconner avec les moteurs de recommandation pour les derniers jours et suis tombé sur ce tutoriel très agréable qui illustre l'utilisation de Alternant moindres carrés dans les filtres collaboratifs: http://bugra.github.io/work/notes/2014-04-19/alternating-least-squares-method-for-collaborative-filtering/Comprendre Alternant des moindres carrés pour le filtrage collaboratif

J'ai réussi à suivez les instructions jusqu'à la toute dernière étape. C'est la partie où l'auteur écrit le code pour imprimer des recommandations. L'extrait de code est le suivant: -

def print_recommendations(W=W, Q=Q, Q_hat=Q_hat, movie_titles=movie_titles): 
    Q_hat -= np.min(Q_hat) 
    Q_hat *= float(5)/np.max(Q_hat) 
    movie_ids = np.argmax(Q_hat - 5 * W, axis=1) 
    for jj, movie_id in zip(range(m), movie_ids): 

    print('User {} liked {}\n'.format(jj + 1, ', '.join([movie_titles[ii] for ii, qq in enumerate(Q[jj]) if qq > 3]))) 

    print('\n User {} recommended movie is {} - with predicted rating: {}'.format(jj + 1, movie_titles[movie_id], Q_hat[jj, movie_id])) 

    print('\n' + 100 * '-' + '\n') 

Dans cet extrait, W est la matrice de poids. La matrice Q est utilisée pour formaliser la notion de confiance que mesurent les notations. Par conséquent:

Q = 1 if user u rated item i 

Q= 0 if user u did not rate item i 

Q_qu'est la nouvelle matrice obtenue après implémentation de l'algorithme ALS, après un nombre spécifié d'itérations.

Je ne peux pas comprendre pourquoi l'auteur met en œuvre ces deux étapes, en particulier:

Q_hat -= np.min(Q_hat) 
Q_hat *= float(5)/np.max(Q_hat) 

Quelqu'un pourrait-il me guider et me aider à comprendre cela? J'apprécierai vraiment cela.

Merci

Edit: Voici un lien essentiel à la fonction originale: https://gist.github.com/arjun180/71124392b0b70f7b96a8826b59400b99

Répondre

1

Ceci est une normalisation des évaluations prévues.

Q_hat -= np.min(Q_hat) 

Ici l'auteur soustrait le plus petit dans la matrice d'évaluations prédites à toutes les valeurs prédites.

Cela garantit que toutes les évaluations prévues commencent à 0.

Q_hat *= float(5)/np.max(Q_hat) 

Ici, l'auteur normalise les évaluations prévues pour aller de 0 à 5.

+0

Merci beaucoup! Appréciez-le. –