我一直在使用scipy.optimize.leastsq
以拟合一些数据。我想在这些估计值上获得一些置信区间,因此我会查看cov_x
输出,但是文档尚不清楚这是什么以及如何从中获取参数的协方差矩阵。
首先,它说这是雅可比行列式,但在注释中也说“cov_x
是对黑森州的雅可比行列式近似值”,因此,它实际上不是雅可比行列式,而是使用与雅可比行列式近似的黑森州式。以下哪种说法是正确的?
其次,这句话使我感到困惑:
必须将此矩阵乘以残差方差,以获得参数估计值的协方差–请参见
curve_fit
。
我确实去看看它们在哪里工作的源代码curve_fit
:
s_sq = (func(popt, *args)**2).sum()/(len(ydata)-len(p0))
pcov = pcov * s_sq
这相当于乘以cov_x
,s_sq
但我在任何参考文献中都找不到此等式。有人可以解释为什么这个方程式正确吗?我的直觉告诉我,应该是相反的,因为cov_x
它应该是派生的(Jacobian或Hessian),所以我在想:
我想要的东西cov_x * covariance(parameters) = sum of errors(residuals)
在哪里sigma(parameters)
。
我如何将curve_fit所做的事情与我在例如上看到的联系起来。维基百科:http: //en.wikipedia.org/wiki/Propagation_of_uncertainty#Non-
linear_combinations
好吧,我想我找到了答案。首先是解决方案:cov_x * s_sq就是您想要的参数的协方差。取对角线元素的平方根会给您标准偏差(但要注意协方差!)。
残留方差=减少的卡方= s_sq = sum [(f(x(y)-y)^ 2]
/(Nn),其中N为数据点数,n为拟合参数数。减少卡方。
我感到困惑的原因是,由minimumsq给出的cov_x实际上在其他地方并不是真正的cov(x),而是减少的cov(x)或分数cov(x)。它在其他任何参考文献中均未显示的原因是它是一种简单的重新缩放,在数值计算中很有用,但与教科书无关。
关于Hessian和Jacobian,该文档措辞不佳。在这两种情况下,很明显是由Hessian计算得出的,因为Jacobian最小为零。他们的意思是说他们正在使用与雅可比近似的方法来找到黑森州。
进一步说明。似乎curve_fit结果实际上并未考虑误差的绝对大小,而仅考虑了所提供的sigma的相对大小。这意味着即使误差条变化了百万分之一,pcov返回的值也不会改变。这当然是不对的,但似乎是标准做法。Matlab使用“曲线拟合”工具箱时会做同样的事情。此处描述了正确的过程:https
:
//en.wikipedia.org/wiki/Linear_least_squares_(mathematics)#Parameter_errors_and_correlation
一旦找到最佳值,至少对于线性最小二乘法,这样做似乎很简单。
校验者: @李昊伟 @小瑶 翻译者: @柠檬 许多统计问题在某一时刻需要估计一个总体的协方差矩阵,这可以看作是对数据集散点图形状的估计。 大多数情况下,基于样本的估计(基于其属性,如尺寸,结构,均匀性), 对估计质量有很大影响。 <cite>sklearn.covariance</cite> 方法的目的是 提供一个能在各种设置下准确估计总体协方差矩阵的工具。 我们假设观察是独立的,相同分布的 (i
朴素贝叶斯法的参数估计 朴素贝叶斯法需要估计参数$$P(Y=c_k)$$和$$P(X_j=x_j|Y=c_k)$$ $$ y=f(x)=\arg \max_{c_k}\prod_{j=1}^n P(X_j=x_j|Y=c_k)P(Y=c_k) $$ 假定数据集$$T={(x{(1)},y{(1)}),(x{(2)},y{(2)}),...,(x{(m)},y{(m)})}$$,其中$$x\in \
实际数据集通常是会有测量或记录错误。合格但不常见的观察也可能出于各种原因。 每个不常见的观察称为异常值。 上面提出的经验协方差估计器和收缩协方差估计器对数据中异常观察值非常敏感。 因此,应该使用更好的协方差估计(robust covariance estimators)来估算其真实数据集的协方差。 或者,可以使用更好的协方差估计器(robust covariance estimators)来执行异
本文向大家介绍为什么LR用极大似然估计参数?相关面试题,主要包含被问及为什么LR用极大似然估计参数?时的应答技巧和注意事项,需要的朋友参考一下 如果用平方差损失函数时,损失函数对于参数是一个非凸优化的问题,可能会收敛到局部最优解,而且对数似然的概念是使得样本出现的概率最大,采用对数似然梯度更新速度也比较快
我有这个代码: 我必须用glFrustum替换glOrtho函数并得到相同的结果。 我阅读了khronos上的opengl指南,理解了glOrtho和glFrustum之间的区别,但我不知道如何计算参数。 如何计算传递给glFrustum函数的参数?
问题内容: 因此,前几天我在工作中遇到了一些问题,试图计算运行导入后有多少个空值。 所以我做了: 哪个不算空值… 然后我做到了 这给了我计数。 所以,令我感到困扰的是为什么它不计算空值。 我看了这个问题(以及对Google的良好搜索…): 在SQL中,count(column)和count(*)之间有什么区别?,虽然它告诉我不计算空值,但我想确切地知道 为什么 使用这种方法不计算空值? 非常感谢,