1

ich seit den letzten Tagen um mit Recommendation Engines durcheinander und kam in diesem sehr schönen Tutorial, das die Verwendung von Wechsel Least Squares in Collaborative Filter zeigt: http://bugra.github.io/work/notes/2014-04-19/alternating-least-squares-method-for-collaborative-filtering/Verständnis Abwechselnd Least Squares für Collaborative Filtering

ich geschaffen Folgen Sie den Anweisungen bis zum allerletzten Schritt. Dies ist der Teil, in dem der Autor den Code zum Drucken von Empfehlungen schreibt. Das Code-Snippet lautet wie folgt:

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') 

In diesem Codeausschnitt ist W die Gewichtungsmatrix. Die Q-Matrix wird verwendet, um den Vertrauensbegriff, den die Bewertungen messen, zu formalisieren. Deshalb:

Q = 1 if user u rated item i 

Q= 0 if user u did not rate item i 

Q_hat die neue Matrix nach der Umsetzung des ALS-Algorithmus erhalten wird, nach Anzahl der Iterationen angegeben.

Ich kann nicht verstehen, warum der Autor diese beiden Schritte insbesondere implementiert:

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

jemand mich leiten kann und mir helfen, dies zu verstehen? Ich würde das wirklich zu schätzen wissen.

Dank

Edit: Hier ist ein Kern Link zur ursprünglichen Funktion: https://gist.github.com/arjun180/71124392b0b70f7b96a8826b59400b99

Antwort

1

Dies ist eine Normalisierung der vorhergesagten Bewertungen.

Q_hat -= np.min(Q_hat) 

Hier subtrahiert der Autor den kleinsten Wert in der vorhergesagten Bewertungsmatrix von allen vorhergesagten Werten.

Dies garantiert, dass alle vorhergesagten Bewertungen bei 0.

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

Hier ist der Autor beginnen wird, um die vorhergesagten Bewertungen Normalisierung von 0 bis 5.

+0

Vielen Dank an reichen! Bin dankbar. –