Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy.polyfit的额外结果意味着什么?_Python_Numpy_Scipy_Linear Regression - Fatal编程技术网

Python numpy.polyfit的额外结果意味着什么?

Python numpy.polyfit的额外结果意味着什么?,python,numpy,scipy,linear-regression,Python,Numpy,Scipy,Linear Regression,使用numpy的多边形拟合创建最佳拟合线时,可以将参数full指定为True。这将返回除系数外的4个额外值。这些值意味着什么?它们告诉我函数与我的数据的拟合程度如何 我正在做的是: bestFit = np.polyfit(x_data, y_data, deg=1, full=True) 我得到的结果是: (array([ 0.00062008, 0.00328837]), array([ 0.00323329]), 2, array([ 1.30236506, 0.55122159

使用numpy的多边形拟合创建最佳拟合线时,可以将参数full指定为True。这将返回除系数外的4个额外值。这些值意味着什么?它们告诉我函数与我的数据的拟合程度如何

我正在做的是:

bestFit = np.polyfit(x_data, y_data, deg=1, full=True)
我得到的结果是:

(array([ 0.00062008,  0.00328837]), array([ 0.00323329]), 2, array([ 
1.30236506,  0.55122159]), 1.1102230246251565e-15)
文件中说,额外的四条信息是:残差、秩、奇异值和rcond

编辑: 我正在寻找rcond和singular_值如何描述拟合优度的进一步解释

谢谢大家!

rcond和奇异_值如何描述拟合优度

简单回答:他们没有

它们没有描述多项式与数据的拟合程度;这就是残差的用途。他们描述了多项式的计算在数值上的鲁棒性

雷康德
rcond
的值实际上与拟合质量无关,它描述了获得拟合的过程,即线性系统的最小二乘解。大多数情况下,
polyfit
的用户不提供此参数,因此由
polyfit
本身选择合适的值。然后将该值返回给用户,供其参考

rcond
用于病态矩阵中的截断。最小二乘解算器完成两件事:

  • 找到使残差Ax-b的范数最小的x
  • 如果多个x达到该最小值,则返回其中具有最小范数的x 第二个子句发生在x的某些更改完全不影响右侧时。但由于浮点计算是不完善的,通常情况下,x的某些变化对右侧的影响很小。在这里,
    rcond
    用于确定“非常小”何时应被视为“零至噪声”

    例如,考虑系统

    x1                     = 1
    x1 + 0.0000000001 * x2 = 2
    
    这个问题可以精确求解:x1=1,x2=1000000000。但是那个微小的系数(实际上,是在一些矩阵运算之后产生的)有一些数值误差;据我们所知,它可能是负数,也可能是零。我们是否应该让它对解决方案产生如此巨大的影响

    因此,在这种情况下,矩阵(特别是其奇异值)在
    rcond
    级别被截断。这只剩下

    x1 = 1
    x1 = 2
    
    其最小二乘解为x1=1.5,x2=0。请注意,此解决方案是健壮的:系数的微小波动不会产生巨大的数值

    奇异值 当用最小二乘法解线性系统Ax=b时,a的奇异值决定了这在数值上有多复杂。具体来说,最大和最小奇异值之间的巨大差异是有问题的:这样的系统是病态的。例如

    0.835*x1 + 0.667*x2 = 0.168
    0.333*x1 + 0.266*x2 = 0.0067
    
    精确解为(1,-1)。但是如果将右侧从0.067更改为0.066,则解决方案是(-666834)——完全不同。问题是A的奇异值(大致)为1和1e-6;这会将右侧的任何更改放大1e6倍

    不幸的是,多项式拟合常常导致病态矩阵。例如,拟合24到25次等距数据点的多项式是不可取的

    import numpy as np
    x = np.arange(25)
    np.polyfit(x, x, 24, full=True)
    
    奇异值为

     array([4.68696731e+00, 1.55044718e+00, 7.17264545e-01, 3.14298605e-01,
            1.16528492e-01, 3.84141241e-02, 1.15530672e-02, 3.20120674e-03,
            8.20608411e-04, 1.94870760e-04, 4.28461687e-05, 8.70404409e-06,
            1.62785983e-06, 2.78844775e-07, 4.34463936e-08, 6.10212689e-09,
            7.63709211e-10, 8.39231664e-11, 7.94539407e-12, 6.32326226e-13,
            4.09332903e-14, 2.05501534e-15, 7.55397827e-17, 4.81104905e-18,
            8.98275758e-20]),
    
    使用默认值rcond(
    5.55e-15
    here),其中四个被截断为0

    最小和最大奇异值之间的大小差异表明,通过大小为1e-15的数量扰动y值,可导致系数变化约1。(并不是每个扰动都能做到这一点,只是有些扰动恰好与一个小奇异值的奇异向量对齐)

    等级
    有效秩只是高于
    rcond
    阈值的奇异值的数量。在上面的例子中是21。这意味着,即使拟合是针对25个点的,并且我们得到了一个具有25个系数的多项式,但在解中只有21个自由度

    键入
    help(np.polyfit)
    并在链接页面的右侧向下滚动一个bitIt,使用传统链接可获取更多信息。查看您链接到文档的返回值的描述,它提供了
    残差、秩、奇异值、rcond
    (和
    V
    )的含义的摘要,并带有“了解更多详细信息”链接。你不明白其中的哪一部分?如果你不明白fit算法背后的基本思想,你需要学习数学,而不是学习numpy如何揭示数学,所以你可能问错了地方。如果您知道这些想法,但即使在阅读了链接的
    lstsq
    页面后也不理解它们在这里的应用,那么您必须有一个具体的问题,您可以在这里提问。请为我指出有人可以扩展rcond和奇异值含义的方向。