Was passiert, wenn Sie SVD auf ein Problem mit der kollaborativen Filterung anwenden? Was ist der Unterschied zwischen den beiden?

21

Bei der kollaborativen Filterung gibt es Werte, die nicht ausgefüllt sind. Angenommen, ein Benutzer hat keinen Film angesehen, und wir müssen dort ein 'na' einfügen.

Wenn ich eine SVD dieser Matrix erstellen möchte, muss ich eine Zahl eingeben, z. B. 0. Wenn ich die Matrix faktorisiere, kann ich ähnliche Benutzer finden (indem ich herausfinde, welche Benutzer näher beieinander liegen) der reduzierte Dimensionsraum). Aber die vorhergesagte Präferenz selbst - für einen Benutzer zu einem Artikel wird Null sein. (weil wir das in die unbekannten Spalten eingegeben haben).

Ich stehe also vor dem Problem der kollaborativen Filterung im Vergleich zu SVD. Sie scheinen fast gleich zu sein, aber nicht ganz.

Was ist der Unterschied zwischen ihnen und was passiert, wenn ich eine SVD auf ein Problem der kollaborativen Filterung anwende? Ich habe es getan, und die Ergebnisse scheinen akzeptabel zu sein, wenn es darum geht, Benutzer in der Nähe zu finden. Das ist großartig, aber wie?

Jason
quelle

Antworten:

25

Wenn Sie SVD sagen, sprechen Sie vermutlich von abgeschnittener SVD (wobei Sie nur die größten Singularwerte beibehalten). Es gibt zwei verschiedene Möglichkeiten, die abgeschnittene SVD einer Matrix zu betrachten. Eines ist die Standarddefinition:k

Zuerst machen Sie die SVD: , wobei und Rotationsmatrizen sind und die singulären Werte entlang der Diagonale hat. Dann wählen Sie die Top singulären Werte, Null aus dem Rest, und abhacken irrelevante Zeilen und Spalten ein , um -rank Annäherung an das Original: UVΣXn×m=Un×nΣn×mVTm×mUVΣk X ~ X = ~ U n × k k × k ~ Σ ~ V T k × mkkXX~=U~n×kΣ~k×kV~Tk×m

Dies ist alles in Ordnung und problemlos (und einfach in R oder Matlab zu implementieren), aber es macht keinen Sinn, wenn es um Matrizen mit fehlenden Werten geht. Es gibt jedoch eine interessante Eigenschaft der verkürzten SVD - es ist die beste Annäherung an den Rang des Originals! Das ist:kkk

X~=argminB:rank(B)=ki,j(XijBij)2

Diese Eigenschaft lässt sich leicht auf den Fall fehlender Werte verallgemeinern. Grundsätzlich suchen Sie nach einer Rang-Matrix, die den elementweisen mittleren quadratischen Fehler über die bekannten Einträge der ursprünglichen Matrix minimiert . Das heißt, wenn Sie das System trainieren, ignorieren Sie alle fehlenden Werte. (Für Tipps, wie Sie könnte tatsächlich gehen über die Suche nach einer -rank Annäherung, hier sind einige Orte zu sehen).kk

Sobald Sie eine geeignete Annäherung des Rangs an das Original gefunden haben, füllen Sie die fehlenden Werte damit aus. Wenn also fehlt, geben Sie . Tada! Sie sind jetzt fertig.X i j ˜ X i jkXijX~ij

Stumpy Joe Pete
quelle
3

Es scheint viele Ansätze zu geben, wie mit fehlenden Werten umgegangen werden kann. Das folgende Papier mit einer Übersicht in Abschnitt 1.3 kann ein guter Ausgangspunkt sein.

d_ijk_stra
quelle
0

Ich brauche mehr Ansehen, um die Antwort von Stumpy Joe Pete zu kommentieren, daher poste ich dies als Antwort.

Stumpy danke für die Antwort, obwohl ich denke, dass es ein bisschen Klarheit braucht. Insbesondere meine ich diesen Satz:

Grundsätzlich suchen Sie nach einer k-Rang-Matrix, die den elementweisen mittleren quadratischen Fehler über die bekannten Einträge der ursprünglichen Matrix minimiert.

Erstens: Würde der höchste Rang dies nicht immer minimieren oder die ursprüngliche X-Matrix tatsächlich rekonstruieren? Zweitens: Warum sollten Sie nur die bekannten Einträge übernehmen ? Intuitiv macht es Sinn, aber die Prozedur passt tatsächlich auch die leeren Stellen an, die durch einige vernünftige Nummern ersetzt wurden.

Mein Ansatz wäre es, so etwas wie eine Kreuzvalidierung durchzuführen:

  1. Füllen Sie die leeren Stellen mit 0 oder einem Mittelwert oder einer anderen angemessenen Zahl aus.
  2. Ersetzen Sie eines der n bekannten Elemente durch 0 oder eine sinnvolle Zahl
  3. SVD-Rekonstruktion von Rang k durchführen
  4. Überprüfen Sie den Wert des bekannten rekonstruierten Elements.
  5. Wiederholen Sie dies für alle möglichen bekannten Elemente und berechnen Sie den MSE
  6. Wiederholen Sie dies für alle möglichen k und wählen Sie die mit der niedrigsten MSE.
Karol Przybylak
quelle
1. Sie möchten ein niedriges k wählen, um eine Überanpassung zu vermeiden (viel niedriger als die Abmessungen von X). Dies ist im Grunde genommen der gleiche Grund, weshalb die lineare Regression für die Anpassung eines Datensatzes mit 6 Punkten die bessere Wahl ist als ein Quintic. 2. Sie wissen nicht , wie die unbekannten Einträge lauten sollen, und können daher die "elementweise MSE" nicht über sie hinweg messen. Meine Prozedur füllt die fehlenden Werte mit Zahlen, die durch Minimieren des Fehlers gegenüber den bekannten Werten (und Einschränken, dass die Matrix einen niedrigen Rang haben muss) abgeleitet wurden.
Stumpy Joe Pete