Machine Learning für Softwareentwickler. Paolo Perrotta. Читать онлайн. Newlib. NEWLIB.NET

Автор: Paolo Perrotta
Издательство: Bookwire
Серия:
Жанр произведения: Математика
Год издания: 0
isbn: 9783969100264
Скачать книгу
Aufgabe an.

      Unser Freund Roberto führt eine gemütliche kleine Pizzeria in Florenz. Mittags sieht er sich immer die Anzahl der Reservierungen an und entscheidet auf dieser Grundlage, wie viel Pizzateig er für den Abend vorbereiten soll. Wenn er zu viel Teig macht, wird der Überschuss schlecht; wenn er zu wenig macht, geht irgendwann die Pizza aus. In beiden Fällen verliert er Geld.

      Es ist jedoch nicht so einfach, die Anzahl der Pizzas aus den Reservierungen abzulesen, denn erstens reservieren viele Gäste keinen Tisch, und zweitens essen viele auch gar keine Pizza, sondern etwas anderes. Roberto weiß, dass es eine Beziehung zwischen den beiden Zahlen gibt, da er bei mehr Reservierungen gewöhnlich auch mehr Pizzas verkauft. Die genaue Beziehung kennt er jedoch nicht.

      Roberto träumt von einem Programm, das sich die alten Daten anschaut, die Relation zwischen Reservierungen und Pizzas erkennt und damit aus den Reservierungen für den Abend die Pizzaverkäufe am selben Abend vorhersagen kann. Er bittet uns, ein solches Programm für ihn zu schreiben.

      Nach dem, was ich im Abschnitt »Überwachtes Lernen« auf Seite 12 gesagt habe, können wir Robertos Pizzavorhersageproblem lösen, indem wir einen Algorithmus für überwachtes Lernen mit einer Reihe von mit Labels versehenen Beispielen trainieren. Wir bitten Roberto, uns die Zahlen der Reservierungen und Pizzaverkäufe einiger Tage als Beispiele mitzuteilen, und sammeln sie in einer Datei, deren erste Zeilen nun wie folgt aussehen:

       02_first/pizza.txt

Reservierungen Pizzas
13 33
2 16
14 32
23 51

      Jede Zeile ist ein Beispiel mit der Anzahl der Reservierungen als Eingabevariable und der Anzahl der Pizzas als numerisches Label. Sobald wir einen Algorithmus haben, können wir ihn anhand dieser Beispiele trainieren. In der Vorhersagephase übergeben wir dann die Anzahl der Reservierungen an den Algorithmus, damit er die zugehörige Anzahl von Pizzas ausgibt.

      Fangen wir mit den Zahlen an, wie es Datenwissenschaftler gewöhnlich tun.

      Schon beim ersten Blick auf Robertos Beispiele können wir erkennen, dass es eine Korrelation zwischen den Reservierungen und der Anzahl der Pizzas gibt. Um uns das genauer anzusehen, starten wir (mit dem Befehl python3) eine Python-Shell.

      Die Bibliothek NumPy enthält eine komfortable Funktion, um durch Weißraum getrennte Daten aus Text zu importieren:

       import numpy as np

      X, Y = np.loadtxt("pizza.txt", skiprows=1, unpack=True)

      Die erste Zeile importiert die Bibliothek NumPy, und die zweite lädt die Daten aus der Datei pizza.txt mithilfe der NumPy-Funktion loadtxt(). Ich habe hier die Kopfzeile übersprungen und die beiden Spalten in die getrennten Arrays X und Y »entpackt«, wobei X die Werte der Eingabevariablen enthält und Y die Labels. Die Namen der Arrays sind Großbuchstaben. Das ist eine Python-Konvention, um anzuzeigen, dass eine Variable als Konstante behandelt werden soll.

      Sehen wir uns nun die Daten an, um uns zu vergewissern, dass sie korrekt geladen wurden. Wenn Sie die Beispiele nachvollziehen wollen, starten Sie einen Python-Interpreter, geben die beiden zuvor gezeigten Zeilen ein und prüfen dann die ersten Elemente von X und Y:

      X[0:5] image

      [ 13. 2. 14. 23. 13.] image

      Y[0:5]) image

      [ 33. 16. 32. 51. 27.] image

      Das sind die Zahlen aus Robertos Datei, allerdings ist es schwer, irgendwelche Zusammenhänge darin zu erkennen. In einem Diagramm werden die Beziehungen jedoch klarer:

image

      Jetzt springt die Korrelation ins Auge: Je mehr Reservierungen, umso mehr Pizzas werden verkauft. Um der Wahrheit die Ehre zu geben: Ein Statistiker würde uns dafür schelten, dass wir aus einer Handvoll flüchtig zusammengesuchter Daten solche Schlussfolgerungen ziehen. Allerdings ist dies hier nicht als Forschungsprojekt gedacht. Ignorieren wir also unseren inneren Statistiker und schreiben wir stattdessen unser Pizzavorhersageprogramm.

       Der Diagrammcode

      Der Code für das vorstehende Diagramm sieht übrigens wie folgt aus:

       02_first/plot.py

       import numpy as np

       import matplotlib.pyplot as plt

       import seaborn as sns

      sns.set() # Aktiviert Seaborn

      plt.axis([0, 50, 0, 50]) # Skaliert Achsen (0 bis 50)

      plt.xticks(fontsize=15) # Legt Teilstriche der x-Achse fest

      plt.yticks(fontsize=15) # Legt Teilstriche der y-Achse fest

      plt.xlabel("Reservations", fontsize=30) # Legt Beschriftung der x-Achse fest

      plt.ylabel("Pizzas", fontsize=30) # Legt Beschriftung der y-Achse fest

      X, Y = np.loadtxt("pizza.txt", skiprows=1, unpack=True) # Lädt Daten

      plt.plot(X, Y, "bo") # Stellt Daten im Diagramm dar

      plt.show() # Zeigt das Diagramm an

      Neben NumPy nutzt der vorstehende Code noch zwei andere Bibliotheken, nämlich Matplotlib, um das Diagramm zu zeichnen, und Seaborn, um das Erscheinungsbild des Diagramms zu verbessern. Die Funktion plot() stellt die Beispiele als blaue Kreise dar ('bo'), und der Rest des Codes richtet die Achsen ein, lädt die Datenpunkte und zeigt sie an. Wenn Sie wollen, können Sie dieses Programm auch selbst mit python3 plot.py ausführen.

      Mit dem Diagrammcode müssen Sie sich jetzt nicht befassen, aber früher oder später werden Sie selbst ähnlichen Code schreiben. Sie können ja einen verregneten Nachmittag dafür reservieren, sich in die Grundlagen von Matplotlib und Seaborn einzuarbeiten, oder die Einzelheiten nach Bedarf Stück für Stück lernen.

      Im weiteren Verlauf werde ich den Code zum Erstellen der Diagramme nicht mehr angeben. Sie finden ihn aber im Quellcode zu diesem Buch.

      Unser Ziel besteht darin, ein Programm zu schreiben, dass die Anzahl der Pizzas aus der Anzahl der Reservierungen berechnet. Dabei soll dieses Programm der Vorgehensweise folgen, die wir im Abschnitt »Die Mathematik hinter dem Zaubertrick« auf Seite 14 besprochen haben: In der Trainingsphase soll es die Daten durch eine Funktion annähern und in der Vorhersagephase die Anzahl der Pizzas aus dieser Funktion schließen.

      Eine