Warum gibt es große Koeffizienten für Polynome höherer Ordnung?

13

In Bishops Buch über maschinelles Lernen wird das Problem der Kurvenanpassung einer Polynomfunktion an eine Reihe von Datenpunkten erörtert.

Sei M die Ordnung des angepassten Polynoms. Es heißt so

Wir sehen, dass mit zunehmendem M die Größe der Koeffizienten typischerweise größer wird. Insbesondere für das M = 9 - Polynom wurden die Koeffizienten durch Entwickeln großer positiver und negativer Werte fein auf die Daten abgestimmt, so dass die entsprechende Polynomfunktion genau mit jedem der Datenpunkte übereinstimmt, jedoch zwischen Datenpunkten (insbesondere in der Nähe der Enden des Bereich) Die Funktion weist die großen Schwingungen auf.

Ich verstehe nicht, warum große Werte eine engere Anpassung der Datenpunkte implizieren. Ich würde denken, dass die Werte nach dem Dezimaltrennzeichen präziser werden, um eine bessere Anpassung zu erreichen.

Abhishek Bhatia
quelle
Das Buch betrachtet x an 10 gleich beabstandeten Punkten in wobei ein Gaußscher Wert mit dem Mittelwert Null und einer "kleinen" Varianz ist 10 Punkte ...y=sichn(2πx)+ϵ[0,1]ϵ
Seanv507

Antworten:

18

Dies ist ein bekanntes Problem bei Polynomen höherer Ordnung, das als Runge-Phänomen bezeichnet wird . Numerisch ist dies mit einer schlechten Konditionierung der Vandermonde-Matrix verbunden , wodurch die Koeffizienten sehr empfindlich gegenüber kleinen Abweichungen in den Daten und / oder Rundungen in den Berechnungen sind (dh das Modell ist nicht stabil identifizierbar ). Siehe auch diese Antwort auf der SciComp SE.

Es gibt viele Lösungen für dieses Problem, zum Beispiel die Chebyshev-Approximation , das Glätten von Splines und die Tikhonov-Regularisierung . Die Tikhonov-Regularisierung ist eine Verallgemeinerung der Kammregression , die eine Normdes Koeffizientenvektors ;, wobei zum Glätten der Gewichtsmatrix ; ein abgeleiteter Operator ist. Um Schwingungen zu bestrafen, können Sie , wobei das Polynom ist, das bei den Daten ausgewertet wird.||Λθ]||θΛΛθ=p[x]p[x]

BEARBEITEN: In der Antwort des Benutzers hxd1011 wird darauf hingewiesen, dass einige der Probleme mit der numerischen Fehlkonditionierung mit orthogonalen Polynomen behoben werden können, was ein guter Punkt ist. Ich würde jedoch bemerken, dass die Identifizierbarkeitsprobleme mit Polynomen höherer Ordnung immer noch bestehen. Das heißt, eine numerische Fehlkonditionierung ist mit einer Empfindlichkeit für "infinitesimale" Störungen (z. B. Abrunden) verbunden, während eine "statistische" Fehlkonditionierung eine Empfindlichkeit für "endliche" Störungen (z. B. Ausreißer; das umgekehrte Problem ist schlecht gestellt ) betrifft .

Die in meinem zweiten Absatz genannten Methoden befassen sich mit dieser Ausreißersensitivität . Sie können sich diese Empfindlichkeit als Verstoß gegen das Standardmodell der linearen Regression , bei dem bei Verwendung einer implizit davon dass es sich bei den Daten um Gauß handelt. Splines- und Tikhonov-Regularisierung bewältigen diese Ausreißerempfindlichkeit, indem sie der Passung eine Glätte vorschreiben. Die Chebyshev-Näherung geht damit um, indem eine -Fehlanpassung verwendet wird, die über die kontinuierliche Domäne angewendet wird , dh nicht nur an den Datenpunkten. Obwohl Chebyshev-Polynome orthogonal sind (bezogen auf ein bestimmtes gewichtetes inneres Produkt), glaube ich, dass sie bei Verwendung mit einer über die Daten immer noch eine Ausreißerempfindlichkeit aufweisen würden.L2LL2

GeoMatt22
quelle
@ hxd1011 das ist wahr, und ich habe das Beispiel von Chebyshev-Polynomen gegeben. Werden orthogonale Polynome das Problem in der Praxis jedoch immer lösen, wenn es Ausreißer gibt und die Datenfehlanpassung immer noch ? Ich denke, dass das Runge-Phänomen in diesem Fall immer noch Zuverlässigkeitsprobleme bei den Koeffizienten verursachen würde (dh für endliche / große Störungen der Daten im Vergleich zur infinitesimalen Rundung.)L2
GeoMatt22
1
p
1
Wo kann ich mehr über diese "schlechte Konditionierung der Vandermonde-Matrix" erfahren?
Matthew Drury
@MatthewDrury Ich mache normalerweise auch den von hxd1011 vorgeschlagenen empirischen Ansatz. Nach Ihrer Anfrage hat Google jedoch eine kürzlich erschienene Veröffentlichung veröffentlicht, die ebenfalls von Interesse sein könnte: Wie schlecht sind Vandermonde-Matrizen? (VY Pan, 2015) . (Zum Beispiel spricht er an, warum DFT-Matrizen Vandermonde sind, aber nicht schlecht konditioniert.)
GeoMatt22
Vielen Dank @ GeoMatt22. Tut mir leid, dass Sie für mich googeln, fragte ich, als ich dachte, Sie könnten einige persönliche Lieblingsquellen haben.
Matthew Drury
8

