高次多項式に大きな係数があるのはなぜですか


13

Bishopの機械学習に関する本では、多項式関数を一連のデータポイントに曲線近似する問題について説明しています。

Mを近似した多項式の次数とします。そのように述べています

Mが増加すると、係数の大きさは通常大きくなることがわかります。特に、M = 9多項式の場合、対応する多項式関数が各データポイントに正確に一致するように、ただしデータポイント間で(特に両端の近くで)大きな正および負の値を作成することにより、係数がデータに対して微調整されました範囲)関数は大きな振動を示します。

大きな値がデータポイントにより密接に適合することを意味する理由がわかりません。より適切にフィッティングするために、代わりに小数点以下の値がより正確になると思います。


本は 、 10個の等間隔の点で xを考慮しますここで、は平均がゼロで分散が小さいガウス分布です( 10ポイント...y=sn2πバツ+ϵ[01]ϵ
seanv507

回答:


18

これは、ルンゲ現象として知られる高次多項式の既知の問題です。数値的には、バンダーモンド行列の悪条件に関連付けられており、データの小さな変動や計算の丸めに対して係数が非常に敏感になります(つまり、モデルは安定して識別できません)。SciComp SEのこの回答も参照してください。

この問題には多くの解決策があります。たとえば、チェビシェフ近似平滑化スプライン、およびティホノフ正則化などです。ティホノフ正則化は、リッジ回帰の一般化であり、ノルムにペナルティを課します係数ベクトルの重み行列を平滑化するためのは、いくつかの微分演算子です。振動にペナルティを与えるには、を使用します。ここで、はデータで評価される多項式です。||Λθ]||θΛΛθ=p[バツ]p[バツ]

編集:ユーザーhxd1011による答えは、数値的な条件の悪い問題のいくつかは、良い点である直交多項式を使用して対処できることに注意しています。ただし、高次多項式の識別可能性の問題は依然として残っていることに注意してください。つまり、数値的悪条件は「無限小」摂動(例えば丸め)に対する感度に関連し、「統計的」悪条件は「有限」摂動(例えば異常値;逆問題は不適切)に対する感度に関係します。

2番目の段落で述べた方法は、この異常値の感度に関するものです。この感度は、標準の線形回帰モデルの違反と考えることができますミスフィットを使用すると、データがガウス分布であると暗黙的に想定されます。スプラインとTikhonov正則化は、フィットに優先度を平滑化することにより、この外れ値の感度に対処します。チェビシェフ近似では、データ領域だけでなく、連続領域に適用されるミスフィットを使用してこれを処理します。チェビシェフ多項式は直交しますが(特定の重み付き内積を使用)、データ上で使用すると、依然として異常な感度を持っているとます。L2LL2


@ hxd1011それは本当であり、チェビシェフ多項式の例を挙げました。ただし、外れ値があり、データのがまだである場合、直交多項式は実際に常に問題を解決しますか?この場合、ルンゲ現象は係数に信頼性の問題を引き起こすと考えられます(つまり、データの有限/大きな摂動に対して、無限小の丸めに対して)L2
GeoMatt22

1
p

1
この「ヴァンダーモンドマトリックスの悪条件付け」ビジネスについてどこで詳細を知ることができますか?
マシュードゥルーリー

@MatthewDrury私は通常、hxd1011によって提案された経験的アプローチも行います。しかし、クエリの後、簡単なGoogleが最近の興味深い論文を公開しました。それは、Vandermonde行列はどれほど悪いのでしょうか。(VY Pan、2015)。(たとえば、彼はDFTマトリックスがVandermondeであるが悪条件ではない理由を述べてます。)
GeoMatt22

@ GeoMatt22に感謝します。あなたが私のためにグーグルになってすみません、私はあなたがいくつかの個人的なお気に入りのソースを持っているかもしれないと思ったので尋ねました。
マシュードゥルーリー

8

最初に確認したいのは、著者が生の多項式と直交多項式について話しているかどうかです。

直交多項式の場合。係数は「大きく」なりません。

2次および15次の多項式展開の2つの例を示します。最初に、2次展開の係数を示します。

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

直交多項式を使用しているため、低次の係数は高次の結果の対応する項とまったく同じであることに注意してください。たとえば、1次の切片と係数は、両方のモデルで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)
ハイタオ・ドゥ

ナイストリック...それなら、15に固執することができると思いますsummary(lm(mpg~poly(wt,15, raw=T),mtcars))。係数の大きな効果!
アントニ・パレラダ16

@ seanv507による私の答えに対するコメントは、次のことに興味を持ちました。直交多項式を使用し、外れ値に対する感度を下げたい場合、標準的なリッジ回帰で十分でしょうか?または、より高次のより多くの振動多項式はまだ重み〜次数を必要としますか?(後者は、例えばDFTマトリックスが直交していると思いますが、高周波数をダウンウェイトする必要があります。この特定のケースで(不快な)経験がありました!)
GeoMatt22

3

Abhishek、あなたは正しいです。係数の精度を向上させると精度が向上します。

Mが増加すると、係数の大きさは通常大きくなることがわかります。特に、M = 9多項式の場合、対応する多項式関数が各データポイントに正確に一致するように、ただしデータポイント間で(特に両端の近くで)大きな正および負の値を作成することにより、係数がデータに対して微調整されました範囲)関数は大きな振動を示します。

マグニチュードの問題は、ビショップの全体的なポイントとは無関係だと思います-限られたデータで複雑なモデルを使用すると、「過剰適合」につながります。彼の例では、10のデータポイントを使用して、9次元の多項式(10個の変数と10個の未知数)を推定しています。

正弦波(ノイズなし)を近似する場合、正弦波(固定間隔)は多項式を使用して任意の精度で近似できるため、近似は完全に機能します。しかし、ビショップの例では、ある程度の「ノイズ」がありますが、これは適切ではありません。これを行う方法は、データポイントの数をモデル変数(多項式係数)の数に対して大きく保つか、正則化を使用することです。 (0,1)上の10 datポイントへの9次多項式フィット

正則化は、モデルに「ソフトな」制約を課します(リッジ回帰など)。最小化しようとするコスト関数は、「適合誤差」とモデルの複雑さの組み合わせです。これにより、エラーの削減にコストがかかります。係数の増加は、フィッティングエラーの十分な削減がある場合にのみ許可されます[十分な大きさは、モデルの複雑度の乗数によって指定されます]。したがって、適切な乗数を選択することにより、追加の小さなノイズ項に適合しないことが期待されます。適合の改善は係数の増加を正当化しないためです。

大きな係数がフィットの品質を改善する理由を尋ねました。本質的には、推定される関数(sin + noise)は多項式ではなく、多項式でノイズ効果を近似するために必要な曲率の大きな変化には大きな係数が必要だからです。

直交多項式を使用しても効果はないことに注意してください(直交多項式と生の多項式が互いに重ならないように、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'))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.