Beziehung zwischen Werten ermitteln - neuronales Netzwerk?



  • Hi,

    ich habe hier ein Problem, bei dem ich eine Sammlung Daten und daraus resultierende Ergebnisdaten habe. Von diesen weiß ich, dass sie in einer logischen und/oder mathematischen Beziehung zueinander stehen. Diese Beziehung würde ich gerne ermitteln um daraus Regeln für zukünftige Daten zu erstellen und um deren Ergebnisdaten vorherzusagen.

    Vielleicht ein Beispiel. Folgende Eingangsdaten sind bekannt:

    1, 4, 7
    9, 3, 2
    6, 6, 5

    Folgende Ausgangsdaten sind bekannt:

    -2
    10
    7

    Hier ist die Regel einfach, sie lautet Ausgang=Wert1 + Wert2 - Wert3. Mit dieser Regel könnte ich jetzt beliebige Kombinationen von Eingangsdaten verarbeiten um auf die Ausgangswerte zu kommen.

    In der Realität sieht es jetzt leider ein wenig komplizierter aus, ich habe minimum 10 Eingangswerte welche sich irgend wie auf 5 Ausganswerte ummappen lassen. Hier ist es schlicht unmöglich, mal eben per nachdenken auf die logische/mathematische Abhängigkeit zwischen diesen zu schließen (zumal es auch noch unterschiedliche Datenquellen gibt, welche jeweils andere Abhängigkeiten besitzen).

    Jetzt stellt sich mir die Frage, wie man dieses Problem lösen kann und aus den bekannten Ein- und Ausgangsdaten ein Muster generieren, das sich auch auf andere/neue Daten anwenden lässt.

    Spontan kamen mir da neuronale Netze in den Sinn. Allerdings bin ich 1. bei dem Thema völlig blank und 2. glaube ich mich zu erinnern, dass man bei neuronalen Netzen nie wirklich steuern kann, was die lernen (d.h. im schlimmsten Fall erkennen die irgend welche anderen, völlig falschen Abhängigkeiten zwischen den Daten).

    Wie kann man sowas also lösen?

    Hansy



  • Neuronale Netze sind eine Möglichkeit dafür. Feed-Forward mit 2 Hidden-Layern (Multi-Layer-Perzeptron) und dann entsprechend trainieren. Wichtig ist, dass du einigermaßen viele EIngabemuster hast, damit man das Netz trainieren kann. Nimm auch nicht alle Eingabedaten, sondern teile das ganze in eine Test und eine Lernstichprobe auf (so wie mans halt immer macht).

    Dann trainierst du das Netz und schaust, ob es das hinbekommt. Wie du schon richtig sagtest, kann man nicht sagen, was das Netz nun lernt. Du bekommst keinen (einfachen) math. Zusammenhang zwischen Eingang und Ausgang. Du musst dich dann auf das Netz verlassen, dass es richtig rechnet, wenn es die Tests gut besteht.

    Wenn du schon in etwa eine Ahnung hast, wie die Zusammenhänge aussehen, könntest du eine Regression versuchen. Hilfreich dafür ist auch erstmal eine Hauptkomponentenanalyse über die Daten laufen zu lassen, um zu sehen, welche Eingänge großen Einfluss auf welchen Ausgang haben.



  • Erzähl mal mehr von der Quelle der Daten. Eventuell ist ein neuronales Netz Overkill und es geht schon viel einfacher. In Deinem Beispiel verwendest Du eine linare Beziehung. Das läuft dann auf ein ganz normales Least-Squares-Problem hinaus, welches man effizient über Normalgleichungen oder eine QR-Zerlegung lösen kann. Affinlineare Beziehungen kannst Du auf lineare reduzieren, indem Du den Quelldaten eine Dimension hinzufügst, welche konstant 1 bleibt bei allen Elementen.

    Ein neuronales Netz ist dann interessant, wenn Du weißt, dass eine affinlineare Beziehung zwischen Eingabe und Ausgabe nicht ausreicht. Die mathematische Abbildung, die man über ein Feedforward-Netz erreichen kann ist im allgemeinen nicht-linear wegen den nicht-linearen Aktivierungsfunktionen. Das Problem ist nur, ein solches Netz "zu trainieren" -- anders gesagt: gute Gewichte zu finden. Das kostet in der Regel viel Zeit.



  • OK, die Eigenschaften der Daten lassen sich noch ein wenig näher beschreiben.

    So ist der Wertebereich sowohl der Eingangs- als auch der Ausgansdaten auf 1..100 begrenzt (Ganzzahlen, keine Floats). Es kann (muss aber nicht) jeder Eingangswert in jeden Ausganswert einfließen, das mit unterschiedlich starken Gewichtungen (welche leider ebenfalls nicht feststehen). Das Ergebnis darf auch gerne ein wenig abweichen, d.h. wenn der Algoritmus mir z.B. 68.9875 ausspuckt und das richtige Ergebnis wäre 69 dann ist das absalut in Ordnung.

    Die Daten selber entstammen einem technischen Prozess (mehr kann ich dazu leider nicht verraten).

    Wenn es denn auf ein neuronales Netz hinausläuft: welche existierenden Lösungen wären denn empfehlenswert? Was ich mir momentan ergoogelt habe will immer gleich Muster erkennen oder ähnliches, mit ein paar simplent Zahlen gibt sich keines der Netze zufrieden.



  • Du hast noch nix ueber die Zusammenhaenge in den Daten beschrieben: gibts wirklich nur (affin)lineare Abhaengigkeiten? Sind die Daten verrauscht ( = haben irgend einen Fehler) oder gibts genau eine richtige Abbildungsfunktion, die du eigentlich rauskriegen willst? Wie wichtig ists, dass du eine explizite Darstellung der Abbildungsfunktion kriegst?

    Du kannsts generell mit Regressionsrechnung versuchen, ist einfacher als ein Neuronales Netz, und vor allen Dingen bekommst du dann auch eine genaue & explizite Darstellung (eine Formel) fuer die Zusammenhaenge. Ein NN wird dir das nicht liefern.

    Ein Evolutionaerer Algorithmus waer ebenfalls denkbar, wenn du eine explizite Darstellung benoetigst (besonders wenn du eh kein Rauschen in den Daten hast).

    Hansy schrieb:

    Wenn es denn auf ein neuronales Netz hinausläuft: welche existierenden Lösungen wären denn empfehlenswert? Was ich mir momentan ergoogelt habe will immer gleich Muster erkennen oder ähnliches, mit ein paar simplent Zahlen gibt sich keines der Netze zufrieden.

    Ein einfaches (nicht-rekursives) Netzwerk mit 1 oder 2 Hidden Layers. Was meinst du mit "mit ein paar simplen Zahlen gibt sichs nicht zufrieden?". Genau das macht ein NN: du steckst deine Zahlen rein, und das NN spuckt dir aus, welche Zahlen es denkt, dass deiner Output-Funktion entsprechen (ohne dass es dir jemals verraet, wie genau denn die Funktion aussieht).



  • > gibts wirklich nur (affin)lineare Abhaengigkeiten?

    So weit ich das sehe: ja.

    > Sind die Daten verrauscht ( = haben irgend einen Fehler) oder gibts genau eine
    > richtige Abbildungsfunktion, die du eigentlich rauskriegen willst?

    Es gibt kein Rauschen/keine Fehler, das wurde bei einer Vorbehandlung der Daten bereits beseitigt (deswegen ja auch der recht kleine Wertebereich von 100 Ganzzahlen).

    > Wie wichtig ists, dass du eine explizite Darstellung der Abbildungsfunktion kriegst?

    Die Darstellung ist komplett unwichtig, letztenendes interessiert nur das Berechnungsergebnis, nicht aber der Weg dahin.

    Hansy schrieb:

    Wenn es denn auf ein neuronales Netz hinausläuft: welche existierenden Lösungen wären denn empfehlenswert? Was ich mir momentan ergoogelt habe will immer gleich Muster erkennen oder ähnliches, mit ein paar simplent Zahlen gibt sich keines der Netze zufrieden.

    > Ein einfaches (nicht-rekursives) Netzwerk mit 1 oder 2 Hidden Layers. Was meinst du mit
    > "mit ein paar simplen Zahlen gibt sichs nicht zufrieden?"

    Das bezog sich auf die NN-Bibliotheken und -programme, die ich mir bisher schon mal angesehen habe, alle wollten mit komplexeren Daten gefüttert werden, als ich sie habe (was sie intern damit machen, ist natprlich wieder was anderes). Ich will halt nur das Rad nicht noch mal komplett neu erfinden.



  • Hansy schrieb:

    > gibts wirklich nur (affin)lineare Abhaengigkeiten?

    So weit ich das sehe: ja.

    Dann nimm eine multilineare Regression. Damit bekommst du für den Fall wohl die besten Ergebnisse. Kann jedes Statistikprogramm.


Anmelden zum Antworten