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.