Open Source im professionellen Einsatz
Linux-Magazin 07/2017
943

Daten vorenthalten

Um sicherzustellen, dass das Modell nicht nur die Trainingsdaten simuliert, sondern auch die Wirklichkeit vorhersagt, teilen KI-Fachkräfte die vorliegenden Daten oft in ein Training- und ein Testset auf. Sie trainieren das Modell nur mit Daten aus ersterem, denn sonst besteht die Gefahr, dass es zwar minutiös die Trainingsdaten nachahmt, aber auch temporäre Ausreißer nachbildet, die später in der Produktion nicht mehr vorkommen, und Artefakte vorhersagt, die dann nicht eintreffen.

Bleibt das Testset bis zum Abschluss des Trainings unangetastet und sagt danach das Modell auch die Testdaten richtig voraus, wird sich das KI-System nach aller Wahrscheinlichkeit auch später in der Produktion richtig verhalten.

Abbildung 4: Wochentag als Krücke für das neuronale Netzwerk.

Nun konnte mein HP-41CV-Taschenrechner vor 30 Jahren aus einer Ansammlung von x/y-Werten und der Annahme eines linearen Zusammenhangs auch schon mittels linearer Regression die Parameter W und b bestimmen. Allerdings kann Tensorflow nun weit mehr, denn neben komplexeren Regressionstechniken versteht es auch neuronale Netzwerke und Decision Trees.

Kein einfaches Muster

Wer mit Adleraugen die Kilometerstände betrachtet, stellt fest, dass der Zuwachs keineswegs genau linear mit der Zeit erfolgt. Abbildung 5 zeigt den höher aufgelösten Kilometerzuwachs pro Tag, und es ist bereits darin offensichtlich, dass der Anstieg gewaltigen Schwankungen unterliegt. So bewegt sich das Auto an den meisten Tagen zwischen 30 und 90 Kilometer, während es hin und wieder ein oder zwei Tage lang fast kaum fährt und oft sogar ganz stillsteht.

Abbildung 5: Michael Schilis pro Tag gefahrene Strecke über die letzten drei Monate.

Ein Mensch schaut sich einfach den Graphen in Abbildung 5 an – und zack! ist klar, dass der Wagen am Wochenende weniger als an Werktagen herumkesselt. Damit ein KI-System die gleiche Leistung erbringt, muss es der programmierende Mensch erst mal an die Hand nehmen und in die richtige Richtung leiten.

Liegen die Datumsangaben zum Beispiel – wie in Unix üblich – als Epoch-Sekunden vor, findet das KI-System nie im Leben heraus, dass alle 7 Tage Wochenende mit weniger Fahrbetrieb ist. Eine lineare Regression würde höchstens die letzten paar Datenpunkte in die Zukunft strecken, eine Polynomregression gar im Overfitting-Rausch völlig irre Patterns produzieren.

Die Lern-Algorithmen kommen auch schlecht mit unvollständigen Daten zurecht. Fehlen Messwerte, zum Beispiel an Tagen, an denen das Auto nur in der Garage stand, füllt der gewissenhafte Maschinenlehrer sie mit sinnvollen Werten auf, etwa mit Nullen. Und er fügt das hinzu, was in der Disziplin Machine Learning als "Expert Knowledge" gilt: Da der Wochentag der Datumswerte bekannt ist und dem Algorithmus hoffentlich weiterhilft, stellt eine neue CSV-Datei »miles-per-day-wday.csv« einfach die laufende Nummer des Wochentags (Strings mögen neuronale Netzwerke nicht, nur Zahlen) dem abgelesenen Tages-Kilometerstand entgegen (Abbildung 4).

Listing 2 nutzt dann das Framework »sklearn« zum Aufbau eines neuronalen Netzwerks, das es mit Kilometerständen trainiert, um den zugehörigen Wochentag zu erraten. Es liest dazu zunächst die CSV-Datei ein und formt daraus den Dataframe »X« mit den Kilometerständen sowie »y« als Vektor mit den zugehörigen Wochentagsnummern.

Listing 2

neuro.py

01 #!/usr/bin/python3
02 import pandas as pd
03
04 from sklearn.model_selection \
05   import train_test_split
06 from sklearn.preprocessing \
07   import StandardScaler
08 from sklearn.neural_network \
09   import MLPClassifier
10
11 train_df = \
12     pd.read_csv("miles-per-day-wday.csv")
13 X = train_df.drop('weekday', axis=1)
14 y = train_df['weekday']
15
16 X_train, X_test, y_train, y_test = \
17     train_test_split(X, y)
18
19 scaler = StandardScaler()
20 scaler.fit(X_train)
21 X_train_n = scaler.transform(X_train)
22 X_test_n = scaler.transform(X_test)
23
24 mlp = MLPClassifier(
25     hidden_layer_sizes=(2,2),max_iter=1000)
26 mlp.fit(X_train_n,y_train)
27
28 print(mlp.predict(X_test_n))

