为什么高阶多项式有大系数


13

在Bishop的机器学习书中,它讨论了将多项式函数曲线拟合到一组数据点的问题。

令M为多项式拟合的阶数。它指出

我们看到,随着M的增加,系数的大小通常会变大。特别是对于M = 9的多项式,通过产生较大的正值和负值,系数已经微调到数据,因此相应的多项式函数恰好与每个数据点匹配,但与数据点之间(尤其是在数据点的末端附近)匹配范围)功能显示出较大的振荡。

我不明白为什么大值意味着更紧密地拟合数据点。我认为这些值会在小数点后变得更精确,而不是为了更好地拟合。


书认为y=sin(2πx)+ϵ X在10个相等间隔的点[0,1]其中ϵ是高斯具有零均值和“小”方差(所以考虑与10嵌合9维多项式点...
seanv507

Answers:


18

这是高阶多项式的一个众所周知的问题,称为朗格现象。数值与它相关联病态的的Vandermonde矩阵,这使得系数在计算中的数据和/或舍入的小变化非常敏感(即,模型是不能稳定地识别)。另请参阅SciComp SE上的此答案

这个问题有很多解决方案,例如Chebyshev逼近平滑样条Tikhonov正则化。Tikhonov正则化是岭回归的广义化,对范数 |||进行惩罚 系数向量,其中用于平滑权重矩阵是一些导数算子。要惩罚振荡,您可以使用,其中θ Λ Λ θ = p ' ' [ X ]||Λθ]||θΛΛθ=p[x]p[x]是在数据中求值的多项式。

编辑:用户hxd1011的答案指出,可以使用正交多项式解决某些数值不佳问题,这是一个很好的观点。但是,我要指出的是,高阶多项式的可识别性问题仍然存在。也就是说,数值病态与“无限”摄动(例如舍入)的敏感性相关,而“统计”病态与对“有限”摄动的敏感性(例如离群值;反问题是不适定的)相关。)的。

我在第二段中提到的方法与这种异常敏感度有关。您可以将这种敏感性视为违反标准线性回归模型,该模型通过使用失配隐式地假设数据为高斯模型。样条曲线和Tikhonov正则化通过在拟合之前施加平滑度来处理这种异常敏感度。Chebyshev近似通过使用应用于连续域的失配来处理此问题,即不仅仅在数据点上。尽管Chebyshev多项式是正交的(写了一定的加权内积),但我相信,如果对数据使用失配,它们仍然具有异常的敏感性。大号大号2L2LL2


@ hxd1011是正确的,我给出了切比雪夫多项式的示例。如果存在异常值并且数据不匹配仍然是,那么正交多项式在实际中是否总会解决问题?我认为Runge现象在这种情况下仍会导致系数的可靠性问题(例如,数据的有限/大扰动与无穷小舍入。)L2
GeoMatt22'9

1
+1。不错的评论。对于任何想知道它来自何处的人,研究平滑样条线的工作原理都令人大开眼界。p
马修·德鲁里

1
在哪里可以了解有关“范德蒙矩阵的不良处理”业务的更多信息?
马修·德鲁里

@MatthewDrury我通常也采用hxd1011建议的经验方法。但是,在您查询之后,快速的Google透露了最近也有可能引起关注的一篇论文:Vandermonde矩阵有多糟糕?(VY Pan,2015年)。(例如,他解决了为什么DFT矩阵是范德蒙德而不是病态的原因。)
GeoMatt22'9

谢谢@ GeoMatt22。很抱歉让您成为我的Google,我问我,因为我认为您可能有一些个人喜爱的资源。
马修·德鲁里

8

首先要检查的是作者是在谈论原始多项式还是正交多项式

对于正交多项式。系数不会变得“更大”。

这是二阶和十五阶多项式展开的两个示例。首先,我们显示二阶展开的系数。

summary(lm(mpg~poly(wt,2),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 2), data = mtcars)

Residuals:
   Min     1Q Median     3Q    Max 
-3.483 -1.998 -0.773  1.462  6.238 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)   20.0906     0.4686  42.877  < 2e-16 ***
poly(wt, 2)1 -29.1157     2.6506 -10.985 7.52e-12 ***
poly(wt, 2)2   8.6358     2.6506   3.258  0.00286 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.651 on 29 degrees of freedom
Multiple R-squared:  0.8191,    Adjusted R-squared:  0.8066 
F-statistic: 65.64 on 2 and 29 DF,  p-value: 1.715e-11

