Ich werde erklären, wie der beobachtete Wert (Satz von x, y) mit der in Python angegebenen Funktion angenähert und modelliert wird.
Bilddiagramm: Ich werde so etwas tun
Das Einpassen von Funktionen ist die Grundlage der Modellierung. Wenn es sich um eine lineare Näherung handelt, können Sie normalerweise das lineare Regressionspaket verwenden. Hier erklären wir, wie Sie zu jeder von Ihnen angegebenen Funktion passen, einschließlich nichtlinearer Funktionen.
Verwenden Sie das Modul "curve_fit" im Python-Scipy-Paket. Genauer gesagt ist es Teil des Moduls scipy.optimize.
Laden Sie zunächst das Paket, das dieses Mal verwendet werden soll.
import.py
##Was für die Montage zu verwenden
from scipy.optimize import curve_fit
import numpy as np
##Was zur Veranschaulichung zu verwenden
import seaborn as sns
import matplotlib.pyplot as plt
numpy wird verwendet, um Exponentialfunktionen darzustellen. Wenn Sie mit der Illustrationsmethode von Seaborn nicht vertraut sind, klicken Sie bitte hier.
Schöne Grafikzeichnung mit Python http://qiita.com/hik0107/items/3dc541158fceb3156ee0
Mal sehen, wie man die Funktion anpasst Zunächst werde ich eine lineare Näherung für die Armnivellierung versuchen.
Erstellen Sie die einzustellenden Beobachtungsdaten wie folgt. Bereiten Sie eine Form nahe einer geraden Linie vor, da sie sich linear annähert.
linear.py
list_linear_x = range(0,20,2)
array_error = np.random.normal(size=len(list_linear_x))
array_x = np.array(list_linear_x)
array_y = array_x + array_error ##Füllen Sie y aus=Ich mache holprige Daten, indem ich der geraden Linie von x einen Fehlerterm hinzufüge
Werfen wir einen Blick auf die tatsächlich abgeschlossenen Daten.
linear.py
sns.pointplot(x=array_x, y=array_y, join=False)
Lassen Sie uns dies nun in Form von Y = ax + b anpassen. Hier kommt curve_fit ins Spiel.
fitting.py
##Definieren Sie den Funktionsausdruck, den Sie als Funktion anpassen möchten
def linear_fit(x, a, b):
return a*x + b
param, cov = curve_fit(linear_fit, array_x, array_y)
Nur das. Die Schätzergebnisse der Parameter a und b werden im Listenformat im ersten Rückgabewertparameter gespeichert. Der Inhalt von curve_fit wird geschrieben als (Funktion zum Anpassen, x zum Anpassen, y zum Anpassen). Wenn das 2./3. Argument in der Listeneinschlussliste beschrieben ist, ist es möglich, den Fall mehrerer Variablen zu behandeln.
Lassen Sie uns das Ergebnis der Anpassung sehen.
fitting.py
array_y_fit = param[0] * array_x + param[1]
sns.pointplot(x=array_x, y=array_y, join=False)
sns.pointplot(x=array_x, y=array_y_fit, markers="")
Die Anpassungsmethode ist OLS (Minimum Square Error Method).
Als nächstes versuchen wir eine Näherung mit einer etwas komplizierteren nichtlinearen Funktion. Betrachten Sie beispielsweise eine Funktion wie f (x) = b * exp (x / (a + x)).
nonlinear.py
list_y = []
for num in array_x:
list_y.append( param[1] * np.exp( num /(param[0] + num) ) + np.random.rand() )
array_y= np.array(list_y)
sns.pointplot(x=array_x, y=array_y, join=False)
Ich habe solche Daten. Irgendwie scheint eine nichtlineare Funktion des konvergierenden Typs besser zu passen als eine lineare.
Lassen Sie uns dies nun in die Form f (x) = b * exp (x / (a + x)) einpassen.
fitting.py
def nonlinear_fit(x,a,b):
return b * np.exp(x / (a+x) )
param, cov = curve_fit(nonlinear_fit, array_x, array_y)
draw.py
list_y = []
for num in array_x:
list_y.append( param[1] * np.exp( num /(param[0] + num) ))
sns.pointplot(x=array_x, y=array_y, join=False)
sns.pointplot(x=array_x, y=np.array(list_y), markers="")
Es passt so.
Eine rudimentäre Zusammenfassung der Datenmanipulation in Python Pandas http://qiita.com/hik0107/items/d991cc44c2d1778bb82e
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten http://qiita.com/hik0107/items/0bec82cc09d0e05d5357
Wenn Sie sich für Datenwissenschaftler interessieren, schauen Sie sich zuerst hier um, eine Zusammenfassung der Literatur und Videos http://qiita.com/hik0107/items/ef5e044d2f47940ba712
Recommended Posts