Die Funktion »train_test_split()« spaltet die vorliegenden Daten in ein Trainings- und in ein Testset auf, die der Standard-Skalierer in den Zeilen 19 bis 22 normalisiert, denn neuronale Netzwerke sind extrem penibel, was den Wertebereich der Eingabewerte angeht.

Das in Zeile 24 erzeugte Multilayer-Perceptron vom Typ »MLPClassifier« spannt das neuronale Netzwerk mit zwei Layern auf und schreibt vor, dass das Training maximal 1000 Schritte dauern darf. Der Aufruf der Methode »fit()« führt dann das Training durch, bei dem der Optimierer im so genannten Supervised Learning versucht die internen Rezeptorenverstärker zur Bewertung der Eingabe so lange zu verstellen, bis sich der Fehler zwischen der aus dem Trainingsparameter errechneten Vorhersage und dem Erwartungswert in »y_train« minimiert.

Das Ergebnis war im Versuch nicht berauschend, teilweise variierten die vorhergesagten Werte stark von Aufruf zu Aufruf und die Präzision ließ zu wünschen übrig. Eine Reihe verschiedenartiger Eingabeparameter würden zu besseren Ergebnissen führen.

Insgesamt stehen mit Tensorflow und Scikit zwei ausgereifte Frameworks zum Experimentieren mit KI-Anwendungen zur Verfügung. Der Einstieg ist nicht von Pappe, da die Literatur ([3], [4]) zu den neuesten Errungenschaften noch jung und unausgereift ist und eine Reihe von Werken sich im Entwicklungsstadium befindet. Es lohnt sich aber, die Materie zu erkunden, denn diesem Aufgabenfeld steht eine rosige Zukunft bevor.

Online PLUS

Im Screencast demonstriert Michael Schilli das Beispiel: http://www.linux-magazin.de/Ausgaben/2017/07/plus

Infos

  1. Listings zu diesem Artikel: http://www.linux-magazin.de/static/listings/magazin/2017/07/snapshot/
  2. Michael Schilli, "Wege zum Connected Car": Linux-Magazin 10/16, S. 84, http://www.linux-magazin.de/Ausgaben/2016/10/Perl-Snapshot
  3. Sarah Guido, Andreas C. Müller, "Introduction to Machine Learning with Python": O'Reilly Media, 2016
  4. Aurélien Géron, "Hands-On Machine Learning with Scikit-Learn and Tensorflow": O'Reilly Media, 2017

Der Autor

Michael Schilli arbeitet als Software-Engineer in der San Francisco Bay Area in Kalifornien. In seiner seit 1997 laufenden Kolumne forscht er jeden Monat nach praktischen Anwendungen verschiedener Programmiersprachen. Unter mailto:mschilli@perlmeister.com beantwortet er gerne Fragen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Machine Learning

    Der Arbeitgeber von Autor Chris Hinze litt wie vermutlich alle Homepage-Baukasten-Anbieter unter Spammern und illegalen Inhalten. Ein Praxisbericht, der auf der Theorie des Deep Learning beruht.

  • Snapshot

    2, 5, 7, 10, 12 – und welche Zahl kommt als nächste? Michael Schilli testet, ob sich von Psychologen erdachte Intelligenztests mit modernen KI-Automaten knacken lassen.

  • Tensorflow erreicht Version 1.0

    Tensorflow 1.0 verspricht Stabilität für sein Python API und beschleunigt die aktuelle und zukünftige Arbeit mit der Einführung des domain-spezifischen XLA Compilers.

  • Screencast zum Snapshot 07/2017

    Anhand von Trainingsdaten in Form von täglich im Auto erfassten Kilometerständen versucht Michael Schillis ein KI-Programm, Muster im Fahrverhalten zu erlernen und Prognosen für die Zukunft abzugeben.

  • Verständnisfrage

    Als Prüfer Programmcode oder Multiple-Choice-Fragen elektronisch auszuwerten ist nicht allzu schwer. Doch das Korrektursystem zur Linux-Vorlesung an der Hochschule Heidelberg versteht nicht nur vorformulierte Textbausteine, sondern auch Freitextantworten.

comments powered by Disqus

Ausgabe 10/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.