Machine Learning für Softwareentwickler. Paolo Perrotta
Sache zu vereinfachen, wobei wir ohne den Bias jedoch keine genauen Vorhersagen erwarten dürfen. Zum Glück ist es viel einfacher, den Bias wieder einzuführen, als es den Anschein hat.
Bye-bye, Bias!
Im letzten Abschnitt haben wir die folgende Vorhersageformel implementiert:
ŷ = x1 * w1 + x2 * w2 + x3 * w3
Jetzt wollen wir aber den Bias wieder in unser System aufnehmen:
ŷ = x1 * w1 + x2 * w2 + x3 * w3 + b
Wir könnten jetzt einfach den Bias wie im vorherigen Kapitel wieder überall in den Code einfügen. Allerdings gibt es einen Trick, mit dem wir ihn auf weit weniger aufwendige Weise einfließen lassen können.
Schauen Sie sich die vorstehende Formel noch einmal genau an. Was ist der Unterschied zwischen dem Bias und den Gewichten? Die Gewichte werden mit einer Eingabevariablen multipliziert, der Bias dagegen nicht. Wenn wir nun in unserem System eine weitere Eingabevariable namens x0 hätten, die stets den Wert 1 hat, so könnten wir die Formel wie folgt schreiben:
ŷ = x1 * w1 + x2 * w2 + x3 * w3 + x0 * b
Jetzt gibt es überhaupt keinen Unterschied mehr zwischen dem Bias und den Gewichten. Der Bias ist einfach nur das Gewicht einer Eingabevariablen mit dem konstanten Wert 1. Der Trick, den ich eben erwähnt habe, besteht darin, eine Pseudo-Eingabevariable hinzuzufügen, die stets 1 ist. Dann brauchen wir den expliziten Bias nicht mehr.
Wir könnten dazu in die Datei pizza_3_vars.txt wie folgt eine Spalte mit lauter Einsen aufnehmen:
Allerdings ist es immer besser, nicht in den ursprünglichen Daten herumzupfuschen. Stattdessen fügen wir die Spalte mit den Einsen in X ein, nachdem wir die Daten geladen haben. Die Position dieser Biasspalte spielt keine Rolle, allerdings wird sie vereinbarungsgemäß meistens an erster Stelle eingefügt:
04_hyperspace/multiple_regression_final.py
x1, x2, x3, y = np.loadtxt("pizza_3_vars.txt", skiprows=1, unpack=True)
X = np.column_stack((np.ones(x1.size), x1, x2, x3)) <
Y = y.reshape(-1, 1)
w = train(X, Y, iterations=100000, lr=0.001)
print("\nWeights: %s" % w.T) <
print("\nA few predictions:") <
for i in range(5): <
print("X[%d] -> %.4f (label: %d)" % (i, predict(X[i], w), Y[i])) <
Ich habe diese Gelegenheit genutzt, dem Programm noch einige print-Befehle beizufügen. Sie geben zunächst die Gewichtsmatrix aus (transponiert, sodass sie in eine Zeile passt) und dann die vorhergesagten Werte und die Labels der ersten fünf Beispiele, sodass wir sie vergleichen können.
Damit ist unser Programm für multiple lineare Regression fertig. Zeit für einen letzten Test!
Ein letzter Testlauf
Wenn wir das Programm ausführen, erhalten wir folgende Ausgabe:
Iteration 0 => Loss: 1333.56666666666660603369
Iteration 1 => Loss: 152.37148173674077611395
...
Iteration 99999 => Loss: 6.69817817063803833122
Weights: [[ 2.41178207 1.23368396 -0.02689984 3.12460558]]
A few predictions:
X[0] -> 45.8717 (label: 44)
X[1] -> 23.2502 (label: 23)
X[2] -> 28.5192 (label: 28)
X[3] -> 58.2355 (label: 60)
X[4] -> 42.8009 (label: 42)
Werfen wir zunächst einen Blick auf den Verlust. Wie erwartet ist er niedriger als bei der Version ohne Bias.
Eine Betrachtung der Gewichte ist sehr aufschlussreich. Bei dem ersten Gewicht handelt es sich lediglich um den Bias, den wir durch den »Einserspalten-Trick« zu einem regulären Gewicht gemacht haben. Die restlichen Gewichte dagegen sind diejenigen für die drei Eingabevariablen, also für Reservierungen, Temperatur und Touristendichte. Die Touristendichte hat ein sehr hohes Gewicht, die Temperatur dagegen ein ziemlich kleines. Das zeigt, dass die Pizzaverkäufe sehr stark von der Anzahl der Touristen beeinflusst werden, aber kaum mit dem Wetter schwanken.
Die letzten Zeilen der Ausgabe zeigen die Vorhersagen und Labels für die ersten fünf Beispiele. Keine der Vorhersagen weicht um mehr als eine oder zwei Pizzas ab. Roberto scheint recht gehabt zu haben: Die Erweiterung auf mehrere Variablen hat unsere Vorhersagefähigkeit verbessert.
Herzlichen Glückwunsch – damit haben Sie das schwerste Kapitel in diesem Buch durchgearbeitet! Fassen wir kurz zusammen, was Sie hier gelernt haben.
Zusammenfassung
In diesem Kapitel ging es um multiple lineare Regression. Wir haben unser Programm auf Datenmengen mit mehr als einer Eingabevariablen erweitert. Dazu verwenden wir jetzt auch mehrere Gewichte, nämlich jeweils für die einzelnen Variablen. Außerdem haben wir den expliziten Bias in ein weiteres Gewicht umgewandelt. Unser ML-Programm ist jetzt leistungsfähig genug, um damit auch Probleme aus der Praxis anzugehen, obwohl es nicht komplizierter aussieht als zuvor.
Des Weiteren haben Sie auch die Matrizenmultiplikation und die Transposition kennengelernt. Diese mathematischen Operationen sind für ML von großer Bedeutung. Diese Kenntnisse werden Ihnen noch viele Jahre lang von Nutzen sein.
In diesem Kapitel haben wir uns auch intensiver mit NumPy beschäftigt. Mich persönlich verbindet eine Hassliebe mit dieser Bibliothek: Während ich ihre Vielseitigkeit schätze, verwirrt mich ihre Schnittstelle. Nichtsdestoweniger ist NumPy ein unverzichtbares Werkzeug für ML, weshalb es wichtig ist, sich damit vertraut zu machen. Wir werden diese Bibliothek im ganzen Buch verwenden.
Es ist jetzt an der Zeit, neue Weichen zu stellen. Alles, was Sie in den ersten Kapiteln kennengelernt haben, waren lediglich die Grundlagen für etwas ganz anderes und viel Faszinierenderes. Im nächsten Kapitel werden wir den ausgetretenen Pfad der linearen Regression verlassen und einen weniger stark befahrenen Weg einschlagen – den Weg zum maschinellen Sehen.
Praktische Übung: Statistik in der Praxis
Da Sie nun ein Programm haben, das mit mehreren Variablen umgehen kann, sollten Sie versuchen, es anhand von echten Daten aus der Praxis auszuprobieren. Im Verzeichnis data/life-expectancy im Begleitmaterial zu diesem Buch finden Sie eine Datenmenge, die die Lebenserwartung in verschiedenen Ländern angibt.
Dasselbe Verzeichnis enthält auch die Datei readme.txt mit zusätzlichen Informationen, darunter einem Experiment, das sie anhand dieser Datenmenge durchführen können. Dabei sollen Sie das Programm für multiple lineare Regression mit diesen Daten trainieren und seine Vorhersagen mit der Grundwahrheit vergleichen.
Viel Spaß beim Herumspielen mit echten Daten!
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской