maschinelles Lernen bzw. Mustererkennung und Prognose



  • Hallo zusammen,

    ich bin im C++ noch neu. Habe selbst Erfahrungen in Java und ABAB Programmierung. Hobbymäßig interessiere ich mich für Künstliche Intelligenz, maschinelles Lernen und neuronale Netzte. Das ich mich in diese Themen vertiefe hat erst vor ca einem Monat angefangen, deshalb möchte ich mich hier keinen Experten schimpfen.

    Aktuell versuche ich zu verstehen, wie ich am besten einen Algorithmus konstruiere, der folgendes kann:
    gegeben ist ein Datensatz mit folgenden Zahlen: 0,2,4,6,8,10,12
    die Reihenfolge ist wie gezeichnet. für n0 = 0 ist n1 = n0+2, n2 = n1+2 usw. (das wäre das zu erkennende Muster). Das ist so erstmal recht simpel denke ich.

    Ich komme aktuell noch nicht dahinter wie ich einen Algorithmus schreibe, der das Muster erkennt und dann für die nächsten 10 Stellen eine Prognose auf Basis des Musters erstellt.
    Mein eigener Ansatz ist sehr langwierig: Jedes müsste mit den anderen Elemente des Datensatzes verglichen werden. Dann folgt die untersuchung mit welcher Formel ich von einem Datensatz zum folgenden kommen würde. Aber da seh ich mich in endlosem Code ohne wirkliches Ziel. Bei dem Beispiel sollte es sich noch in Grenzen halten, aber bei einem exponentiellen Graphen wäre die Mustererkennung schon wieder komplexer.
    Gibt es da einfachere Verfahren. Leider bin ich bei meiner Googlesuche noch auf kein vernünftiges Beispiel oder eine entsprechende Ausarbeitung mit Code-Beispielen gestoßen. Ggf. liegt es an den Suchworten.

    Ich freue mich auf eure Rückmeldungen 🙂

    lG, hedgy



  • Beschaeftige dich erstmal mit den Grundlagen! Liess ein gutes Buch! Versuche die dortigen Beispiele nachzuvollziehen! Komme wieder mit einer konkreten Frage! Btw. maschinelles Lernen funktioniert auch in Java.



  • Hallo knivil,

    danke für deine Antwort. Ich denke ich kann ausreichend Programmieren bzw. das Verständnis von C++ ist nicht das Problem. Wenn du den Buchlesen-Tipp in Bezug auf maschinelles Lernen meintest, was für ein Buch könntest du mir empfehlen? Wie gesagt es geht tatsächlich um einen sehr grundlegenden Einstieg wie in meinem vorherigen Beispiel ausgeführt.

    lG,
    hedgy



  • Hier ist ein guter einführender Kurs über machine learning:

    http://www.ml-class.org/course/auth/welcome

    Ist im Stil einer normalen Vorlesung zu dem Thema einer Uni gehalten. Es gibt Vorlesungen (der Prof. spricht hier halt nur direkt in die Kamera anstatt in den Hörsaal) und Übungen, sowie Tests die man absolvieren muss.

    Die Tests fallen für dich aus, da du zu spät dran bist, aber einschreiben können solltest du dich wohl trotzdem.



  • Mal in einfachen Worten: Du hast z.B. Menge bzw. 10 Werte geben und suchst die naechsten 10, d.h. eine Funktion f: X -> Y (egal was jetzt X und Y ist). Diese Funktion ist von Parametern abhaengig. Beispiel eine quadratische Funktion fuer f: R -> R: f(x) = ax^2 + bx + c. Die Parameter sind a, b, c. Die Frage ist nun, mit deinen 10 Messwerten moeglichst gut a,b,c, d.h. den Fehler (was immer das heisst) gering zu halten. Die Funktion f ist quasi dein Model, was durch die gegebenen Daten angepasst werden soll. Solch ein Modell benoetigst du, entweder durch eine plausible Annahme oder aus Trainingsdaten. Einfach 10 Zahlen und der Maschine sagen "mach mal" funktioniert nicht.

    Wenn es speziell um Neuronale Netze geht, dann kann ich http://www.amazon.de/Theorie-neuronalen-Netze-systematische-Einführung/dp/3540563539 empfehlen. Die deutsche Version sollte in jeder Unibiblothek zu finden sein. Als Voraussetzung sollte man Matrizen, Wahrscheinlichkeitsrechnung und Differenzieren (genau weiss ich es nicht, lange her) beherrscht werden.



  • Insbesondere bei Blödfunktionen wie e(-x2) kacken neuronale Netze gerne total ab.
    Gehts um ein "gutes" Ergebnis, muß man bei http://oeis.org/search?q=2%2C4%2C6%2C8%2C10%2C12&language=english&go=Search lurken.



  • Klappt sowas überhaupt mit NN? Hat einer sowas schon mal gemacht? Was soll das NN da überhaupt für ein Muster erkennen? Mit einem NN kann ich doch nur etwas in vorher eintrainierte Gruppen einteilen. Also für Texterkennung 10 verschieden "T" einscannen und alles in die Gruppe "T" einordnen usw. Wollt ihr Formlen eintrainieren oder soll das NN Formeln entwickeln?



  • regenundschnee schrieb:

    Klappt sowas überhaupt mit NN? Hat einer sowas schon mal gemacht? Was soll das NN da überhaupt für ein Muster erkennen? Mit einem NN kann ich doch nur etwas in vorher eintrainierte Gruppen einteilen. Also für Texterkennung 10 verschieden "T" einscannen und alles in die Gruppe "T" einordnen usw. Wollt ihr Formlen eintrainieren oder soll das NN Formeln entwickeln?

    Klar. Sagst, f(x)=a*x²+b*x+c+exp(d*x2+e*x+f)+sin(e*x2+f*x+g) und hoffst. Klappt oft. löl.
    Geht es nicht, macht man eine Schicht mehr rein.
    Das ist ja das Problem.
    Kannst Veröffentlichungen aus den 80-er Jahren finden, wo NN der Welt Formeln praktisch immer finden und von "praktisch immer" auf "immer" kann ja nur ein kleiner Schritt sein.



  • hedgy schrieb:

    ich bin im C++ noch neu. Habe selbst Erfahrungen in Java und ABAB Programmierung. Hobbymäßig interessiere ich mich für Künstliche Intelligenz, maschinelles Lernen und neuronale Netzte. Das ich mich in diese Themen vertiefe hat erst vor ca einem Monat angefangen, deshalb möchte ich mich hier keinen Experten schimpfen.

    Aktuell versuche ich zu verstehen, wie ich am besten einen Algorithmus konstruiere, der folgendes kann:
    gegeben ist ein Datensatz mit folgenden Zahlen: 0,2,4,6,8,10,12
    die Reihenfolge ist wie gezeichnet. für n0 = 0 ist n1 = n0+2, n2 = n1+2 usw. (das wäre das zu erkennende Muster). Das ist so erstmal recht simpel denke ich.

    Nur zur Info. Mustererkennung ist ein Fachbegriff, der ein wissenschaftliches Gebiet bezeichnet. Dabei geht es darum, Merkmale aus irgendwelchen Objekten zu extrahieren und die Objekte dann anhand dieser Merkmale zu klassifizieren. Die Aufgabe der Mustererkennung ist es, Objekte der richtigen Klasse zuzuordnen.

    Was Du da hast,ist kein Muster und hat nichts mit Mustererkennung zu tun. Du hast da ein paar Glieder einer Folge und willst jetzt anhand dieser Folgenglieder die Konstruktionsvorschrift für diese Folge herausfinden. ...wie es halt bei "Intelligenztests" gemacht wird. ...aber sag mir erstmal, warum das nächste Folgenglied nicht 2146896 sein sollte. Ich kann Dir problemlos formell eine Folge aufschreiben, bei der das genau so wäre.

    Du suchst aber vermutlich nach sehr "einfachen" Konstruktionsvorschriften. Ich würde da so herangehen, dass ich die in Frage kommenden Vorschriften nach Einfachheit ordne und sie dann alle teste und gucke, was passt.



  • Man könnte auch einen Genetischen Algorithmus darauf loslassen. Der kombiniert, selektiert und mutiert ein paar Basisfunktionen um die Fehlerschranke zu minimieren. So benötigt man also nichtmal ein bestimmtes Modell.

    Im AForge-Framework ist ein Beispiel dazu.



  • volkard schrieb:

    regenundschnee schrieb:

    Klappt sowas überhaupt mit NN? Hat einer sowas schon mal gemacht? Was soll das NN da überhaupt für ein Muster erkennen? Mit einem NN kann ich doch nur etwas in vorher eintrainierte Gruppen einteilen. Also für Texterkennung 10 verschieden "T" einscannen und alles in die Gruppe "T" einordnen usw. Wollt ihr Formlen eintrainieren oder soll das NN Formeln entwickeln?

    Klar. Sagst, f(x)=a*x²+b*x+c+exp(d*x2+e*x+f)+sin(e*x2+f*x+g) und hoffst. Klappt oft. löl.
    Geht es nicht, macht man eine Schicht mehr rein.
    Das ist ja das Problem.

    Kannst du mal genau erklären, was du sagen willst?

    Ich seh das wie Gregor, ein NN spuckt keine Formel aus, auch nicht wenn man noch mehr Schichen rein macht, sondern klassifiziert einfach nur Objekte.



  • Klappt sowas überhaupt mit NN?

    Warum nicht?

    Was Du da hast,ist kein Muster und hat nichts mit Mustererkennung zu tun.

    Ich finde schon.

    Du hast da ein paar Glieder einer Folge und willst jetzt anhand dieser Folgenglieder die Konstruktionsvorschrift für diese Folge herausfinden.

    So hat er das nicht formuliert. Sah eher aus wie Zeitreihenanalyse.



  • regenundschnee schrieb:

    Ich seh das wie Gregor, ein NN spuckt keine Formel aus, auch nicht wenn man noch mehr Schichen rein macht, sondern klassifiziert einfach nur Objekte.

    Das sind die NNs, die schon einigermaßen verstanden sind.



  • regenundschnee schrieb:

    Ich seh das wie Gregor, ein NN spuckt keine Formel aus, auch nicht wenn man noch mehr Schichen rein macht, sondern klassifiziert einfach nur Objekte.

    Das habe ich gar nicht gesagt! 😃

    Man kann Neuronale Netze sicherlich auch jenseits der Mustererkennung einsetzen. Was man dann reinsteckt und wie man das interpretiert was rauskommt, muss keinerlei Zusammenhang zur Mustererkennung haben.



  • Na dann erklärt doch mal genau wie das gehen soll. Was soll an der Ausgansschicht rauskommen? Ich wüste nicht wie man da eine Formel raus bekommen soll. Man könnte höchstens durch das NN eine von x bekannten Formeln, die man vorher eintrainiert hat, erkennen. Oder basieren eure Annahmen nur auf so einer Theorie, dass NN irgendwie alles können, ohne Beweis.



  • regenundschnee schrieb:

    Na dann erklärt doch mal genau wie das gehen soll. Was soll an der Ausgansschicht rauskommen? Ich wüste nicht wie man da eine Formel raus bekommen soll. Man könnte höchstens durch das NN eine von x bekannten Formeln, die man vorher eintrainiert hat, erkennen. Oder basieren eure Annahmen nur auf so einer Theorie, dass NN irgendwie alles können, ohne Beweis.

    Soll ich Dich jetzt PI nennen?
    An den Ausgängen kommen die reellen Zahlen a,b,c,d,e und f an.



  • regenundschnee schrieb:

    Na dann erklärt doch mal genau wie das gehen soll. Was soll an der Ausgansschicht rauskommen? Ich wüste nicht wie man da eine Formel raus bekommen soll. Man könnte höchstens durch das NN eine von x bekannten Formeln, die man vorher eintrainiert hat, erkennen. Oder basieren eure Annahmen nur auf so einer Theorie, dass NN irgendwie alles können, ohne Beweis.

    Ich sehe dein Problem nicht. Das Machine-Learning-Problem besteht doch genau darin, dass man für eine leider unbekannte Funktion f anhand von beispielwerten f(x_1),...,f(x_n) die funktionswerte an beliebigen stellen schätzen möchte. Und neuronale netze können ab Tiefe 3 alle stetigen funktionen approximieren. Das ist allerdings auch das größte Problem, die teile können viele verschiedene funktionen und ich hab meine Zweifel, dass die paar trainingswerte ausreichen.



  • Wie wäre es mit etwas einfachem: einer Regressionsgeraden. Solch ein Verfahren kommt normalerweise auch ganz am Anfang einer Vorlesung über maschinelles Lernen vor. Heißt glaube ich lineare Regression.

    Übrigens gibts bei Standford (oder MIT?) ein Portal mit vielen Vorlesungsaufzeichnungen. Darunter auch eine über maschinelles Lernen. Kann ich nur empfehlen. Da sind auch alle Übungsblätter und das Skript mit dabei.

    Habe ihn mal eben herausgesucht: http://www.academicearth.org/courses/machine-learning



  • volkard schrieb:

    regenundschnee schrieb:

    Na dann erklärt doch mal genau wie das gehen soll. Was soll an der Ausgansschicht rauskommen? Ich wüste nicht wie man da eine Formel raus bekommen soll. Man könnte höchstens durch das NN eine von x bekannten Formeln, die man vorher eintrainiert hat, erkennen. Oder basieren eure Annahmen nur auf so einer Theorie, dass NN irgendwie alles können, ohne Beweis.

    Soll ich Dich jetzt PI nennen?
    An den Ausgängen kommen die reellen Zahlen a,b,c,d,e und f an.

    Kannst du auch mal eine ausführliche Antwort zum Thema geben, wie du vorgehen willst und nicht nur etwas das sowieso jeder sagen kann der 2 Wikipedia Seiten zum Thema gelesen hat? Womit trainierst du? Was erwartest du als Ergbnis? Für welche unbekannte Zahlenreihen soll das noch funktionieren? Oder willst du auch nur approximieren wie Jester?

    Jester schrieb:

    regenundschnee schrieb:

    Na dann erklärt doch mal genau wie das gehen soll. Was soll an der Ausgansschicht rauskommen? Ich wüste nicht wie man da eine Formel raus bekommen soll. Man könnte höchstens durch das NN eine von x bekannten Formeln, die man vorher eintrainiert hat, erkennen. Oder basieren eure Annahmen nur auf so einer Theorie, dass NN irgendwie alles können, ohne Beweis.

    Ich sehe dein Problem nicht. Das Machine-Learning-Problem besteht doch genau darin, dass man für eine leider unbekannte Funktion f anhand von beispielwerten f(x_1),...,f(x_n) die funktionswerte an beliebigen stellen schätzen möchte. Und neuronale netze können ab Tiefe 3 alle stetigen funktionen approximieren. Das ist allerdings auch das größte Problem, die teile können viele verschiedene funktionen und ich hab meine Zweifel, dass die paar trainingswerte ausreichen.

    Ja, approximieren können wird, hat aber wenig mit dem zu tun, dass er auf so etwas wie "n0 = 0 ist n1 = n0+2, n2 = n1+2" kommen will. Zum Approximieren dürfte es auch besser Methoden als ein NN geben. Aber beim Approximieren würden wir wahrscheinlich für 0,2,4,6,8,10,12 als Ergebniss 13,999 16,00001 18,0031 20 bekommen. Nicht wirklich etwas, bei dem man sagen würde, dass die Konstruktionsvorschrift verstanden wurde.



  • regenundschnee schrieb:

    Kannst du auch mal eine ausführliche Antwort zum Thema geben

    Nein, das bringt nichts. Auf diesem Niveau nur gegen reichlich Geld.


Anmelden zum Antworten