Das erste, was Sie überprüfen möchten, ist, ob der Autor über rohe Polynome vs. orthogonale Polynome spricht .

Für orthogonale Polynome. Die Koeffizienten werden nicht "größer".

Hier sind zwei Beispiele für eine Polynomexpansion 2. und 15. Ordnung. Zunächst zeigen wir den Koeffizienten für die Expansion 2. Ordnung.

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

Dann zeigen wir 15. Ordnung.

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

Beachten Sie, dass wir orthogonale Polynome verwenden , sodass der Koeffizient niedrigerer Ordnung genau mit den entsprechenden Begriffen in den Ergebnissen höherer Ordnung übereinstimmt. Beispielsweise ist der Achsenabschnitt und der Koeffizient für die erste Ordnung für beide Modelle 20.09 und -29.11.

Auf der anderen Seite wird so etwas nicht passieren, wenn wir Roh-Expansion verwenden. Und wir werden große und empfindliche Koeffizienten haben! Im folgenden Beispiel sehen wir, dass die Koeffizienten in der Größenordnung von liegen.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
Haitao Du
quelle
Ich bin mir nicht sicher, ob die Syntax korrekt ist, aber warum kontrastieren Sie nicht die Ergebnisse von orthogonal v raw mit etwas in der Art vonsummary(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 guter Vorschlag, werde ich überarbeiten. Übrigens, wir können einfach eine rohe Erweiterung vonpoly(x,2,raw=T)
Haitao Du
Nizza Trick ... Ich denke, dann können Sie bei 15 bleiben, und zu tun summary(lm(mpg~poly(wt,15, raw=T),mtcars)). Massiver Effekt in den Koeffizienten!
Antoni Parellada
Ein Kommentar zu meiner Antwort von @ seanv507 hat mich auf Folgendes neugierig gemacht. Wenn Sie orthogonale Polynome verwenden und die Empfindlichkeit für Ausreißer verringern möchten, ist dann eine Standard-Ridge-Regression ausreichend? Oder würden die schwingungsstärkeren Polynome höherer Ordnung immer noch Gewichte ~ Ordnung erfordern? (Ich denke letzteres, da z. B. eine DFT-Matrix orthogonal ist, aber eine Herabgewichtung der hohen Frequenzen weiterhin erforderlich wäre. Ich habe (unangenehme) Erfahrungen mit diesem speziellen Fall gemacht!)
GeoMatt22
3

Abhishek, Sie haben Recht, dass die Verbesserung der Genauigkeit der Koeffizienten die Genauigkeit verbessert.

Wir sehen, dass mit zunehmendem M die Größe der Koeffizienten typischerweise größer wird. Insbesondere für das M = 9 - Polynom wurden die Koeffizienten durch Entwickeln großer positiver und negativer Werte fein auf die Daten abgestimmt, so dass die entsprechende Polynomfunktion genau mit jedem der Datenpunkte übereinstimmt, jedoch zwischen Datenpunkten (insbesondere in der Nähe der Enden des Bereich) Die Funktion weist große Schwingungen auf.

Ich denke, das Größenproblem spielt für Bishops Gesamtaspekt keine Rolle - die Verwendung eines komplizierten Modells für begrenzte Daten führt zu einer „Überanpassung“. In seinem Beispiel werden 10 Datenpunkte verwendet, um ein 9-dimensionales Polynom (dh 10 Variablen und 10 Unbekannte) zu schätzen.

Wenn wir eine Sinuswelle anpassen (kein Rauschen), funktioniert die Anpassung perfekt, da Sinuswellen [über ein festes Intervall] mit Polynomen mit willkürlicher Genauigkeit approximiert werden können. In Bishops Beispiel haben wir jedoch ein gewisses Maß an "Lärm", das wir nicht einpassen sollten. Die Art und Weise, wie wir dies tun, besteht darin, die Anzahl der Datenpunkte auf die Anzahl der Modellvariablen (Polynomkoeffizienten) hoch zu halten oder die Regularisierung zu verwenden. Polynom 9. Ordnung an 10 Datenpunkte auf (0,1) anpassen

Durch die Regularisierung werden dem Modell "weiche" Einschränkungen auferlegt (z. B. bei der Ridge-Regression). Die Kostenfunktion, die Sie zu minimieren versuchen, ist eine Kombination aus "Anpassungsfehler" und Modellkomplexität: Bei der Ridge-Regression wird die Komplexität durch die Summe der quadrierten Koeffizienten gemessen Hierdurch entstehen Kosten für die Verringerung des Fehlers. Eine Erhöhung der Koeffizienten ist nur zulässig, wenn der Anpassungsfehler ausreichend stark verringert wird. Daher besteht die Hoffnung, dass durch Auswahl des geeigneten Multiplikators keine Anpassung an einen zusätzlichen kleinen Rauschausdruck erfolgt, da die Verbesserung der Anpassung die Erhöhung der Koeffizienten nicht rechtfertigt.

Sie haben gefragt, warum große Koeffizienten die Qualität der Anpassung verbessern. Im Wesentlichen liegt der Grund darin, dass die geschätzte Funktion (sin + noise) kein Polynom ist und die großen Änderungen der Krümmung, die erforderlich sind, um den Rauscheffekt mit Polynomen zu approximieren, große Koeffizienten erfordern.

Beachten Sie, dass die Verwendung von orthogonalen Polynomen keine Auswirkung hat (ich habe einen Versatz von 0,1 hinzugefügt, damit die orthogonalen und rohen Polynome nicht übereinander liegen).

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'))
seanv507
quelle