Maschinelles Lernen – Polynomiale Regression
Polynomiale Regression
Wenn Ihre Datenpunkte eindeutig nicht in eine lineare Regression passen (eine gerade Linie durch alle Datenpunkte), ist dies möglicherweise ideal für die Polynomregression.
Die polynomische Regression verwendet wie die lineare Regression die Beziehung zwischen den Variablen x und y, um den besten Weg zu finden, eine Linie durch die Datenpunkte zu ziehen.
Wie funktioniert es?
Python verfügt über Methoden zum Finden einer Beziehung zwischen Datenpunkten und zum Zeichnen einer Polynomregressionslinie. Wir zeigen Ihnen, wie Sie diese Methoden verwenden, anstatt die mathematische Formel durchzugehen.
Im Beispiel unten haben wir 18 Autos registriert, als sie an einer bestimmten Mautstelle vorbeifuhren.
Wir haben die Geschwindigkeit des Autos und die Tageszeit (Stunde) registriert, zu der das Überholen stattfand.
Die x-Achse stellt die Stunden des Tages dar und die y-Achse stellt die Geschwindigkeit dar:
Beispiel
Beginnen Sie mit dem Zeichnen eines Streudiagramms:
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
plt.scatter(x, y)
plt.show()
Ergebnis:
Beispiel
Importieren numpy
und
matplotlib
zeichnen Sie dann die Linie der polynomialen Regression:
import numpy
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y =
[100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 22, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()
Ergebnis:
Beispiel erklärt
Importieren Sie die benötigten Module.
In unserem NumPy-Tutorial erfahren Sie mehr über das NumPy-Modul .
In unserem SciPy-Tutorial erfahren Sie mehr über das SciPy-Modul .
import numpy
import matplotlib.pyplot as plt
Erstellen Sie die Arrays, die die Werte der x- und y-Achse darstellen:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y =
[100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy hat eine Methode, mit der wir ein Polynommodell erstellen können:
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
Geben Sie dann an, wie die Zeile angezeigt wird, wir beginnen bei Position 1 und enden bei Position 22:
myline = numpy.linspace(1, 22, 100)
Zeichnen Sie das ursprüngliche Streudiagramm:
plt.scatter(x, y)
Zeichnen Sie die Linie der polynomialen Regression:
plt.plot(myline, mymodel(myline))
Zeigen Sie das Diagramm an:
plt.show()
R-Quadrat
Es ist wichtig zu wissen, wie gut die Beziehung zwischen den Werten der x- und y-Achse ist, wenn es keine Beziehung gibt, kann die Polynomregression nicht verwendet werden, um etwas vorherzusagen.
Die Beziehung wird mit einem Wert gemessen, der als r-Quadrat bezeichnet wird.
Der r-Quadrat-Wert reicht von 0 bis 1, wobei 0 keine Beziehung bedeutet und 1 100 % Beziehung bedeutet.
Python und das Sklearn-Modul berechnen diesen Wert für Sie, alles, was Sie tun müssen, ist, ihn mit den x- und y-Arrays zu füttern:
Beispiel
Wie gut passen meine Daten in eine Polynomregression?
import numpy
from sklearn.metrics import r2_score
x =
[1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y =
[100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))
Hinweis: Das Ergebnis 0,94 zeigt, dass es eine sehr gute Beziehung gibt, und wir können die Polynomregression in zukünftigen Vorhersagen verwenden.
Vorhersage zukünftiger Werte
Jetzt können wir die gesammelten Informationen verwenden, um zukünftige Werte vorherzusagen.
Beispiel: Versuchen wir, die Geschwindigkeit eines Autos vorherzusagen, das gegen 17 Uhr an der Mautstelle vorbeifährt:
Dazu benötigen wir dasselbe mymodel
Array aus dem obigen Beispiel:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Beispiel
Sagen Sie die Geschwindigkeit eines vorbeifahrenden Autos um 17 Uhr voraus:
import numpy
from sklearn.metrics import r2_score
x =
[1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y =
[100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
speed = mymodel(17)
print(speed)
Das Beispiel sagte eine Geschwindigkeit von 88,87 voraus, was wir auch aus dem Diagramm ablesen konnten:
Schlechte Passform?
Lassen Sie uns ein Beispiel erstellen, bei dem die Polynomregression nicht die beste Methode wäre, um zukünftige Werte vorherzusagen.
Beispiel
Diese Werte für die x- und y-Achse sollten zu einer sehr schlechten Anpassung für die Polynomregression führen:
import numpy
import matplotlib.pyplot as plt
x =
[89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y =
[21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(2, 95, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()
Ergebnis:
Und der r-Quadrat-Wert?
Beispiel
Sie sollten einen sehr niedrigen r-Quadrat-Wert erhalten.
import numpy
from sklearn.metrics import r2_score
x =
[89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y =
[21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
mymodel =
numpy.poly1d(numpy.polyfit(x, y, 3))
print(r2_score(y, mymodel(x)))
Das Ergebnis: 0,00995 weist auf eine sehr schlechte Beziehung hin und sagt uns, dass dieser Datensatz nicht für die Polynomregression geeignet ist.