Maschinelles Lernen - Polynomiale Regression

Polynomial Regression (Polynomregression)

Wenn Ihre Datenpunkte offensichtlich nicht für lineare Regression geeignet sind (durch die Datenpunkte verlaufende Linie), könnte Polynomial Regression die ideale Wahl sein.

Wie die lineare Regression verwendet auch die Polynomregression die Beziehung zwischen den Variablen x und y, um die beste Methode zur Zeichnung der Datenpunkte zu finden.


Arbeitsweise

Python hat einige Methoden, um die Beziehung zwischen Datenpunkten zu finden und die Polynomregressionslinie zu zeichnen. Wir werden Ihnen zeigen, wie Sie diese Methoden verwenden können,而不是 durch mathematische Formeln.

Im folgenden Beispiel haben wir 18 Fahrzeuge registriert, die eine bestimmte Mautstelle passiert haben.

Wir haben die Geschwindigkeit und die Zeit des Durchgangs (Stunde) der Fahrzeuge aufgezeichnet.

Die x-Achse stellt die Stunden am Tag dar, die y-Achse die Geschwindigkeit:

Beispiel

Zuerst zeichnen Sie das Streudiagramm:

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:


Führen Sie ein Beispiel aus

Beispiel

Importieren numpy und matplotlibund zeichnen Sie dann die Polynomregressionslinie:

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:


Führen Sie ein Beispiel aus

Beispielexplanation

Importieren Sie die erforderlichen Module:

import numpy
import matplotlib.pyplot as plt

Erstellen Sie ein Array, das die Werte auf der x- und y-Achse darstellt:

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, um uns zu ermöglichen, Polynommodelle zu erstellen:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Dann geben Sie die Anzeige der Zeilen an, 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 Polynomregressionslinie:

plt.plot(myline, mymodel(myline))

Zeigen Sie das Diagramm an:

plt.show()

Quadratischer Faktor

Es ist wichtig zu wissen, wie gut die Beziehung zwischen den Werten auf der x- und y-Achse ist, da Polynomregression ohne Beziehung nichts vorhersagen kann.

Diese Beziehung wird durch einen Wert namens Quadratischer Faktor (r-squared) gemessen.

Der Wertebereich des Quadratischen Faktors (r-squared) liegt zwischen 0 und 1, wobei 0 für nicht verwandt und 1 für 100% verwandt steht.

Python und das Sklearn-Modul berechnen diesen Wert für Sie, alles, was Sie tun müssen, ist, die x- und y-Arraye einzugeben:

Beispiel

Wie gut passt meine Daten in der 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)))

Führen Sie ein Beispiel aus

Anmerkung:Das Ergebnis 0,94 zeigt, dass eine gute Beziehung besteht, und wir können Polynomregression in zukünftigen Vorhersagen verwenden.

Zukunftswerte vorhersagen

Jetzt können wir die gesammelten Informationen verwenden, um zukünftige Werte vorherzusagen.

Beispiel: Lassen Sie uns versuchen, die Geschwindigkeit der Fahrzeuge um 17:00 Uhr in der Nacht über die Mautstelle vorherzusagen:

Dafür benötigen wir dasselbe wie im obigen Beispiel: mymodel Array:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Beispiel

Die Geschwindigkeit des Fahrzeugs um 17:00 Uhr vorherzusagen:

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)

Führen Sie ein Beispiel aus

Die Vorhersagegeschwindigkeit beträgt 88,87, und wir können es auch im Diagramm sehen:


Schlechte Anpassung?

Lassen Sie uns einen Beispielfall erstellen, bei dem Polynomregression nicht die beste Methode zur Vorhersage zukünftiger Werte ist.

Beispiel

Diese Werte für die x- und y-Achsen führen zu einer sehr schlechten Anpassung der polynomialen Regression:}

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:


Führen Sie ein Beispiel aus

Was ist der r-squared-Wert?

Beispiel

Sie sollten einen sehr niedrigen r-squared-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)))

Führen Sie ein Beispiel aus

Ergebnis: 0,00995 zeigt eine sehr schlechte Beziehung und sagt uns, dass der Datensatz nicht für die polynomiale Regression geeignet ist.