Verwenden Sie die Kreuzvalidierung, um eine optimale Anzahl latenter Faktoren bei der nicht-negativen Matrixfaktorisierung zu wählen.
Wie Sie geschrieben haben, besteht das Ziel von NMF darin, niedrigdimensionale und mit allen nicht negativen Elementen zu finden, um den Rekonstruktionsfehler minimieren . Stellen Sie sich vor, wir lassen ein Element von weg , z. B. , und führen NMF der resultierenden Matrix mit einer fehlenden Zelle durch. Dies bedeutet, und Rekonstruktionsfehler über alle nicht fehlenden Zellen zu minimieren:WH∥V−WH∥2VVabWH∑ij≠ab(Vij−[WH]ij)2.
Sobald dies erledigt ist, können wir das ausgelassene Element vorhersagen, indem wir berechnen und den VorhersagefehlerMan kann diesen Vorgang wiederholen, indem man alle Elemente und die Vorhersagefehler über alle und . Dies führt zu einem PRESS-Gesamtwert (vorhergesagte Restquadratsumme) , der von abhängt . Hoffentlich hat die Funktion ein Minimum, das als 'optimales' .Vab[WH]abeab=(Vab−[WH]ab)2.
VababE(k)=∑abeabkE(k)k
Beachten Sie, dass dies rechenintensiv sein kann, da die NMF für jeden ausgelassenen Wert wiederholt werden muss und möglicherweise auch schwierig zu programmieren ist (je nachdem, wie einfach es ist, eine NMF mit fehlenden Werten durchzuführen). In PCA kann dies umgangen werden, indem vollständige Zeilen von ausgelassen werden (was die Berechnungen beschleunigt). Weitere Informationen finden Sie in der Antwort unter So führen Sie eine Kreuzvalidierung für PCA durch, um die Anzahl der Hauptkomponenten zu bestimmen. , aber das ist hier nicht möglich.V
Natürlich gelten hier alle üblichen Prinzipien der Kreuzvalidierung, so dass man viele Zellen gleichzeitig weglassen kann (anstatt nur einer) und / oder den Vorgang nur für einige zufällige Zellen wiederholen kann, anstatt alle Zellen in einer Schleife zu durchlaufen. Beide Ansätze können zur Beschleunigung des Prozesses beitragen.
Bearbeiten (März 2019): Sehen Sie sich diese sehr schöne, illustrierte Beschreibung von @AlexWilliams an : http://alexhwilliams.info/itsneuronalblog/2018/02/26/crossval . Alex verwendet https://github.com/kimjingu/nonnegfac-python für NMF mit fehlenden Werten.