Regressionsanalyse mit Python

Hallo, das ist Motty. Dieses Mal habe ich die Regressionsanalyse mit Python beschrieben.

Regression

Die Regressionsanalyse ist eine Methode zur Vorhersage der Zieldaten unter Verwendung der vorliegenden Daten. Zu diesem Zeitpunkt wird die Struktur der quantitativen Beziehung auf die Daten angewendet (Regressionsmodell). Wenn das Regressionsmodell eine gerade Linie ist, wird es als Regressionslinie bezeichnet, und wenn die Funktion n-ter Ordnung durch Polypoly-Regression angewendet wird, wird sie als Regressionskurve bezeichnet.

So bestimmen Sie das Modell

Die Methode der kleinsten Quadrate wird verwendet, um das angepasste Modell zu bewerten. Eine Methode zur Auswahl eines Koeffizienten, der die Summe der Quadrate der Residuen minimiert, wenn die durch Messung erhaltenen Daten mit einer Funktion wie einer geraden Linie angenähert werden.

Bewertungsmethode

Verwenden Sie den Bestimmungskoeffizienten. Je höher diese Zahl ist, desto besser passt das Regressionsmodell an die tatsächlichen Daten an. Wenn der beobachtete Wert = y und der geschätzte Wert durch die Funktion f ist, wird er durch die folgende Gleichung ausgedrückt.  2020-04-06 11.20.44.png

Wenn das Modell perfekt zu den Daten passt, beträgt der Wert des Entscheidungsfaktors 1.

Rückkehr

Für Daten mit Rauschen, die zu jeder der linearen, quadratischen und kubischen Funktionen hinzugefügt werden Ich habe eine Regressionslinie angewendet.

LinearRegression.py


import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

#sklearn
from sklearn.linear_model import LinearRegression as reg
from sklearn.metrics import r2_score

#Daten bezogen
CI =["black","red","blue","yellow","green","orange","purple","skyblue"]#ColorIndex

N = 30 #Anzahl von Beispielen
x = np.linspace(1,10,N)
y1 = x *5 + np.random.randn(N)*5
y2 =  2*(x-2)*(x-7) +   np.random.randn(N)*5
y3 =  3*(x-1)*(x-4)*(x-7) +  np.random.randn(N)*10

x = x.reshape([-1,1])
y1 = y1.reshape([-1,1])
y2 = y2.reshape([-1,1])
y3 = y3.reshape([-1,1])

#Lernen
clf1, clf2, clf3 = reg(),reg(),reg()
clf1.fit(x,y1),clf2.fit(x,y2),clf3.fit(x,y3)

#x Voraussichtlicher Wert für Daten
y1_pred,y2_pred,y3_pred = clf1.predict(x),clf2.predict(x),clf3.predict(x)

#Zeichnung
fig = plt.figure(figsize = (15,15))
ax1,ax2,ax3 = fig.add_subplot(3,3,1),fig.add_subplot(3,3,2),fig.add_subplot(3,3,3)
#Data
ax1.scatter(x,y1,c = CI[1],label = "R^2 = {}".format(r2_score(y1,y1_pred)))
ax2.scatter(x,y2,c = CI[2],label = "R^2 = {}".format(r2_score(y2,y2_pred)))
ax3.scatter(x,y3,c = CI[3],label = "R^2 = {}".format(r2_score(y3,y3_pred)))
ax1.legend(),ax2.legend(),ax3.legend()
#Gerade zurückgeben
ax1.plot(x,clf1.predict(x), c = CI[0])
ax2.plot(x,clf2.predict(x), c = CI[0])
ax3.plot(x,clf3.predict(x), c = CI[0])

fig.suptitle("RinearLegression", fontsize = 15)
ax1.set_title("1")
ax2.set_title("2")
ax3.set_title("3")

Es überrascht nicht, dass die Ergebnisse zeigen, dass die gerade Linienanpassung für lineare Funktionen am besten ist.

 2020-04-06 13.24.26.png

