Ich habe die großartigen Kommentare zum Umgang mit fehlenden Werten vor dem Anwenden von SVD gelesen, möchte aber anhand eines einfachen Beispiels wissen, wie dies funktioniert:
Movie1 Movie2 Movie3
User1 5 4
User2 2 5 5
User3 3 4
User4 1 5
User5 5 1 5
Wenn ich in der obigen Matrix die NA-Werte entferne, habe ich nur Benutzer2 und Benutzer5. Dies bedeutet, dass mein U 2 × k sein wird. Wenn ich aber die fehlenden Werte vorhersage, sollte U 5 × k sein, was ich mit singulären Werten und V multiplizieren kann .
Würde jemand von Ihnen die fehlenden Werte in der obigen Matrix ausfüllen, indem er zuerst Benutzer mit fehlenden Werten entfernt und dann SVD anwendet? Bitte erläutern Sie das angewandte Verfahren sehr einfach und machen Sie Ihre Antwort praktisch (dh die Zahl multipliziert mit einer anderen Zahl ergibt eine Antwort), anstatt zu viele mathematische Symbole zu verwenden.
Ich habe die folgenden Links gelesen:
stats.stackexchange.com/q/33142
quelle
Antworten:
SVD ist nur für vollständige Matrizen definiert. Wenn Sie sich also an eine einfache SVD halten, müssen Sie diese fehlenden Werte vorher eingeben (SVD ist per se kein Imputationsalgorithmus). Die von Ihnen eingeführten Fehler werden hoffentlich durch Ihren Matrixfaktorisierungsansatz ausgeglichen (allgemeine Annahme: Daten werden von einem niedrigrangigen Modell generiert).
Das Entfernen vollständiger Zeilen, wie Sie es möchten, ist einfach schlecht. Sogar das Setzen der fehlenden Werte auf Null wäre besser.
Es gibt viele Imputationsstrategien, aber in diesem Fall würde ich mit dem Spaltenmittelwert (oder vielleicht dem Zeilenmittelwert) rechnen. Dies ist im Grunde die Strategie, die Sie in Ihrem zweiten Link empfehlen.
wird (Spaltenmittelwert; durchschnittliche Punktzahl des Films)
Und noch eine Bemerkung: Sie sollten die Daten vorverarbeiten. Subtrahieren Sie mindestens den Mittelwert von allen Werten!
Schauen Sie sich diese Einführung an . Es misst den Imput + SVD-Ansatz und spricht auch über eine direktere Modellierung fehlender Werte. In diesem Fall werden jedoch andere Algorithmen verwendet.
quelle
Es gibt viele Möglichkeiten, fehlende Werte vorherzusagen, aber die klassische SVD gehört nicht dazu. Das Schöne ist, dass maschinelles Lernen jetzt viele Möglichkeiten bietet, von denen einige auf der Matrixfaktorisierung basieren, andere völlig anders als die Matrixfaktorisierung. Sie können ein vollständig benutzerdefiniertes Modell auswählen und erstellen. Dies geschieht derzeit häufig, da die Tools heute leistungsfähig genug sind. Die Matrixfaktorisierung ist sicherlich immer noch eine gute Möglichkeit, fehlende Werte in spärlichen Daten vorherzusagen, die SVD selbst jedoch nicht.
Die hier akzeptierte Antwort riet dem Fragesteller anscheinend, einfach einen konstanten Wert wie 0 oder 99 oder -3 oder was auch immer auszuwählen, um die fehlenden Werte im Voraus zuzuweisen und dann SVD darauf auszuführen. Dies ist eine schlechte Antwort, wenn das Ziel darin besteht, spärliche Datensätze vorherzusagen. Wenn das Ziel des OP stattdessen einfach darin besteht, SVD auszuführen, funktioniert die Vorbelegung eines konstanten Werts einwandfrei. Wählen Sie also einen beliebigen Wert aus und führen Sie SVD aus, wenn die Ergebnisse für das OP keine Rolle spielen. Ich sagte, SVD ist eine schlechte Lösung für die Vorhersage fehlender Werte, da die Annahme eines konstanten Werts an allen spärlichen Stellen dazu führen könnte, dass Sie buchstäblich mehr Rauschpunkte als bekannte gute Datenpunkte einführen.
Was bringt es, Lärm zu lernen? Und warum würden Sie überhaupt vorschlagen, dass die fehlenden Werte tatsächlich der gleiche konstante Wert sind, wenn der Zweck der Übung darin besteht, vorherzusagen, was sie sind? Sie erwarten nicht, dass die fehlenden Werte wirklich alle gleich sind, oder? Dies wird zum einen die Anzahl der Hauptkomponenten unterschätzen, die sich ergeben, wenn in Ihrem Datensatz konstante Daten so allgegenwärtig sind. Auch das ist dann ein sehr einfaches Vorhersageproblem. Sie benötigen weder einen Lernalgorithmus noch einen Faktorisierungsalgorithmus. Sie haben gerade gesagt, dass die fehlenden Werte eine bekannte Konstante sind. Keine Notwendigkeit zu unterstellen! Sie haben das bereits manuell getan, indem Sie nur die altmodische Art erraten haben.
Mit SVD können Sie sich ein Bild machen und die fehlenden Werte mithilfe einer Zufallsverteilung vorab unterstellen, die empirisch anhand des Mittelwerts und der Standardabweichung von den bekannten (nicht fehlenden) Daten abgeleitet wird. Aber dann gibt es Zufälligkeit anstelle von Mustern in den Daten, und Sie haben vermutlich eine Matrixfaktorisierung und Dimensionsreduzierung erwartet, die dieser Technik innewohnt, um die Muster zu finden, die Sie erwarten. Sie werden jedoch nicht viele Muster entdecken, die für zufälliges Rauschen von Nutzen sind. Daher ist es auch nicht hilfreich, diese Methode zu verwenden.
Das Fazit ist, dass die Ausgabe von SVD - oder eines anderen Algorithmus - größtenteils Müll ist, wenn eine überwältigende Menge von vom Ermittler bereitgestellten Junk-Daten eingespeist wird. Kein Algorithmus kann aus den meisten Junk-Daten ein gutes Modell lernen. Sag einfach nein zu diesem ganzen "Ansatz".
Es ist wahrscheinlich, dass das Ziel des OP darin besteht, ein Matrixfaktorisierungsdesign als Teil des Lernalgorithmus vorherzusagen und zu verwenden. In diesem Fall ist das Schöne , dass Sie Ihre eigene Kostenfunktion schreiben können, bei der alle Vorhersagen, die gegen die fehlenden Werte getroffen wurden, entscheidend aus den Kosten ausgelassen werden. Auf diese Weise werden dem Lernalgorithmus keinerlei Junk-Daten zugeführt.Verwenden Sie einen guten Optimierer auf der Basis von Gradientenabstieg, z. B. Adam (es gibt andere). Sie können eine Lösung erhalten, die in Bezug auf Training, Entwicklung und Testdatensatz messbar genau ist, vorausgesetzt, Sie folgen einer guten Methodik für maschinelles Lernen. Sie können Ihrem Modell Begriffe und Komplexität hinzufügen, z. B. Benutzer-Bias, Item-Bias, globale Bias, Regularisierung oder was auch immer Sie sonst noch benötigen, um Bias-Fehler und Varianz-Fehler an die Anforderungen Ihres Projekts und die verfügbaren Datensätze anzupassen.
Ein modernes Entwicklungspaket für maschinelles Lernen macht dies jetzt zu einem praktischen Ansatz. Mit TensorFlow (oder Microsoft CNTK et al.) Können Sie beispielsweise genau das tun, was ich in einem spärlichen Datensatz mithilfe eines Matrixfaktorisierungsmodells beschrieben habe.
quelle
Dieses Dokument behandelt das, wonach Sie suchen, sehr elegant (unter Verwendung der SVD mit weicher Schwelle). Wie Geoffrey betonte, schreiben sie dazu ihre eigene Kostenfunktion, die alle Vorhersagen gegen die fehlenden Werte von den Kosten ausschließt.
Zusammenfassung: Mazumdar et al. Verwenden konvexe Relaxationstechniken, um eine Folge von regulierten Lösungen mit niedrigem Rang für Probleme bei der Vervollständigung der Matrix im großen Maßstab bereitzustellen. Der Algorithmus SOFT-IMPUTE ersetzt iterativ die fehlenden Elemente durch diejenigen, die von einer SVD mit weichem Schwellenwert erhalten wurden. Unter Ausnutzung der Problemstruktur zeigen sie, dass die Aufgabe mit einer Komplexität der Ordnung linear in den Matrixdimensionen ausgeführt werden kann. Der Algorithmus ist leicht auf große Matrizen skalierbar; Zum Beispiel entspricht es einer Annäherung von Rang 95 an das vollständige Netflix-Training in 3,3 Stunden. Die Methoden erzielen gute Trainings- und Testfehler und weisen im Vergleich zu anderen wettbewerbsfähigen Techniken nach dem Stand der Technik überlegene Timings auf.
@article {mazumder2010spectral, title = {Spektrale Regularisierungsalgorithmen zum Lernen großer unvollständiger Matrizen}, author = {Mazumder, Rahul und Hastie, Trevor und Tibshirani, Robert}, journal = {Journal of Machine Learning Research}, Band = {11}, number = {Aug}, pages = {2287--2322}, year = {2010}}
quelle