然后我们显示15阶。

summary(lm(mpg~poly(wt,15),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 15), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.3233 -0.4641  0.0072  0.6401  4.0394 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)     20.0906     0.4551  44.147  < 2e-16 ***
poly(wt, 15)1  -29.1157     2.5743 -11.310 4.83e-09 ***
poly(wt, 15)2    8.6358     2.5743   3.355  0.00403 ** 
poly(wt, 15)3    0.2749     2.5743   0.107  0.91629    
poly(wt, 15)4   -1.7891     2.5743  -0.695  0.49705    
poly(wt, 15)5    1.8797     2.5743   0.730  0.47584    
poly(wt, 15)6   -2.8354     2.5743  -1.101  0.28702    
poly(wt, 15)7    2.5613     2.5743   0.995  0.33459    
poly(wt, 15)8    1.5772     2.5743   0.613  0.54872    
poly(wt, 15)9   -5.2412     2.5743  -2.036  0.05866 .  
poly(wt, 15)10  -2.4959     2.5743  -0.970  0.34672    
poly(wt, 15)11   2.5007     2.5743   0.971  0.34580    
poly(wt, 15)12   2.4263     2.5743   0.942  0.35996    
poly(wt, 15)13  -2.0134     2.5743  -0.782  0.44559    
poly(wt, 15)14   3.3994     2.5743   1.320  0.20525    
poly(wt, 15)15  -3.5161     2.5743  -1.366  0.19089    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.574 on 16 degrees of freedom
Multiple R-squared:  0.9058,    Adjusted R-squared:  0.8176 
F-statistic: 10.26 on 15 and 16 DF,  p-value: 1.558e-05

注意,我们使用正交多项式,因此低阶系数与高阶结果中的相应项完全相同。例如,两个模型的截距和一阶系数分别为20.09和-29.11。

另一方面,如果使用原始扩展,则不会发生这种情况。而且我们将拥有较大且敏感的系数!在下面的示例中,我们可以看到系数在左右。106

> summary(lm(mpg~poly(wt,15, raw=T),mtcars))

Call:
lm(formula = mpg ~ poly(wt, 15, raw = T), data = mtcars)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.6217 -0.7544  0.0306  1.1678  5.4308 

Coefficients: (3 not defined because of singularities)
                          Estimate Std. Error t value Pr(>|t|)
(Intercept)              6.287e+05  9.991e+05   0.629    0.537
poly(wt, 15, raw = T)1  -2.713e+06  4.195e+06  -0.647    0.526
poly(wt, 15, raw = T)2   5.246e+06  7.893e+06   0.665    0.514
poly(wt, 15, raw = T)3  -6.001e+06  8.784e+06  -0.683    0.503
poly(wt, 15, raw = T)4   4.512e+06  6.427e+06   0.702    0.491
poly(wt, 15, raw = T)5  -2.340e+06  3.246e+06  -0.721    0.480
poly(wt, 15, raw = T)6   8.537e+05  1.154e+06   0.740    0.468
poly(wt, 15, raw = T)7  -2.184e+05  2.880e+05  -0.758    0.458
poly(wt, 15, raw = T)8   3.809e+04  4.910e+04   0.776    0.447
poly(wt, 15, raw = T)9  -4.212e+03  5.314e+03  -0.793    0.438
poly(wt, 15, raw = T)10  2.382e+02  2.947e+02   0.809    0.429
poly(wt, 15, raw = T)11         NA         NA      NA       NA
poly(wt, 15, raw = T)12 -5.642e-01  6.742e-01  -0.837    0.413
poly(wt, 15, raw = T)13         NA         NA      NA       NA
poly(wt, 15, raw = T)14         NA         NA      NA       NA
poly(wt, 15, raw = T)15  1.259e-04  1.447e-04   0.870    0.395

Residual standard error: 2.659 on 19 degrees of freedom
Multiple R-squared:  0.8807,    Adjusted R-squared:  0.8053 
F-statistic: 11.68 on 12 and 19 DF,  p-value: 2.362e-06

我不知道语法是正确的,但你为什么不沿着线的东西对比正交v生的结果summary(lm(mpg~poly(wt,2),mtcars)); summary(lm(mpg~poly(wt,5),mtcars)); summary(lm(mpg~ wt + I(wt^2),mtcars)); summary(lm(mpg~ wt + I(wt^2) + I(wt^3) + I(wt^4) + I(wt^5),mtcars))
安东尼Parellada

