numpy.polyfit的额外结果是什么意思?

时间:2018-03-23 17:18:10

标签: python numpy scipy linear-regression

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

https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html

我在做的是:

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和singular_values如何描述拟合优度的进一步解释。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

rcond和singular_values如何描述适合度。

简短的回答:他们没有。

它们没有描述多项式与数据的拟合程度;这是residuals的用途。他们描述了多项式计算的数值稳健性。

rcond

rcond的值并非真正与拟合质量有关,它描述了获得拟合的过程,即线性系统的最小二乘解。大多数情况下polyfit的用户不提供此参数,因此polyfit本身会选择合适的值。然后将该值返回给用户以获取其信息。

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

  1. 找到最小化残差Ax-b
  2. 范数的x
  3. 如果多个x达到此最小值,则返回x中具有最小范数的x。
  4. 当x的某些变化根本不影响右侧时,会出现第二个子句。但由于浮点计算不完善,通常会发生的情况是x的某些变化会影响右侧很少。这是rcond用于决定何时"很少"应被视为"零噪音"。

    例如,考虑系统

    x1                     = 1
    x1 + 0.0000000001 * x2 = 2
    

    这个可以完全解决:x1 = 1和x2 = 10000000000.但是......微小的系数(实际上是在一些矩阵操作之后出现)中有一些数字错误;据我们所知,它可能是负面的,也可能是零。我们应该让它对解决方案产生如此巨大的影响吗?

    因此,在这种情况下,矩阵(特别是其奇异值)会在级别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,则解决方案是(-666,834) - 完全不同。问题是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),其中四个被截断为0.

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

    等级

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