Wir werden eine einfache Regressionsgleichung finden, die nur Numpy und Pandas verwendet, die für grundlegende numerische Berechnungen erforderlich sind.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("https://raw.githubusercontent.com/karaage0703/machine-learning-study/master/data/karaage_data.csv")
print(df.head())
Das Ziel der einfachen Regressionsanalyse war es, die beiden in der Regressionsgleichung enthaltenen Konstanten zu finden: den Regressionskoeffizienten $ a $ und den Abschnitt $ b $.
Zu diesem Zeitpunkt werden die Konstanten $ a $ und $ b $ bestimmt, um eine genauere einfache Regressionsgleichung zu erhalten, so dass der Gesamtfehler, dh der Rest $ y- \ hat {y} $, so klein wie möglich ist. Ich muss.
Betrachten Sie diese ** Definition von Residuen **.
Wir werden die einfache Regressionsgleichung basierend auf der Methode der kleinsten Quadrate lösen.
mean_x = df['x'].mean()
mean_y = df['y'].mean()
Die Abweichung ist die Differenz zwischen dem numerischen Wert und dem Durchschnittswert jedes Einzelnen. Berechnen Sie $ x_ {i} - \ bar {x} $ für die Variable $ x $ und $ y- \ bar {y} $ für die Variable $ y $. Jede Variable wird für die Anzahl der Daten berechnet.
#Abweichung von x
dev_x = []
for i in df['x']:
dx = i - mean_x
dev_x.append(dx)
#Abweichung von y
dev_y = []
for j in df['y']:
dy = j - mean_y
dev_y.append(dy)
Berechnen Sie die Varianz anhand der in (4) erhaltenen Abweichung. Die Varianz ist der Durchschnitt der Quadrate der Abweichungen, dh der Quadrate für jede Abweichung und der Summe der Abweichungen geteilt durch den numerischen Wert (Anzahl der Daten-1).
#Summe der Abweichungsquadrate
ssdev_x = 0
for i in dev_x:
d = i ** 2
ssdev_x += d
#Verteilt
var_x = ssdev_x / (len(df) - 1)
Die Kovarianz $ s_ {xy} $ ist einer der Indizes, die die Stärke der Beziehung zwischen zwei Variablen anzeigen, und wird durch die folgende Gleichung definiert.
#Summe der Abweichungen
spdev = 0
for i,j in zip(df['x'], df['y']):
spdev += (i - mean_x) * (j - mean_y)
#Mitverteilt
cov = spdev / (len(df) - 1)
Hier ist die Formel zum Ermitteln des Regressionskoeffizienten nach der Methode der kleinsten Quadrate.
a = cov / var_x
Durch Transformieren der einfachen Regressionsgleichung $ y = ax + b $ und Setzen von $ b = y -ax $ werden der Durchschnittswert $ \ bar {x}, \ bar {y} $ in ⑶ und der Regressionskoeffizient in ⑺ erhalten Ersetzen Sie $ a $.
b = mean_y - (a * mean_x)
** Wie oben erwähnt, wurde die einfache Regressionsgleichung nach der Formel der Methode der kleinsten Quadrate erhalten. ** ** ** ** Es stimmt mit dem Berechnungsergebnis überein, das mit der maschinellen Lernbibliothek scikit-learn erhalten wurde. Daher werde ich auch die Bestätigung des Entscheidungskoeffizienten selbst berechnen. ** ** **
Verwenden Sie die Regressionsgleichung, um Vorhersagewertdaten zu erstellen und deren Varianz zu ermitteln. Wie viel Prozent der Varianz des gemessenen Wertes $ y $, dh wie viel kann die ursprüngliche Variation $ y $ erklärt werden?
#Datenerstellung des vorhergesagten Wertes z
df['z'] = (a * df['x']) + b
print(df)
#Vorhersagewert z Varianz
ssdev_z = 0
for i in df['z']:
j = (i - df['z'].mean())**2
ssdev_z += j
var_z = ssdev_z / (len(df) - 1)
print("Voraussichtliche Wertverteilung:", var_z)
#Dispersion des Messwertes y
ssdev_y = 0
for i in dev_y:
j = i ** 2
ssdev_y += j
var_y = ssdev_y / (len(df) - 1)
print("Dispersion des Messwertes y:", var_y)
#Entscheidungskoeffizient
R = var_z / var_y
print("Entscheidungsfaktor R.:", R)
Es wurde bestätigt, dass der Bestimmungskoeffizient auch mit dem Berechnungsergebnis durch Scikit-Learn oben übereinstimmt.
plt.plot(x, y, "o") #Streudiagramm
plt.plot(x, z, "r") #Gerade zurückgeben
plt.show()
Bisher haben Sie die Algorithmen für die einfache Regressionsanalyse gelernt. In der realen Welt gibt es jedoch nur wenige Fälle, in denen ein bestimmtes Phänomen nur durch einen Faktor erklärt werden kann. Vor dem Hintergrund eines bestimmten Phänomens sind verschiedene Faktoren mehr oder weniger gleichzeitig miteinander verflochten. Als Nächstes lernen Sie eine multiple Regressionsanalyse, die sich mit drei oder mehr Variablen befasst.