Perché ci sono grandi coefficienti per il polinomio di ordine superiore


13

Nel libro di Bishop sull'apprendimento automatico, si discute del problema di adattare una funzione polinomiale a una serie di punti dati.

Lascia che M sia l'ordine del polinomio montato. Si afferma così

Vediamo che, all'aumentare di M, l'entità dei coefficienti in genere aumenta. In particolare per il polinomio M = 9, i coefficienti sono stati sintonizzati con precisione sui dati sviluppando grandi valori positivi e negativi in ​​modo che la corrispondente funzione polinomiale corrisponda esattamente a ciascuno dei punti di dati, ma tra i punti di dati (in particolare vicino alle estremità del gamma) la funzione mostra le grandi oscillazioni.

Non capisco perché i valori di grandi dimensioni implicano un adattamento più stretto dei punti dati. Penserei che i valori diventerebbero più precisi dopo il decimale invece per adattarsi meglio.


il libro considera x in 10 punti equidistanti in [ 0 , 1 ] dove ϵ è gaussiano con media zero e varianza 'piccola' (quindi considerando il polinomio 9 dimensionale con 10 punti ...y=Sion(2*π*X)+ε[0,1]ε
seanv507

Risposte:


18

Questo è un problema ben noto con i polinomi di alto ordine, noto come fenomeno di Runge . Numericamente è associato al mal condizionamento della matrice Vandermonde , che rende i coefficienti molto sensibili alle piccole variazioni nei dati e / o arrotondamenti nei calcoli (cioè il modello non è stabilmente identificabile ). Vedi anche questa risposta su SciComp SE.

Esistono molte soluzioni a questo problema, ad esempio l' approssimazione di Chebyshev , la levigatura delle spline e la regolarizzazione di Tikhonov . La regolarizzazione di Tikhonov è una generalizzazione della regressione della cresta , che penalizza una norma del vettore coefficiente θ , dove per uniformare la matrice del peso Λ è un operatore derivato. Per penalizzare le oscillazioni, potresti usare Λ θ = p [ x ] , dove p [ x ]||Λθ]||θΛΛθ=p''[X]p[X] è il polinomio valutato ai dati.

EDIT: la risposta dell'utente hxd1011 osserva che alcuni dei problemi numerici di mal condizionamento possono essere affrontati usando polinomi ortogonali, il che è un buon punto. Vorrei tuttavia notare che permangono i problemi di identificabilità con i polinomi di alto ordine. Cioè, il mal condizionamento numerico è associato alla sensibilità a perturbazioni "infinitesimali" (ad es. Arrotondamento), mentre il mal condizionamento "statistico" riguarda la sensibilità a perturbazioni "finite" (ad esempio valori anomali; il problema inverso è mal posto ).

I metodi menzionati nel mio secondo paragrafo riguardano questa sensibilità esterna . Puoi pensare a questa sensibilità come una violazione del modello di regressione lineare standard, che usando un disadattato presuppone implicitamente che i dati siano gaussiani. La regolarizzazione di Splines e Tikhonov affronta questa sensibilità esterna imponendo una scorrevolezza prima della calzata. Offerte di approssimazione di Chebyshev con questo utilizzando un L disadattato applicati sul dominio continuo , cioè non solo in corrispondenza dei punti di dati. Sebbene i polinomi di Chebyshev siano ortogonali (rispetto a un determinato prodotto interno ponderato), credo che se usati con un disadattato L 2 sui dati rimarrebbero comunqueL2LL2 avere una sensibilità straordinaria.


@ hxd1011 questo è vero, e ho dato l'esempio dei polinomi di Chebyshev. Tuttavia, i polinomi ortogonali risolveranno sempre il problema in pratica, se ci sono valori anomali e l'insufficienza dei dati è ancora ? Penso che il fenomeno Runge causerebbe ancora problemi di affidabilità nei coefficienti in questo caso (cioè per perturbazioni finite / grandi sui dati, contro arrotondamento infinitesimale).L2
GeoMatt22

1
+1. Nizza sulla commento. Per chiunque si chieda da dove provenga, studiare come levigare le spline funziona aprendo gli occhi. p"
Matthew Drury,

1
Dove posso saperne di più su questo business del "mal condizionamento della matrice vandermonde"?
Matthew Drury,

@MatthewDrury Di solito faccio anche l'approccio empirico suggerito da hxd1011. Tuttavia, dopo la tua domanda, un rapido Google ha rivelato un recente documento che potrebbe anche essere di interesse: quanto sono cattive le matrici Vandermonde? (VY Pan, 2015) . (Ad esempio, spiega perché le matrici DFT sono Vandermonde ma non sono mal condizionate.)
GeoMatt22

Grazie @ GeoMatt22. Mi dispiace di averti reso Google per me, ho chiesto perché pensavo che potresti avere alcune fonti preferite personali.
Matthew Drury,

8

La prima cosa che vuoi controllare è se l'autore sta parlando di polinomi grezzi vs. polinomi ortogonali .

Per polinomi ortogonali. il coefficiente non sta diventando "più grande".

Ecco due esempi di espansione polinomiale di secondo e quindicesimo ordine. Innanzitutto mostriamo il coefficiente per l'espansione del 2 ° ordine.

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

Quindi mostriamo il 15 ° ordine.

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

Si noti che stiamo usando polinomi ortogonali , quindi il coefficiente dell'ordine inferiore è esattamente lo stesso dei termini corrispondenti nei risultati dell'ordine superiore. Ad esempio, l'intercetta e il coefficiente per il primo ordine sono 20.09 e -29.11 per entrambi i modelli.

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

Non sono sicuro che la sintassi sia corretta, ma perché non metti in contrasto i risultati di ortogonale v crudo con qualcosa del generesummary(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))
Antoni Parellada,