@AntoniParellada很好的建议,我会进行修改。顺便说一句,我们可以通过poly(x,2,raw=T)
Haitao Du

不错的窍门...我想,那么,您可以坚持15并这样做summary(lm(mpg~poly(wt,15, raw=T),mtcars))。系数系数大!
Antoni Parellada'9

@ seanv507对我的回答的评论使我对以下内容感到好奇。如果您使用正交多项式,并且想要降低对异常值的敏感度,那么标准岭回归就足够了吗?还是更高阶,更振荡的多项式仍需要权重〜阶?(我认为后者,例如DFT矩阵是正交的,但是仍然需要降低高频权重。我在这种特殊情况下有(不愉快的)经验!)
GeoMatt22'9

3

阿布舍克(Abhishek),正确的是,提高系数的精度将提高精度。

我们看到,随着M的增加,系数的大小通常会变大。特别是对于M = 9的多项式,通过产生较大的正值和负值,系数已经微调到数据,因此相应的多项式函数恰好与每个数据点匹配,但与数据点之间(尤其是在数据点的末端附近)匹配范围)功能显示出较大的振荡。

我认为幅度问题与Bishop的整体观点无关,即在有限的数据上使用复杂的模型会导致“过度拟合”。在他的示例中,使用10个数据点来估计9维多项式(即10个变量和10个未知数)。

如果我们拟合正弦波(无噪声),则拟合效果很好,因为正弦波(在固定间隔内)可以使用多项式以任意精度近似。但是,在Bishop的示例中,我们有一定数量的“噪声”,我们不应该使用。我们这样做的方法是将数据点的数量保持为模型变量(多项式系数)的数量较大,或者使用正则化。 9阶多项式适合(0,1)上的10个数据点

正则化对模型施加“软”约束(例如,在岭回归中),您尝试最小化的成本函数是“拟合误差”和模型复杂度的组合:例如,在岭回归中,复杂度由系数平方和的总和来衡量。因此,这会为减少误差带来成本-只有在拟合误差的减小幅度足够大的情况下才允许增加系数[模型复杂度项的乘数指定了足够大的幅度]。因此,希望是通过选择适当的乘数,我们将不适合附加的小噪声项,因为拟合的提高不能证明系数的增加是合理的。

您问为什么大系数会改善拟合质量。本质上,原因是估计的函数(正弦+噪声)不是多项式,并且用多项式近似噪声效果所需的曲率的大变化需要大的系数。

请注意,使用正交多项式没有任何效果(我添加了0.1的偏移量,只是使正交多项式和原始多项式不在彼此的顶部)

require (penalized)
poly_order<-9
x_long<-seq(0,1, length.out = 100)
nx<-10
x<-seq(0,1, length.out = nx)
noise<- rnorm(nx, 0, 1)
noise_scale<-0.2
y<-sin(2*pi*x)+noise_scale*noise

training_data<-data.frame(x=x,y=y)
y_long<-sin(2*pi*x_long)

plot(x,y, col ='blue',ylim=c(-1.5,1.5))
lines(x_long,y_long,col='green')

polyfit_raw<-lm(y~poly(x,poly_order,raw=TRUE),data=training_data)
summary(polyfit_raw)

polyfit_raw_ridge1<-penalized(y,~poly(x,poly_order,raw=TRUE), model='linear', data=training_data, lambda2=0.0001, maxiter=10000, standardize=TRUE)

polyfit_orthog<-lm(y~poly(x,poly_order),data=training_data)
summary(polyfit_orthog)

pred_raw<-predict(polyfit_raw,data.frame(x=x_long))
pred_ortho<-predict(polyfit_orthog,data.frame(x=x_long))
pred_raw_ridge<-predict(polyfit_raw_ridge1,data=data.frame(x=x_long))[,'mu']
lines(x_long,pred_raw,col='red')
# add 0.1 offset to make visible
lines(x_long,pred_ortho+0.1,col='black')
lines(x_long,pred_raw_ridge,col='purple')
legend("bottomleft",legend=c('data sin(2 pi x) + noise','sin(2 pi x)', 
                             'raw poly','orthog poly +0.1 offset','raw poly + ridge regression'),
       fill=c('blue','green','red','black','purple'))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.