Ich habe einen Datensatz mit 34 Eingabespalten und 8 Ausgabespalten.
Eine Möglichkeit zur Lösung des Problems besteht darin, die 34 Eingaben zu verwenden und für jede Ausgabespalte ein individuelles Regressionsmodell zu erstellen.
Ich frage mich, ob dieses Problem mit nur einem Modell, insbesondere mit Neural Network, gelöst werden kann.
Ich habe Multilayer-Perceptron verwendet, aber das erfordert mehrere Modelle, genau wie die lineare Regression. Kann Sequenz zu Sequenz eine praktikable Option sein?
Ich benutze TensorFlow. Ich habe Code, aber ich denke, es ist wichtiger zu verstehen, was ich in Bezug auf die Multilayer-Perzeptrontheorie verpasse.
Ich verstehe, dass in MLP, wenn Sie einen Ausgangsknoten haben, es einen Ausgang liefern wird. Wenn Sie 10 Ausgabeknoten haben, handelt es sich um ein Problem mit mehreren Klassen. Sie wählen aus den 10 Ausgaben die Klasse mit der höchsten Wahrscheinlichkeit aus. Aber in meinem Fall wird es mit Sicherheit 8 Ausgänge für denselben Eingang geben.
Nehmen wir an, Sie erhalten für eine Reihe von Eingaben die 3D-Koordinate von etwas (X, Y, Z). Wie, Inputs = {1,10,5,7} Output = {1,2,1}. Für die gleiche Eingabe {1,10,5,7} muss ich Modelle für den X-Wert, den Y-Wert und den Z-Wert erstellen. Eine Lösung besteht darin, 3 verschiedene Modelle mit MLP zu erstellen. Aber ich würde gerne sehen, ob ich ein Modell haben kann. Also dachte ich über seq2seq nach. Da der Encoder eine Reihe von Eingaben und der Decoder eine Reihe von Ausgaben bereitstellt. Es scheint jedoch, dass seq2seq in tensorflow keine float-Werte verarbeiten kann. Ich kann mich jedoch irren.
quelle
Antworten:
Was Sie beschreiben, ist eine normale multidimensionale lineare Regression. Diese Art von Problem wird normalerweise mit einem Feedforward-Netzwerk, entweder MLP oder einer anderen Architektur, die der Art des Problems entspricht, gelöst.
Jedes neuronale Netzwerk-Framework kann so etwas tun.
Der Schlüssel dazu ist, sich daran zu erinnern, dass die letzte Ebene lineare Aktivierungen haben sollte (dh überhaupt keine Aktivierung).
Entsprechend Ihren Anforderungen ist die Form der Eingabeebene ein Vektor (34,) und die Ausgabe (8,).
Update: Die bei Regressionsproblemen übliche Verlustfunktion ist der mittlere quadratische Fehler (MSE). Hier ist ein Beispiel für eine mehrdimensionale Regression mit Keras . Das Netzwerk ist kein MLP, aber es sollte in Ordnung sein, um die Idee zu veranschaulichen.
quelle
Sie können dies sehr einfach in Python implementieren.
Ihr X ist die Sammlung von x-, y- und z-Koordinaten für das Training.
Ihr Y ist die Sammlung der Testkoordinaten x, y, z.
quelle
Dies ist viel einfacher als Sie denken - Sie können einfach festlegen, dass Ihre Ausgabeebene ein Vektor anstelle eines einzelnen Skalars ist. Natürlich gibt es hier keine Magie und ich rate Ihnen, Ihre Daten vorzubereiten (führen Sie eine Batch-Normalisierung durch, damit alle Ausgaben Werte zwischen 0 und 1 annehmen).
Wenn Sie Keras verwenden, können Sie dazu eine dichte Ebene als endgültige Ausgabeebene hinzufügen:
model.add(Dense(8, activation='linear'))
quelle