Polymere Regression

Es kann angebracht sein, eine Regressionskurve wie eine Funktion mit mehreren Ordnungen auf einen Datensatz wie 2 oder 3 anzuwenden.

polynomial.py



import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.linear_model import LinearRegression as reg
from sklearn.metrics import r2_score
from sklearn.preprocessing import PolynomialFeatures as PF


#Daten bezogen
CI =["black","red","blue","yellow","green","orange","purple","skyblue"]#ColorIndex
N = 10 #Anzahl von Beispielen
x = np.linspace(1,10,N)
y3 =  3*(x-1)*(x-4)*(x-7) +  np.random.randn(N)*10
x = x.reshape([-1,1])
y3 = y3.reshape([-1,1])


#Lernen
clf = reg()
clf.fit(x,y3)
#Auftrag
DegreeSet =[1,2,3] 
for dg in DegreeSet:
    
    pf = PF(degree = dg, include_bias = False)
    x_poly = pf.fit_transform(x)
    poly_reg = reg()
    poly_reg.fit(x_poly,y3)
    polypred = poly_reg.predict(x_poly)

    #x Voraussichtlicher Wert für Daten
    pred = clf.predict(x)
    #Zeichnung
    plt.scatter(x,y3,c = CI[dg], label = "R^2={}".format(r2_score(y3,polypred)))
    plt.plot(x, polypred,c = CI[0])
    plt.legend()
    plt.title("Regression")
    plt.show()

Infolgedessen passt das Modell gut und der Bestimmungskoeffizient ist jedes Mal hoch, wenn die Reihenfolge auf 1, 2 und 3 erhöht wird.

 2020-04-06 15.06.49.png

Soll ich die Bestellung erhöhen?

Je höher die Reihenfolge, desto aussagekräftiger wird das Modell und desto besser passt es in die Daten. Je höher die Reihenfolge, desto geringer ist die Generalisierungsleistung (Überlernen). Um ein solches Problem zu lösen, ist es ratsam, eine einfache lineare Regression, AIC oder andere Strafen zu verwenden.

(Als wir die Anpassung der Daten an das Modell auf das AIC-Minimierungsproblem reduziert haben Wie Sie der Formel entnehmen können, werden Strafen für die Erhöhung der Reihenfolge festgelegt und die optimale Reihenfolge kann ausgewählt werden. )

Da sklearn nicht über die richtige Bibliothek verfügte, plane ich, das Modell mit meinem eigenen AIC als Fortsetzung zu bewerten.

Recommended Posts

Regressionsanalyse mit Python
Einfache Regressionsanalyse mit Python
Erste einfache Regressionsanalyse in Python
Assoziationsanalyse in Python
Mehrfacher Regressionsausdruck in Python
Axialsymmetrische Spannungsanalyse mit Python
2. Multivariate Analyse in Python 1-1. Einfache Regressionsanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 2-1. Multiple Regressionsanalyse (Scikit-Learn)
Gehirnwellenanalyse mit Python: Python MNE-Tutorial
Planare Skelettanalyse in Python (2) Hotfix
Einfache Implementierung einer Regressionsanalyse mit Keras
Logistische Regressionsanalyse Selbst erstellt mit Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Poisson-Regressionsanalyse
N-Gramm in Python
Programmieren mit Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Methode der Regressionsanalyse
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Lineare Regression in Python (Statmodelle, Scikit-Learn, PyMC3)
Online lineare Regression in Python (Robuste Schätzung)
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
Restanalyse in Python (Ergänzung: Cochrane-Regeln)
[Statistischer Test 2. Klasse / quasi 1. Klasse] Regressives Analysetraining mit Python (2)
[Statistischer Test 2. Klasse / quasi 1. Klasse] Regressives Analysetraining mit Python (1)
2. Multivariate Analyse in Python 2-3. Multiple Regressionsanalyse [COVID-19-Infektionsrate]
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
Clustertext in Python