Pourquoi n'est-il pas "curve_fit" en mesure d'estimer la covariance du paramètre si le paramètre correspond exactement?
Je ne comprends pas curve_fit
n'est pas en mesure d'estimer la covariance des paramètres, ce qui soulève la OptimizeWarning
ci-dessous. La suite MCVE explique mon problème:
MCVE extrait python
from scipy.optimize import curve_fit
func = lambda x, a: a * x
popt, pcov = curve_fit(f = func, xdata = [1], ydata = [1])
print(popt, pcov)
Sortie
\python-3.4.4\lib\site-packages\scipy\optimize\minpack.py:715:
OptimizeWarning: Covariance of the parameters could not be estimated
category=OptimizeWarning)
[ 1.] [[ inf]]
Pour a = 1
la fonction correspond à xdata
et ydata
exactement. Pourquoi n'est-ce pas l'erreur/la variance 0
, ou quelque chose de proche de 0
, mais inf
à la place?
Il y a cette citation de la curve_fit
SciPy Guide de Référence:
Si la matrice Jacobienne à la solution de ne pas avoir un classement complet, puis ‘lm’ méthode renvoie une matrice remplie avec np.inf, sur l'autre main "fondation" et " dogbox’ utilisation de méthodes de Moore-Penrose pseudo-inverse pour calculer la matrice de covariance.
Donc, quel est le problème sous-jacent? Pourquoi ne pas la matrice Jacobienne à la solution d'avoir un classement complet?
Vous devez vous connecter pour publier un commentaire.
La formule de la covariance des paramètres (Wikipédia) est le nombre de degrés de liberté au dénominateur. Les degrés de libertés sont calculées (nombre de points de données) - (nombre de paramètres), qui est de 1 - 1 = 0 dans votre exemple. Et cette est où SciPy vérifie le nombre de degrés de liberté avant de diviser par elle.
Avec
xdata = [1, 2], ydata = [1, 2]
vous obtenez zéro de covariance (à noter que le modèle s'adapte exactement: ajustement exact n'est pas le problème).C'est le même type de problème que de variance de l'échantillon est indéfini si la taille de l'échantillon N est de 1 (la formule de la variance de l'échantillon a (N-1) dans le dénominateur). Si nous n'avons size=1 échantillon de la population, nous n'avons pas d'estimation de la variance par zéro, nous ne savons rien au sujet de la variance.