5

ich die Collaborative Filtering-Algorithmus in Funken implementiert Ausprobieren und leite in das folgende Problem:Funken MLLib Collaborative Filtering mit neuen Benutzer

Angenommen, ich trainiere ein Modell mit den folgenden Daten:

u1|p1|3 
u1|p2|3 
u2|p1|2 
u2|p2|3 

Nun, wenn ich testen sie es mit den folgenden Daten:

u1|p1|1 
u3|p1|2 
u3|p2|3 

ich nie Bewertungen für den Benutzer ‚u3‘ sehen, vermutlich weil die Nutzer nicht in den Trainingsdaten angezeigt wird. Liegt das an dem Kaltstartproblem? Ich hatte den Eindruck, dass dieses Problem nur für ein neues Produkt gelten würde. In diesem Fall hätte ich eine Vorhersage für 'u3' erwartet, da 'u1' und 'u2' in den Trainingsdaten ähnliche Bewertungsinformationen wie 'u3' haben. Ist dies der Unterschied zwischen modellbasierter und speicherbasierter kollaborativer Filterung?

+0

konnten Sie mit Benutzer und Produkt als Nicht-Ganzzahlen trainieren? Wenn ich versuche, in diesem Format zu trainieren, erhalte ich den Fehler: Rating, (int (self.user), int (self.product), float (self.rating)) – jKraut

+0

Sieht aus, als ob wir ähnliche Probleme haben neue Benutzer, ohne das ganze Modell umschulen zu müssen? –

Antwort

1

Ich nehme an, Sie sprechen über den ALS-Algorithmus?

'u3' ist kein Paar Ihres Trainingssatzes und Ihr Modell weiß daher nichts über diesen Benutzer. Alles, was man tun könnte, ist vielleicht die Durchschnittsbewertung über alle Benutzer.

Blick in den Spark 1.3.0 Scala-Code: MatrixFactorizationModel zurückgegeben von ALS.train() versucht, Benutzer und Produkt in den Feature-Vektoren zu suchen, wenn Sie predict() aufrufen. Ich bekomme eine NoSuchElementException, wenn ich versuche, eine Bewertung eines unbekannten Benutzers vorherzusagen. Es ist nur so implementiert.

+0

Danke. Das ist was ich dachte. Gibt es andere kollaborative Filteralgorithmen, die MLLib neben ALS unterstützt? –

+0

ALS scheint der einzige Algorithmus wie Spark 1.3.0 zu sein: https://spark.apache.org/docs/latest/mllib-guide.html – stholzm