Scipy optymalizuj curve_fit

Scipy optymalizuj curve_fit
Funkcja mapowania curve_fit () umożliwia elastyczność i oferuje kontrolę w celu zdefiniowania typu krzywej, w której przeprowadzany jest proces optymalizacji w celu znalezienia określonych zoptymalizowanych parametrów funkcji. Metoda Curve Fit () dostarczona przez SCIPY zostanie omówiona w tym artykule. Następnie, za pomocą przykładów, zobaczymy, jak korzystać z funkcji Curve Fit ().

Pod koniec tego samouczka odkryjemy, jak wykonać dopasowanie krzywej w Pythonie i jak dopasowanie krzywej wykorzystuje zoptymalizowane parametry w funkcji, która mapuje przykłady wejściowe do wyjścia. Ale najpierw zapoznajmy się z podstawami Curve_fit ().

Python Scipy optymalizuj funkcję dopasowania krzywej używanej?

Funkcja dopasowania krzywej Python Scipy jest szeroko stosowana do uzyskania najlepiej dopasowanych parametrów. Funkcja curve_fit () to funkcja optymalizacji, która jest używana do znalezienia zoptymalizowanego zestawu parametrów dla określonej funkcji, która idealnie pasuje do dostarczonego zestawu danych.

Funkcja Curve Fit () w Scipy to biblioteka open source, używana do dopasowania krzywych za pomocą nieliniowych najmniejszych kwadratów. Jako argument, curve_fit () przyjmuje te same dane wejściowe, dane wyjściowe i nazwę funkcji mapowania, która ma być zastosowana. Funkcja mapowania powinna zaakceptować próbki danych wejściowych, a także zestaw parametrów.

W przeciwieństwie do nadzorowanego uczenia się, funkcja dopasowania krzywej wymaga zdefiniowania funkcji, które doskonale mapują dane wejściowe na wyjścia. Funkcja mapowania może być po prostu linią prostą, taką jak regresja liniowa lub zakrzywiona linia jak regresja wielomianowa lub może być wszystko inne.

Składnia Python Scipy.optymalizować.curve_fit ()

Składnia Scipy Curve () jest podana poniżej.

# Scipy.optymalizować.curve_fit (f, x-data, y-data, sigma = brak, p0 = brak)

Curve_fit () przyjmuje wymagane parametry i niektóre opcjonalne parametry. „F” jest funkcją modelu, F (A,…). Pierwszym argumentem, który wymagany musi być zmienna niezależna, a pozostałe argumenty muszą być parametry do dopasowania.

Parametr „x-data” jest parametrem podobnym do tablicy, który jest zmienną niezależną, w której mierzone są dane. „Y-data” to kolejny parametr podobny do tablicy, który jest zmienną zależną znaną również jako wyjście funkcji.

„Sigma” jest parametrem opcjonalnym, który określa niepewność w „y-data”. Wartość „sigma” może być po prostu prosta „none”, „sekwencja długości M lub„ tablica MXM ”. Parametr „p0” jest początkowym odgadnięciem długości dla parametrów. Jest to opcjonalny parametr, a zatem, jeśli nie jest dostarczony, wartość początkowa wyniesie 1.

Funkcja curve_fit () zwróci dwie wartości; Popt i PCOV. „Popt” to tablica reprezentująca optymalne wartości dla parametrów w celu zminimalizowania suma kwadratowych resztek. Jednocześnie „PCOV” jest tablicą 2D, która reprezentuje szacunkową kowariancję „Popt”.

Ponadto rodzi trzy wyjątki; Błąd wartości, błąd środowiska wykonawczego i ostrzeżenie optymalizacyjne. „Błąd wartości” jest wyświetlany, gdy X-DATA lub Y-DATA zawiera NANS lub w przypadku zastosowania dowolnej niezgodnej metody.

„Błąd środowiska wykonawczego” jest rzucany, gdy minimalizacja najmniejszych kwadratów się nie powiedzie. A „ostrzeżenie optymalizacyjne” jest podniesione, gdy nie można oszacować kowariancji parametru.

Przykład 1:

W pierwszym przykładzie narysujemy linię prostą, która pasuje do naszych dostarczonych danych do reprezentowania wyrażenia modelu liniowego. Po zaimportowaniu wymaganych bibliotek Python użyliśmy równania RES2 = One*Res1+, aby utworzyć zestaw danych 30 punktów.

Aby zestaw danych był bardziej realistyczny, dodaliśmy trochę szumu Gaussa do wartości RES2. Następnie użyliśmy scipy.optymalizować.Technika curve fit () do oszacowania wartości parametrów „jeden” i „dwa”. Oto pełny kod programowania modelu, który możesz śledzić.

importować Numpy jako P
importować matplotlib.Pyplot jako MTB
Import Scipy
z Scipy Import Optimalize
def func (res1, jeden, dwa):
zwróć jeden*res1 + dwa
Res1 = p.Linspace (start = -40, stop = 12, num = 30)
RES2 = FUNC (RES1, 4, 2)
P.losowy.ziarno (4)
hałas = 10*P.losowy.normalne (rozmiar = res2.rozmiar)
RES2 = RES2 + szum
Popt, Cov = scipy.optymalizować.Curve_fit (FUNC, RES1, RES2)
jeden, dwa = popt
x_new_value = p.Arange (min (RES1), 20, 5)
y_new_value = func (x_new_value, jeden, dwa)
MTB.Rozproszenie (res1, res2, color = „czerwony”)
MTB.Wykres (xnew_value, y_new_value, color = „fiolet”)
MTB.xlabel („x”)
MTB.ylabel („y”)
Drukuj („szacowana wartość jednego:”+ str (jeden))
druk („szacowana wartość dwóch:” + str (dwa))
MTB.pokazywać()

Poniżej można znaleźć wynik kodu dołączonego powyżej. Czerwone kropki na wynikającym ekranie reprezentują rzeczywiste punkty danych danych.

Z drugiej strony, fioletowa linia to krzywa zamontowana do zestawu danych za pomocą scipy.optymalizować.Metoda Curve Fit (). Ponadto zapewnia również szacunkową wartość obu parametrów „jeden” i „dwa”, co jest również obliczane przez Scipy.optymalizować.Technika Curve Fit ().

Przykład 2:

W drugim przykładzie wyjaśnimy użycie scipy.optymalizować.Curve_fit () metoda wykreślania krzywej wykładniczej, która pasuje do naszych danych.

Tutaj użyliśmy res2 = one*res2+jedno równanie, aby utworzyć zestaw danych o różnych punktach. Pozostały kod programu jest taki sam jak powyższy przykład. Oto kod wykreślania krzywej wykładniczej za pomocą funkcji curve_fit ().

Importować Numpy jako P
importować matplotlib.Pyplot jako MTB
Import Scipy
z Scipy Import Optimalize
def func (res1, jeden, dwa):
zwróć jeden*P.exp (dwa*res1)
Res1 = p.Linspace (12, 20, 30)
res2 = func (res1, 0.4, 0.3)
Drukuj (RES2)
hałas = 100*p.losowy.normalne (rozmiar = res2.rozmiar)
RES2 = RES2 + szum
Drukuj (RES2)
Popt, Cov = scipy.optymalizować.Curve_fit (FUNC, RES1, RES2)
jeden, dwa = popt
x_new_value = p.Arange (Min (RES1), Max (RES1), 1)
y_new_value = func (x_new_value, jeden, dwa)
MTB.Rozproszenie (res1, res2, color = „zielony”)
MTB.Wykres (xnew_value, y_new_value, color = ”blue”)
MTB.xlabel („x”)
MTB.ylabel („y”)
Drukuj („Szacowana wartość jednego:„+ str (jeden))
Drukuj („szacowana wartość dwóch:„ + str (dwa))
MTB.pokazywać()

Zobaczmy wyjście.

Tutaj możesz zobaczyć reprezentację graficzną.

Przykład 3:

W trzecim przykładzie wykreślamy dwie krzywe jednocześnie wokół rzeczywistej linii, aby zobaczyć różnicę między obiema wartościami. Zobacz kod poniżej.

W kodzie zaimportowaliśmy moduły i zdefiniowaliśmy funkcję (wskazaną jako func_one). Następnie ustawiliśmy wartości i nazwaliśmy funkcję Curve_fit, aby wykreślić te wartości na wykresie.

importować matplotlib.Pyplot jako MTB
importować Numpy jako P
od Scipy.Zoptymalizuj import Curve_fit
def func_one (res1, jeden, dwa, trzy):
zwróć jeden * P.exp (-two * res1) + trzy
res1_data = p.Linspace (0, 2, 40)
res2 = func_one (res1_data, 1.5, 1.2, 0.6)
rng = p.losowy.default_rng ()
res2_noise = 0.2 * rng.normalny (rozmiar = res1_data.rozmiar)
res2_data = res2 + res2_noise
MTB.wykres (res1_data, res2_data, „b-”, etykieta = „data”)
Popt, pcov = curve_fit (func_one, res1_data, res2_data)
Popt
MTB.Wykres (res1_data, func_one (res1_data, *popt), „r-”,
etykieta = 'fit: one =%5.3f, dwa =%5.3f, trzy =%5.3f ' % krotek (Popt))
Popt, pcov = curve_fit (func_one, res1_data, res2_data, granice = (0, [3., 1., 0.5]))
Popt
MTB.Wykres (res1_data, func_one (res1_data, *popt), „g--”,
etykieta = 'fit: one =%5.3f, dwa =%5.3f, trzy =%5.3f ' % krotek (Popt))
MTB.xlabel („x”)
MTB.ylabel („y”)
MTB.legenda()
MTB.pokazywać()

Dane wyjściowe znajduje się poniżej, w którym można zobaczyć powstałe krzywe.

Wniosek

W tym artykule podaliśmy wszystkie szczegóły dotyczące korzystania z funkcji cuver_fit () dostarczonej przez Scipy. Zaczęliśmy od wprowadzenia funkcji curve_fit (), a następnie nauczyliśmy się składni funkcji curve_fit (). Następnie widzieliśmy kilka przydatnych przykładów funkcji curve_fit () do wykreślania linii i krzywych w Pythonie. Możesz samodzielnie uruchomić te przykłady, aby samodzielnie zobaczyć wyjście i lepsze ogólne zrozumienie całej koncepcji.