Maschinelles Lernen – Lineare Regression
Rückfall
Der Begriff Regression wird verwendet, wenn Sie versuchen, die Beziehung zwischen Variablen zu finden.
Beim maschinellen Lernen und bei der statistischen Modellierung wird diese Beziehung verwendet, um das Ergebnis zukünftiger Ereignisse vorherzusagen.
Lineare Regression
Die lineare Regression verwendet die Beziehung zwischen den Datenpunkten, um eine gerade Linie durch alle zu ziehen.
Diese Linie kann verwendet werden, um zukünftige Werte vorherzusagen.
Beim maschinellen Lernen ist die Vorhersage der Zukunft sehr wichtig.
Wie funktioniert es?
Python verfügt über Methoden, um eine Beziehung zwischen Datenpunkten zu finden und eine lineare Regressionslinie zu zeichnen. Wir zeigen Ihnen, wie Sie diese Methoden verwenden, anstatt die mathematische Formel durchzugehen.
Im folgenden Beispiel stellt die x-Achse das Alter und die y-Achse die Geschwindigkeit dar. Wir haben das Alter und die Geschwindigkeit von 13 Autos registriert, als sie an einer Mautstelle vorbeifuhren. Lassen Sie uns sehen, ob die von uns gesammelten Daten in einer linearen Regression verwendet werden könnten:
Beispiel
Beginnen Sie mit dem Zeichnen eines Streudiagramms:
import matplotlib.pyplot as plt
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
plt.scatter(x, y)
plt.show()
Ergebnis:
Beispiel
Importieren scipy
und zeichnen Sie die Linie der linearen Regression:
import matplotlib.pyplot as plt
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
Ergebnis:
Beispiel erklärt
Importieren Sie die benötigten Module.
In unserem Matplotlib-Tutorial erfahren Sie mehr über das Matplotlib-Modul .
In unserem SciPy-Tutorial erfahren Sie mehr über das SciPy-Modul .
import matplotlib.pyplot as plt
from scipy
import stats
Erstellen Sie die Arrays, die die Werte der x- und y-Achse darstellen:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Führen Sie eine Methode aus, die einige wichtige Schlüsselwerte der linearen Regression zurückgibt:
slope, intercept, r,
p, std_err = stats.linregress(x, y)
Erstellen Sie eine Funktion, die die Werte slope
und
intercept
verwendet, um einen neuen Wert zurückzugeben. Dieser neue Wert stellt dar, wo auf der y-Achse der entsprechende x-Wert platziert wird:
def myfunc(x):
return slope * x + intercept
Führen Sie jeden Wert des x-Arrays durch die Funktion. Dies führt zu einem neuen Array mit neuen Werten für die y-Achse:
mymodel = list(map(myfunc, x))
Zeichnen Sie das ursprüngliche Streudiagramm:
plt.scatter(x, y)
Zeichnen Sie die Linie der linearen Regression:
plt.plot(x, mymodel)
Zeigen Sie das Diagramm an:
plt.show()
R für Beziehung
Es ist wichtig zu wissen, wie die Beziehung zwischen den Werten der x-Achse und den Werten der y-Achse ist, wenn es keine Beziehung gibt, kann die lineare Regression nicht verwendet werden, um irgendetwas vorherzusagen.
Diese Beziehung – der Korrelationskoeffizient – wird als bezeichnet
r
.
Der r
Wert reicht von -1 bis 1, wobei 0 keine Beziehung bedeutet und 1 (und -1) 100 % Beziehung bedeutet.
Python und das Scipy-Modul berechnen diesen Wert für Sie, alles, was Sie tun müssen, ist, ihn mit den x- und y-Werten zu füttern.
Beispiel
Wie gut passen meine Daten in eine lineare Regression?
from scipy import stats
x =
[5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
print(r)
Hinweis: Das Ergebnis -0,76 zeigt, dass es eine nicht perfekte Beziehung gibt, aber es zeigt an, dass wir die lineare Regression in zukünftigen Vorhersagen verwenden könnten.
Vorhersage zukünftiger Werte
Jetzt können wir die gesammelten Informationen verwenden, um zukünftige Werte vorherzusagen.
Beispiel: Versuchen wir, die Geschwindigkeit eines 10 Jahre alten Autos vorherzusagen.
Dazu benötigen wir dieselbe myfunc()
Funktion aus dem obigen Beispiel:
def myfunc(x):
return slope * x + intercept
Beispiel
Sagen Sie die Geschwindigkeit eines 10 Jahre alten Autos voraus:
from scipy import stats
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y =
[99,86,87,88,111,86,103,87,94,78,77,85,86]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
speed = myfunc(10)
print(speed)
Das Beispiel sagte eine Geschwindigkeit von 85,6 voraus, was wir auch aus dem Diagramm ablesen konnten:
Schlechte Passform?
Lassen Sie uns ein Beispiel erstellen, bei dem die lineare Regression 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 lineare Regression führen:
import matplotlib.pyplot as plt
from scipy import stats
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]
slope,
intercept, r, p, std_err = stats.linregress(x, y)
def
myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc,
x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
Ergebnis:
Und die r
Beziehung?
Beispiel
Sie sollten einen sehr niedrigen r
Wert erhalten.
import numpy
from scipy import stats
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]
slope, intercept, r,
p, std_err = stats.linregress(x, y)
print(r)
Das Ergebnis: 0,013 zeigt eine sehr schlechte Beziehung an und sagt uns, dass dieser Datensatz nicht für eine lineare Regression geeignet ist.