为什么`curve_fit`不能在参数完全拟合的情况下估计参数的协方差?
·
问题:为什么curve_fit不能在参数完全拟合的情况下估计参数的协方差?
我不明白curve_fit无法估计参数的协方差,从而将OptimizeWarning提高到下面。以下 MCVE 解释了我的问题:
MCVE 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)
输出
\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]]
对于a = 1,该函数完全适合xdata和ydata。为什么错误/方差不是0,或者接近0,而是inf?
curve_fitSciPy 参考指南中有这样一段话:
如果解决方案处的雅可比矩阵没有满秩,则 'lm' 方法返回一个填充有 np.inf 的矩阵,另一方面,'trf' 和 'dogbox' 方法使用 Moore-Penrose 伪逆来计算协方差矩阵。
那么,根本问题是什么?为什么解的雅可比矩阵没有满秩?
解答
参数协方差的公式(Wikipedia)在分母中具有自由度数。自由度计算为(数据点数)-(参数数),在您的示例中为 1 - 1 u003d 0。而这个是 SciPy 在除以它之前检查自由度数的地方。
使用xdata = [1, 2], ydata = [1, 2]您将获得零协方差(请注意,模型仍然完全适合:完全适合不是问题)。
如果样本大小 N 为 1(样本方差的公式在分母中具有 (N-1)),则这与未定义样本方差的问题相同。如果我们只从总体中抽取 sizeu003d1 个样本,我们不会将方差估计为零,我们对方差一无所知。
更多推荐

所有评论(0)