@AntoniParellada buon suggerimento, lo rivedrò. A proposito, possiamo facilmente fare l'espansione grezza dipoly(x,2,raw=T)
Haitao Du,

Bel trucco ... Immagino, quindi, puoi restare su 15 e farlo summary(lm(mpg~poly(wt,15, raw=T),mtcars)). Effetto massiccio nei coefficienti!
Antoni Parellada,

Un commento sulla mia risposta di @ seanv507 mi ha incuriosito quanto segue. Se si utilizzano polinomi ortogonali e si desidera ridurre la sensibilità ai valori anomali, sarebbe sufficiente una regressione della cresta standard? O i polinomi di ordine superiore e più oscillatorio richiedono ancora pesi ~ ordine? (Penso che quest'ultimo, come ad esempio una matrice DFT sia ortogonale, ma sarebbe comunque necessario il sovrappeso ad alte frequenze. Ho avuto (spiacevole) esperienza con questo caso particolare!)
GeoMatt22

3

Abhishek, hai ragione sul fatto che migliorare la precisione dei coefficienti migliorerà l'accuratezza.

Vediamo che, all'aumentare di M, l'entità dei coefficienti in genere aumenta. In particolare per il polinomio M = 9, i coefficienti sono stati sintonizzati finemente sui dati sviluppando grandi valori positivi e negativi in ​​modo che la corrispondente funzione polinomiale corrisponda esattamente a ciascuno dei punti di dati, ma tra i punti di dati (in particolare vicino alle estremità del gamma) la funzione presenta grandi oscillazioni.

Penso che la questione della magnitudo sia piuttosto irrilevante per il punto generale di Bishop: che l'uso di un modello complicato su dati limitati porta a un "eccesso di adattamento". Nel suo esempio vengono utilizzati 10 punti dati per stimare un polinomio a 9 dimensioni (ovvero 10 variabili e 10 incognite).

Se adattiamo un'onda sinusoidale (nessun rumore), l'adattamento funziona perfettamente, poiché le onde sinusoidali [su un intervallo fisso] possono essere approssimate con precisione arbitraria usando i polinomi. Tuttavia, nell'esempio di Bishop abbiamo una certa quantità di "rumore" che non dovremmo adattare. Il modo in cui lo facciamo è mantenendo ampio il numero di punti dati sul numero di variabili modello (coefficienti polinomiali) o usando la regolarizzazione. Polinomio del 9 ° ordine adatto a 10 punti dati su (0,1)

La regolarizzazione impone vincoli "soft" sul modello (ad es. Nella regressione della cresta) la funzione di costo che si tenta di minimizzare è una combinazione di "errore di adattamento" e complessità del modello: ad es. Nella regressione della cresta la complessità viene misurata dalla somma dei coefficienti quadrati l'effetto impone un costo sulla riduzione dell'errore - l'aumento dei coefficienti sarà consentito solo se ha una riduzione abbastanza grande dell'errore di adattamento [quanto grande è abbastanza grande è specificato da un moltiplicatore sul termine della complessità del modello]. Pertanto, la speranza è che scegliendo il moltiplicatore appropriato non ci adatteremo ad un ulteriore termine di rumore ridotto, poiché il miglioramento dell'adattamento non giustifica l'aumento dei coefficienti.

Hai chiesto perché grandi coefficienti migliorano la qualità della vestibilità. In sostanza, la ragione è che la funzione stimata (sin + noise) non è un polinomio e che i grandi cambiamenti nella curvatura richiesti per approssimare l'effetto del rumore con i polinomi richiedono coefficienti elevati.

Si noti che l'uso dei polinomi ortogonali non ha alcun effetto (ho aggiunto un offset di 0,1 solo in modo che i polinomi ortogonali e grezzi non siano uno sopra l'altro)

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'))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.