Manche Aufgaben sind für Computer einfach, für Menschen aber schwer. Beispielsweise kann der Computer sehr schnell, und ohne müde zu werden tausende Zahlen miteinander multiplizieren. Eine Aufgabe, die ein Mensch sehr anstrengend und ermüdend empfinden dürfte.
Andererseits ist es für Computer zunächst sehr schwer, bei den folgenden 3 Bildern zu entscheiden, welches ein Zebra, welches einen Zebrastreifen und welches ein Hochhaus zeigt. Ein Aufgabe, die die meisten Menschen mühelos bewältigen werden.
Problem | Computer | Mensch |
Tausende Zahlen multiplizieren | Einfach und schnell | Schwer und langsam |
Zebrabilder unterscheiden | Schwer | Einfach und schnell |
Die „klassische“ Programmierung durch kluge Aneinanderreihung einzelner Anweisungen, Verzweigungen oder Schleifen nennt man imperative Programmierung. Eine Rechenaufgabe zu programmieren ist beispielsweise in so ziemlich jeder Programmiersprache ein Kinderspiel. Das Navi so zu programmieren, dass es die kürzeste Route berechnen kann, ist schon komplexer – aber auch für dieses mathematische Problem lässt sich die Lösung noch immer gut in (vielen) einzelnen expliziten Anweisungen formulieren.
Es gibt aber trotzdem viele Aufgaben, die man nicht einfach lösen kann, indem man einzelne Befehle geschickt aneinanderreiht.
Ein Regelwerk, das bei unbekannten Bildern beispielsweise durch Betrachtung jedes einzelnen Pixels und seiner Relation zu anderen Pixeln entscheiden soll, welches der drei Bilder oben ein Zebra darstellt ist nahezu undenkbar und fast sicher unmöglich imperativ zu programmieren.
Auch ein Mensch kann diese Frage erst beantworten, nachdem er Dinge gelernt hat - ein 2 Jähriger könnte die Bilder wohl kaum unterscheiden, eine Zehnjährige ziemlich sicher.
Wie kann man einem Computer aber beibringen zu lernen, was also soll "maschinelles Lernen" sein - und wie kann das funktionieren?
Als erstes Beispiel soll die Umrechnung von Zentimeter in Inch dienen2).
Als einzige Information sei die folgende Tabelle gegeben:
Zentimeter | -42 | -11.2 | 5.5 | 8 | 15 | 22 | 38 |
---|---|---|---|---|---|---|---|
Inch | -16.53543, | -4.40945 | 2.16535 | 3.14961 | 5.90551 | 8.66142 | 14.96063 |
Wir wollen nun eine "Vorhersagemaschine" verwenden, die wir mit diesen Daten füttern. Dabei soll die Maschine "lernen", welcher Zusammenhang zwischen Eingabe und Ausgabe besteht und für einen angegebenen Wert eine Vorhersage für den zugehörigen Wert bestimmen.
(A) Lade den vorbereiteten Code von https://codeberg.org/qg-info-unterricht/tf-vorhersagemaschine herunter oder klone das Repo. Anschließend musst du die python-Abhängigkeiten für das Projekt installieren - unter Linux kannst du einfach das Skript mkvenv.sh
ausführen, das richtet ein Virtual-Environment ein, installiert alle Abhängigkeiten und aktiviert es anschließend. Windows?
./vorhersagemaschine.py -i datensatz01.csv -t 10 -x 8
aus.c
diese beide Einheiten ineinander umrechnet und anschließend (imperativ) die Gleichung inch=c*zentimeter
in einer Programmiersprache deiner Wahl zu implementieren