【问题标题】:numpy.polyfit giving error for covariance matrixnumpy.polyfit 给出协方差矩阵的错误
【发布时间】:2018-03-05 15:29:00
【问题描述】:

这是代码:

p=[1,2,3,4]

q=[4,5,6,7]

z,n=numpy.polyfit(p,q,1,cov=True)

它给了我这个信息:

4 z,n=np.polyfit(p,q,1,cov=True)

C:\Users\Rekha\Anaconda3\lib\site-packages\numpy\lib\polynomial.py in polyfit(x, y, deg, rcond, full, w, cov)

601 # 另外,它给出了一个稍微保守的不确定性估计。

602 if len(x)

--> 603 raise ValueError("数据点数必须超过order + 2" 604“用于贝叶斯估计协方差矩阵”)

605 fac = resids / (len(x) - order - 2.0)

ValueError: 贝叶斯的数据点数必须超过 order + 2 估计协方差矩阵

我不明白为什么会这样?我有四个数据点,足以适合一条线

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    错误准确地说明了问题所在:您没有足够的数据点来估计协方差矩阵(并且没有来执行拟合)。

    import numpy as np
    
    p = [1, 2, 3, 4]
    q = [4, 5, 6, 7]
    
    z = np.polyfit(p, q, 1, cov=False)
    print(z)
    

    或者,如果您满足建议的条件,即多一个数据点,您可以获得协方差矩阵的估计值。

    import numpy as np
    
    p = [1, 2, 3, 4, 5]
    q = [4, 5, 6, 7, 8]
    
    z, n = np.polyfit(p, q, 1, cov=True)
    
    print(z, n)
    

    我不知道您需要协方差矩阵来做什么,但如果您只需要拟合参数的误差,您可以考虑手动计算,例如通过为k 的所有有效值获取n 数据点的所有可能的C(n, k) 组合,然后计算获得的系数的标准差。

    【讨论】:

    • 报错说len(x) > order + 2. order是1, 1+2 = 3 order + 3?
    • 度数为1,顺序为度数+1。
    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2020-04-13
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多