Maschinelles Lernen - Lineare Regression

Rückregression

Wenn Sie versuchen, Beziehungen zwischen Variablen zu finden, wird der Begriff „Rückregression“ (regression) verwendet.

In Maschinenlernen und statistischer Modellierung wird diese Beziehung zur Vorhersage der Ergebnisse zukünftiger Ereignisse verwendet.

Lineare Regression

Die lineare Regression zeichnet eine Linie zwischen allen Datenpunkten, die die Beziehung zwischen den Datenpunkten verwenden.

Diese Linie kann verwendet werden, um zukünftige Werte vorherzusagen.


In der Maschinenlernen ist die Vorhersage der Zukunft sehr wichtig.

Arbeitsweise

Python bietet einige Methoden, um die Beziehung zwischen Datenpunkten zu finden und die lineare Regressionslinie zu zeichnen. Wir werden Ihnen zeigen, wie Sie diese Methoden verwenden können, anstatt durch mathematische Formeln.

Im folgenden Beispiel bedeutet die x-Achse das Alter des Autos und die y-Achse die Geschwindigkeit. Wir haben die Alter und Geschwindigkeit von 13 Autos, die durch eine Mautstelle gefahren sind, aufgeschrieben. Lassen Sie uns sehen, ob die gesammelten Daten für die lineare Regression verwendet werden können:

Beispiel

Zuerst zeichne das Streudiagramm:

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:


Führen Sie ein Beispiel aus

Beispiel

Importiere scipy und zeichne die lineare Regressionslinie:

import matplotlib.pyplot as plt
von 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:


Führen Sie ein Beispiel aus

Beispiel-Erklärung

Importiere erforderliche Module:

import matplotlib.pyplot as plt
von scipy import stats

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

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ühre ein Verfahren aus, das einige wichtige Schlüsselwerte der linearen Regression zurückgibt:

Slope, intercept, r, p, std_err = stats.linregress(x, y)

Erstelle eine, die verwendet Steigung und Schnittpunkt Die Funktion für Werte gibt neue Werte zurück. Dieser neue Wert stellt die Position dar, an der der entsprechende x-Wert auf der y-Achse platziert wird:

def myfunc(x):
  return slope * x + intercept

Führe jede Wert des x-Arrays durch die Funktion. Dies erzeugt ein neues Array, bei dem die y-Achse neue Werte hat:

mymodel = list(map(myfunc, x))

Zeichne das ursprüngliche Streudiagramm:

plt.scatter(x, y)

Zeichne die lineare Regressionslinie:

plt.plot(x, mymodel)

Zeige Diagramm:

plt.show()

Quadratkorrelationskoeffizient

Es ist wichtig zu wissen, wie gut die Werte auf der x-Achse und die Werte auf der y-Achse miteinander in Beziehung stehen, da lineare Regression ohne Beziehung nichts vorherzusagen kann.

Diese Beziehung wird durch einen Wert gemessen, der als Quadratkorrelationskoeffizient (r²) bezeichnet wird.

Der Wert des Quadratkorrelationskoeffizienten (r²) liegt zwischen 0 und 1, wobei 0 unkorreliert und 1 100% korreliert bedeutet.

Der Python- und Scipy-Modul berechnen diesen Wert für Sie, alles, was Sie tun müssen, ist die x- und y-Werte zu liefern:

Beispiel

Wie gut passen meine Daten in der linearen Regression?

von 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)

Führen Sie ein Beispiel aus

Anmerkung:Das Ergebnis -0,76 zeigt, dass eine Art von Beziehung besteht, aber nicht eine perfekte Beziehung, aber es zeigt, dass wir lineare Regression in zukünftigen Vorhersagen verwenden können.

Vorhersage zukünftiger Werte

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

Beispiel: Lassen Sie uns versuchen, die Geschwindigkeit eines Autos mit 10 Jahren Alter vorherzusagen.

Dafür benötigen wir dasselbe wie im obigen Beispiel: myfunc() Funktion:

def myfunc(x):
  return slope * x + intercept

Beispiel

Vorhersage der Geschwindigkeit eines Autos mit 10 Jahren Alter:

von 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)

Führen Sie ein Beispiel aus

Die Vorhersagegeschwindigkeit beträgt 85,6, und wir können dies auch aus dem Diagramm ablesen:


Schlechte Anpassung?

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

Beispiel

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

import matplotlib.pyplot as plt
von 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:


Führen Sie ein Beispiel aus

und r-squared-Wert?

Beispiel

Sie sollten einen sehr niedrigen r-squared-Wert erhalten haben.

import numpy
von 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)

Führen Sie ein Beispiel aus

Ergebnis: 0,013 zeigt eine sehr schlechte Beziehung und teilt uns mit, dass der Datensatz nicht für lineare Regression geeignet ist.