2016-04-06 8 views
1

Ich habe daran gearbeitet, ein Empfehlungssystem durch Empfehlungen zu implementieren, die auf implizitem Feedback basieren. Daher verwende ich das Tupel (Benutzer, Element, Anzahl), um meine Benutzerelementmatrix zu erstellen.Empfehlungs-Engine-Metriken

Ich habe meine Empfehlung System mit diesem wirklich schönen Beispiel auf der Datum Wissenschaft Blog Insight implementieren: http://insightdatascience.com/blog/explicit_matrix_factorization.html

jedoch im Vergleich zu dem Film Objektiv-Datensatz, mein Dataset unglaublich spärlich ist. Im Beispiel sind 6,3% des Datensatzes gefüllt, während diese Zahl für mich 0,30% beträgt. Daher gibt es viele unbekannte Werte in meinem Datensatz. Ich habe ungefähr 2900 Benutzer und 5000 Artikel.

Ich habe mein Modell trainiert, und das Training MSE weigert sich zu kommen. Ich habe versucht, die Parameter zu optimieren, aber ohne Erfolg. Ich hatte folgende Fragen:

(1) Ist MSE keine zuverlässige Metrik? Ich war durch diese Diskussion gegangen: https://www.quora.com/How-do-you-measure-and-evaluate-the-quality-of-recommendation-engines

A/B-Test ist jedoch keine Option für mich. Meine Erfahrung mit maschinellen Lernmodellen hat mir immer gelehrt, dass, wenn das Training MSE an einem Punkt stecken bleibt, es eine ziemlich schlechte Sache ist (aus einer ganzen Reihe von Gründen)

Also, bewerte ich Dinge nicht richtig?

(2) Das Kaltstartproblem? Ich initialisiere meine Benutzervektoren und Artikelvektoren wie folgt:

self.user_vectors = np.random.normal(size=(self.num_users,self.num_factors)) 

self.item_vectors = np.random.normal(size=(self.num_items,self.num_factors)) 

Gibt es etwas, das ich hier ändern kann?

Ich bin verwirrt, was als nächstes zu tun ist. Die Seltenheit der Matrix ist sehr hoch und ich weiß, dass mein Algorithmus Werte für eine große Anzahl von Nullen vorhersagt. Ich fühle intuitiv, dass das meine MSE konstant hält.

Alle Gedanken oder Richtung würde wirklich geschätzt werden!

Dank

+0

Wofür steht ** count ** in Ihrem Datensatz? Wie oft hat ein Nutzer einen Film angesehen? –

+0

Ja. Anzahl bezieht sich auf die Häufigkeit, mit der der Benutzer einen Film angesehen hat. –

Antwort

1

(1) Der Datensatz Movielens ist ein wissenschaftlichen Daten-Set und es gibt eine klare Wahl, wie sie erzeugen, um die Datenmenge, die sie sehr verschieden von einer realen Empfehlungssystem Dataset macht. Auf der Datenmenge README geben die Autoren:

Each user has rated at least 20 movies. 

So ihres niedrigen RMSE ist nur für Benutzer mit dieser Eigenschaft.

würde ich zwei Metriken vorschlagen:

  1. Teilen Sie Ihre Daten in Zug und Test-Set und Ihre Vorhersagen mit dem Testset vergleichen, finden Sie, wenn Sie eine der (Benutzer, Film) Paare vorhersagen, die in Ihrem Test sind einstellen;
  2. Vergleichen Sie mit einer Grundlinie wie ein Durchschnitt des Benutzers und der Film Mittelwert.

(2) Ich glaube, Sie ein wenig verwirrt über das Kaltstartproblem sind: Es ist ein Problem, das Empfehlungssystem (RS) beeinflusst, das oder einen Film keine Daten über einen Benutzer hat. Wenn zum Beispiel niemand einen Film gesehen hat, kann man keine zuverlässigen Vorhersagen darüber treffen, wer ihn genießen wird.Der gleiche Weg für Benutzer, für jemanden, der keinen Film gesehen hat, können Sie nicht vorhersagen, welche Filme sie mögen werden.

Eine Möglichkeit, das Problem zu lösen, besteht darin, ein Ähnlichkeitsmaß zwischen Filmen und zwischen Benutzern basierend auf ihren Merkmalen (Geschlecht, Alter, Land für Benutzer und Genre, Datum und Sprache für Filme) zu erstellen. Damit können Sie Empfehlungen basierend auf den ähnlichsten Benutzern und Filmen abgeben. Diese Arten von RS werden als hybrid bezeichnet.

Empfohlene Papiere:

+0

Danke für die Hilfe! Ich habe mich gefragt, wie ich das Training und die Testspaltung machen sollte. Im Allgemeinen gehe ich auf eine 80/20-Teilung und mein Modell (Zufallswälder, logistische Regression usw.) lernt die Merkmale auf dem Trainingssatz und sagt über das Testset voraus. –

+0

Aber es ist ein bisschen anders hier, weil mein Algorithmus den Benutzer und den Gegenstandsvektor optimiert. Diese können nur auf einer Matrix der gleichen Größe verwendet werden. –

+0

Sollte ich etwas tun, wie "x" Anzahl der Zählungen ungleich Null herauspicken und ein Test-Set der gleichen Größe erstellen. Etwas ähnliches wie hier: https://gist.github.com/EthanRosenthal/68362b45ad6ca586199d –