Nichtlineare Funktionsmodellierung in Python

Dinge die zu tun sind

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 image

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.

Was zu verwenden

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

Vorgehensweise Versuchen Sie es zunächst mit einer linearen Funktion

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)

image

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="")

image

Die Anpassungsmethode ist OLS (Minimum Square Error Method).

Methodenversuch mit einer nichtlinearen Funktion

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)

image

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="")

image

Es passt so.

Dieser Artikel auch

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

Nichtlineare Funktionsmodellierung in Python
Uplift-Modellierung in Python
Erstellen Sie eine Funktion in Python
Verwenden Sie die Rückruffunktion in Python
ntile (Dezil) -Funktion in Python
Zeichne die Yin-Funktion in Python
Sofortige Funktion (Lüge) in Python
Python-Funktion ①
[Python] -Funktion
Python-Funktion ②
Implementieren Sie die Funktion power.prop.test von R in Python
Definition des Funktionsargumenttyps in Python
Inklusive Notation im Argument der Python-Funktion
Schreiben Sie die AWS Lambda-Funktion in Python
Messen Sie die Ausführungszeit von Funktionen in Python
Funktionssynthese und Anwendung in Python
Quadtree in Python --2
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Python-Aufzählungsfunktion
Metaanalyse in Python
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Unittest in Python
Implementiert in Python PRML Kapitel 7 Nichtlineare SVM
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Python> Funktion> Schließen
Zwietracht in Python
[Python] Generatorfunktion
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
Python> Funktion> Innere Funktion
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Dualität in der Funktion
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Python-Funktionsdekorateur
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python