Python 为什么optimize.curve_拟合中的pcov是一个二乘二矩阵,哪个值对应于截距
我试图理解以下代码中的perr,它是一个维度为(2,2)的矩阵。我希望它是一个维度为(1,2)的矩阵。你能解释一下哪个值对应斜率,哪个值对应截距吗。文档说明对角线是参数(斜率、截距)的方差。非对角元素呢?它告诉我们什么Python 为什么optimize.curve_拟合中的pcov是一个二乘二矩阵,哪个值对应于截距,python,numpy,scipy,Python,Numpy,Scipy,我试图理解以下代码中的perr,它是一个维度为(2,2)的矩阵。我希望它是一个维度为(1,2)的矩阵。你能解释一下哪个值对应斜率,哪个值对应截距吗。文档说明对角线是参数(斜率、截距)的方差。非对角元素呢?它告诉我们什么 x= np.arange(10) y = np.array([2,4,7,8,11,18,20,24,26,28]) def line(x,m,b): #m and b are parameters return m*x+b pfit,perr = optimiz
x= np.arange(10)
y = np.array([2,4,7,8,11,18,20,24,26,28])
def line(x,m,b): #m and b are parameters
return m*x+b
pfit,perr = optimize.curve_fit(line,x,y)
error = []
for i in range(len(pfit)):
gg=np.absolute(perr[i][i])**0.5
print (gg)
参数在结果中的表示顺序与优化函数采用的顺序相同。由于行定义为
行(x,m,b)
,popt
包含的估计值顺序为[m,p]
curve\u fit
返回的pcov
(或示例中的perr
)是估计参数的最大值
- 对角线元素是方差。它们告诉我们参数变化的可能性有多大,或者我们对估计的信心有多大。较大的方差基本上意味着我们对参数了解不多;
中返回的值是最有可能的值,但即使是遥远的值也很有可能popt
- 非对角元素是。它们的意思实际上隐藏在名称中:协方差;变量如何一起变化
[[ 0.025, -0.114],
[-0.114, 0.723]]
那么斜率和截距的协方差是-0.114是什么意思呢?它们是相关的:如果截距较大,斜率必须较小,反之亦然
从图形上看,如果将整条线向上移动,则靠近数据点的坡度必须较小;如果你向下移动,它需要更大的坡度。
这在线性回归中非常明显,因此没有那么有用;但请记住,曲线拟合
可以采用任何复杂的函数,其中参数之间的依赖性并不明显。在这种情况下,这可能是有价值的信息。pcov:2d数组
popt的估计协方差。对角线提供参数估计的方差。要计算参数的一个标准偏差误差,请使用perr=np.sqrt(np.diag(pcov))
你说的是参数的方差和协方差,而不是变量
在值中定义的协方差不在对角线上的,告诉我们,如果我选择另一个,大的或小的,参数将运行多少以及运行方向
标准偏差告诉我们,在[mean std,mean+std]范围内,测量值在该范围内的概率为68%
方差告诉我们这些值是如何分散的是The,它以
popt
和pcov
的形式返回的内容非常清楚。并且说pcov将是一个2d数组。文件的哪一部分不清楚?pfit
的两个值是斜率(m
)和截距(b
),因此您可以绘制x
与直线(x,*pfit)
。在pcov中,第一行包含两个元素。文献表明,该矩阵的对角线是参数估计的方差。非对角元素呢。它们代表什么?请澄清问题的一部分,即“为什么我们忽略协方差的0值,为什么我们将其除以0.5?”。我在代码中既看不到任何被忽略的0值,也看不到0.5的除法。非常感谢,现在我得到了它