[PYTHON] Einfache Regressionsanalyse nach der Methode der kleinsten Quadrate

Die lineare Analyse nach der Methode der kleinsten Quadrate wird als multiple Regressionsanalyse für mehrere Variablen und einfache Regressionsanalyse für eine Variable bezeichnet. Einfache Regressionsanalyse, dh die Gleichung $ y = ax + b $ für eine lineare Funktion.

Da es sich um eine Regressionsanalyse handelt, möchten wir eine gerade Linie finden, die passt, dh wir möchten die optimalen Werte von $ a $ und $ b $ finden. x und y werden als Daten angegeben.

Ich untersuche, wie es geht, und es gibt verschiedene Dinge, wie die Verwendung einer Bibliothek wie Scicit-Learn, das Berechnen der Kovarianz usw. und das einfache Lösen, aber da es sich um eine Methode mit minimalen Quadraten handelt, kann dies leicht durchgeführt werden? Ich dachte. Versuch es.

Ich möchte $ a, b $ als Vektor kennen

  A = \left(
    \begin{array}{c}
      a \\
      b \\
    \end{array}
  \right)

Schreiben. Die Datengruppe $ X und Y $ kann auch durch einen Vektor dargestellt werden, aber da wir sie hier in Form einer Matrix (simultane Gleichungen) erstellen möchten, wird $ X $ wie folgt geschrieben.

  X = \left(
    \begin{array}{cc}
      x_1 & 1\\
      x_2 & 1\\
      \vdots \\
      x_n & 1
    \end{array}
  \right)

Der Punkt ist zu sagen. Mit anderen Worten, die simultanen Gleichungen

XA = Y \\  
\left(
    \begin{array}{cc}
      x_1 & 1\\
      x_2 & 1\\
      \vdots \\
      x_n & 1
    \end{array}
  \right)\left(
    \begin{array}{c}
      a \\
      b \\
    \end{array}
  \right)
=
\left(\begin{array}{c}
      y_1\\
      y_2\\
      \vdots \\
      y_n
    \end{array}\right)

nicht wahr. Die Dimensionsanalyse zeigt, dass N × 2 ≤ 2 × 1 = N × 1 ist. Wenn Sie danach die verallgemeinerte inverse Matrix $ X ^ \ dagger $ verwenden

  A = X^\dagger Y

Kann auf einen Schlag gelöst werden.

Dies erleichtert die Implementierung. Unten ist der Testcode.

import numpy as np
import random

def linear_regression():

    #Machen Sie zuerst die Antwort
    a = 2
    b = 10
    x_true = np.arange(0.0,50.0,1.0)
    y_true = a * x_true + b


    #Erstellen Sie Daten, indem Sie zufällig vom richtigen Antwortwert abweichen
    xd = np.zeros(len(x_true))
    yd = np.zeros(len(y_true))
    for i in range(len(xd)):
        yd[i] = y_true[i] + 100*(random.randint(-10,10)/100)
    for i in range(len(xd)):
        xd[i] = x_true[i] + 10*(random.randint(-10,10)/100)
    print(xd)
    print(yd)

    #Datengruppenmatrix
    X = np.c_[xd, np.linspace(1,1,len(xd))]
    print(X)

    #Minimum-Square-Methode: Multiplizieren Sie einfach die verallgemeinerte inverse Matrix von links
    A = np.linalg.pinv(X) @ yd
    y_est = x_true * A[0] + A[1]

    import matplotlib.pyplot as plt
    fig, ax = plt.subplots()
    ax.scatter(xd, yd, label='data')
    ax.plot(x_true,y_true, label='true')
    ax.plot(x_true,y_est, label='linear regression')
    ax.legend()
    ax.grid()
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    fig.tight_layout()
    plt.show()

    return

if __name__ == '__main__' :
    linear_regression()

Das Ergebnis ist wie folgt: test.png

wahr ist die ursprüngliche gerade Linie. Da der Wert von dort zufällig geändert wird, stimmt er nicht überein, scheint aber zu stimmen. Wenn dies der Fall ist, scheint es, dass eine Regressionsanalyse leicht durchgeführt werden kann, ohne auf Bibliotheken angewiesen zu sein.

Recommended Posts

Einfache Regressionsanalyse nach der Methode der kleinsten Quadrate
Methode der Regressionsanalyse
[TensorFlow] Minimale quadratische lineare Regression durch Gradientenabstiegsmethode (steilste Abstiegsmethode)
Berechnung der Homographiematrix nach der Methode der kleinsten Quadrate (DLT-Methode)
Minimum-Quadrat-Methode (Dreiecksmatrixberechnung)
Minimum-Square-Methode und wahrscheinlichste Schätzmethode (Vergleich durch Modellanpassung)
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Poisson-Regressionsanalyse
Annäherung nach der Methode der kleinsten Quadrate eines Kreises mit zwei festen Punkten
Clustering und Hauptkomponentenanalyse nach der K-Means-Methode (Anfänger)
Grundlagen der Regressionsanalyse
Regressionsanalyse mit Python
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse