Nous démontrons les fonctionnalités de lmfit
tout en résolvant les problèmes.
Données
import lmfit
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
np.random.seed(123)
# Fonctions Générales
def func_log(x, a, b, c):
"""Retourne les valeurs d'une fonction logarithmique générale."""
return a * np.log(b * x) + c
# Données
x_samp = np.linspace(1, 5, 50)
_noise = np.random.normal(size=len(x_samp), scale=0.06)
y_samp = 2.5 * np.exp(1.2 * x_samp) + 0.7 + _noise
y_samp2 = 2.5 * np.log(1.2 * x_samp) + 0.7 + _noise
Code
Approche 1 - Modèle lmfit
Ajustement des données exponentielles
regressor = lmfit.models.ExponentialModel() # 1
initial_guess = dict(amplitude=1, decay=-1) # 2
results = regressor.fit(y_samp, x=x_samp, **initial_guess)
y_fit = results.best_fit
plt.plot(x_samp, y_samp, "o", label="Données")
plt.plot(x_samp, y_fit, "k--", label="Ajustement")
plt.legend()
![description de l'image ici]()
Approche 2 - Modèle Personnalisé
Ajustement des données logarithmiques
regressor = lmfit.Model(func_log) # 1
initial_guess = dict(a=1, b=.1, c=.1) # 2
results = regressor.fit(y_samp2, x=x_samp, **initial_guess)
y_fit = results.best_fit
plt.plot(x_samp, y_samp2, "o", label="Données")
plt.plot(x_samp, y_fit, "k--", label="Ajustement")
plt.legend()
![description de l'image ici]()
Détails
- Choisissez une classe de régression
- Fournissez des suppositions initiales nommées qui respectent le domaine de la fonction
Vous pouvez déterminer les paramètres déduits à partir de l'objet de régression. Exemple:
regressor.param_names
# ['decay', 'amplitude']
Pour faire des prédictions, utilisez la méthode ModelResult.eval()
.
model = results.eval
y_pred = model(x=np.array([1.5]))
Remarque : le ExponentialModel()
suit une fonction de décroissance exponentielle, qui accepte deux paramètres, dont l'un est négatif.
![description de l'image ici]()
Voir aussi ExponentialGaussianModel()
, qui accepte plus de paramètres.
Installez la bibliothèque via > pip install lmfit
.