[PYTHON] Ich entschied mich für eine einfache Regressionsanalyse manuell-1-

Einführung

Um das Verständnis der Theorie der Regressionsanalyse zu vertiefen, erstellen wir manuell ein analytisches Modell, ohne die sklearn-Bibliothek zu verwenden, die eine leistungsstarke Waffe der Regressionsanalyse darstellt.

Was ist eine Regressionsanalyse?

Prognostizieren Sie den Wert der Zielvariablen (Ausgabedaten) anhand der erklärenden Variablen (Eingabedaten). Dieses Mal betrachten wir den Fall einer einfachen erklärenden Variablen für die theoretische Berechnung. (Einfache Regression)

Vorbereitung in Python

▼ Daten vorbereiten

import numpy as np
import pandas as pd
from pandas import DataFrame

data_age = np.array([20,20,28,38,33,34,22,37,
                     26,21,22,39,31,29,38,35,
                     32,27,30])

data_salary = np.array([410,500,480,710,630,600,430,
                        690,500,410,490,800,550,550,
                        700,700,650,540,600])

data = DataFrame({'Alter':data_age,
                  'Einkommen':data_salary})

Datenbeziehung

Das folgende Diagramm kann aus dem obigen Datensatz erhalten werden.

image.png

Aus dieser Grafik werde ich versuchen, die Beziehung zwischen Alter und Einkommen mit einer linearen Gleichung auszudrücken. (Bringen Sie es gewaltsam in die lineare Formel, aber es ist tatsächlich eine kompliziertere Formel.)

Nehmen wir vorerst an, dass das vorhergesagte Alter x und das Einkommen y ist und es als "y = ax + b" ausgedrückt wird. Beachten Sie, dass die Werte von a und b nicht einfach bestimmt werden können, da hier mehrere Daten vorhanden sind. Um die vernünftigsten Werte für a und b zu berechnen, verwenden wir die Idee des mittleren quadratischen Fehlers. Nehmen Sie insbesondere die Differenz zwischen dem Einkommen y, das für jede Daten `` `y = ax + bvorhersagt (zurückgibt).y - 410= 20a + b - 410 y - 500= 20a + b - 500 y - 480= 28a + b - 480``` ... Transformiert mit. Das Quadrat der Differenz zwischen den Werten der tatsächlichen Daten und den vorhergesagten Daten wird durch die vorbereiteten Daten (N) addiert, und der Durchschnittswert ist der durchschnittliche quadratische Fehler Q (a, b).

Q(a,b) = \frac{1}{N}\sum_{k=0}^{n-1}(ax_k + b - y_k)

Dieses `` `y_k``` ist das Einkommen als tatsächliche Daten. Wir werden versuchen, die Beziehung zwischen Alter und Einkommen zu linearisieren, indem wir a und b finden, die den durchschnittlichen quadratischen Fehler Q (a, b) minimieren.

Diagramm des durchschnittlichen quadratischen Fehlers

Um a und b zu finden, die Q (a, b) minimieren, geben Sie zunächst verschiedene Werte in a und b ein und schreiben Sie einen Umriss des durchschnittlichen quadratischen Fehlers.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

#Jeder a,vorbereiten b
a = np.linspace(-200,200,100)
b = np.linspace(-500,500,100)

#Einfach eine Kombination aus a und b zu machen
#Erweitern Sie jedes zu einem zweidimensionalen Array(Muss eine gekrümmte Oberfläche zeichnen)
A,B = np.meshgrid(a,b)

#Funktion zur Berechnung von Q.
def calc_Q(x,y,a,b):
    result = (a * x + b - y)**2
    return np.mean(result)

#Array für Q.(Mit 0 initialisieren)
Q = np.zeros([len(a),len(b)])

#a,Berechnen Sie Q für alle Kombinationen von b
for j in range(100):
    for k in range(100):
        Q[j,k] = calc_Q(data_age,data_salary,a[j],b[k])

#Schreiben Sie einen Umriss eines 3D-Diagramms
fig = plt.figure(figsize=[10,10])
ax = fig.add_subplot(111,projection="3d")
ax.view_init(45,10)
ax.set_xlabel("a",size=14,color="blue")
ax.set_ylabel("b",size=14,color="blue")
ax.set_zlabel("Q",size=14,color="blue")
ax.plot_surface(A,B,Q,color="red")
plt.show()

image.png

Aus dem Diagramm ist ersichtlich, dass der Wert von Q [a, b] das Minimum in der Nähe von a = 50 bis 200, b = 0 ist. Aus diesem Diagramm ist ersichtlich, dass es wahrscheinlich einen Mindestwert gibt. Daher wird die Methode des plötzlichen Abstiegs (Berechnungsmethode des Minimalwerts unter Verwendung der Steigung) verwendet, um die Werte von a und b zu finden, wenn der Wert von Q [a, b] minimiert wird.

Fortsetzen.

Referenz

Einführung in die numerische Python-Berechnung https://python.atelierkobato.com/mse/

Recommended Posts

Ich entschied mich für eine einfache Regressionsanalyse manuell-1-
Ich habe versucht, einen einfachen Kredit-Score mit logistischer Regression zu erstellen.
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Einfache Regressionsanalyse mit Python
[Einführung in Data Scientists] Deskriptive Statistik und einfache Regressionsanalyse ♬
Ich habe mit PyQt einen einfachen Texteditor erstellt
Erste einfache Regressionsanalyse in Python
MacBookPro-Setup Schließlich möchte ich eine Neuinstallation durchführen
Algorithmus für maschinelles Lernen (Einzelregressionsanalyse)
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
Ich möchte ○○ mit Pandas machen
Einfache Implementierung einer Regressionsanalyse mit Keras
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich möchte Affenpatches nur teilweise sicher mit Python machen
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Möchten Sie ein einfaches Klassifizierungsproblem lösen?
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Ich möchte in der Einschlussnotation drucken
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Ich möchte eine Python-Umgebung erstellen
Ein einfaches IDAPython-Skript zum Benennen einer Funktion
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Ich habe eine Web-API erstellt
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht, die multiple Regressionsanalyse anhand konkreter Beispiele so einfach wie möglich zu erklären.
Ich möchte maschinelles Lernen auch ohne Server durchführen - Time Series Edition -
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
Ich möchte Dunnetts Test in Python machen
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte einen DataFrame in MSSQL einfügen
[Python] Was ich getan habe, um Unit Test zu machen
Ich habe CPython (ternärer Operator) eine Funktion hinzugefügt.
Ich möchte mit Python ein Fenster erstellen
Ich möchte ein Spiel mit Python machen
Ich möchte keinen Codierungstest machen
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Beispiel zum Zeichnen einer einfachen Uhr mit ebiten
Ich las "Wie man ein Hacking Lab macht"
Ich habe ein Skript geschrieben, um ein WordPress-Plug-In hochzuladen
Ich möchte pyenv + pipenv auch unter Windows machen
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte leicht einen leckeren Laden finden
Ich möchte mit Python in eine Datei schreiben
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe einen einfachen RSS-Reader ~ C Edition ~ gemacht
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich möchte eine Django-App auf Heroku hochladen
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
Ein Anfänger versuchte, eine Strichzeichnung mit einem Kettenmesser zu färben. Ich konnte es schaffen.