Yüksek mertebeden polinom için neden büyük katsayılar var?


13

Bishop'ın makine öğrenimi kitabında, bir polinom fonksiyonunun bir dizi veri noktasına eğri uydurma problemini tartışıyor.

M, takılı polinomun sırası olsun. Bu şekilde

M arttıkça, katsayıların büyüklüğünün tipik olarak arttığını görüyoruz. Özellikle M = 9 polinomu için, katsayılar büyük pozitif ve negatif değerler geliştirerek verilere ince ayarlanmıştır, böylece karşılık gelen polinom fonksiyonu veri noktalarının her biri ile tam olarak eşleşir, ancak veri noktaları arasında (özellikle fonksiyon) büyük salınımlar gösterir.

Büyük değerlerin neden veri noktalarına daha fazla uyduğunu ima ettiğini anlamıyorum. Değerlerin ondalıktan sonra daha iyi oturması için daha kesin olacağını düşünürdüm.


kitap, x'i eşit olarak aralıklı 10 noktada değerlendirir, burada sıfır ortalama ve' küçük 'varyansla gausstir (9 boyutlu polinom ile 10 puan ...y=sin(2πx)+ϵ[0,1]ϵ
seanv507

Yanıtlar:


18

Bu, Runge fenomeni olarak bilinen yüksek dereceli polinomlarla ilgili iyi bilinen bir konudur . Sayısal olarak, Vandermonde matrisinin kötü koşullandırılması ile ilişkilidir , bu da katsayıları verilerdeki küçük varyasyonlara ve / veya hesaplamalardaki yuvarlamaya karşı çok hassas hale getirir (yani model kararlı bir şekilde tanımlanamaz ). SciComp SE'deki bu cevaba da bakınız .

Bu soruna birçok çözüm var, örneğin Chebyshev yaklaşımı , düzeltme çizgileri ve Tikhonov düzenlenmesi . Tikhonov düzenlenmesi sırt regresyonunun genelleştirilmesidir, bir normu cezalandırırağırlık matrisini yumuşatmak için katsayısı vektörünün değeri: bazı türev operatördür. Salınımları cezalandırmak için ; burada verilerde değerlendirilen polinomdur.||Λθ]||θΛΛθ=p[x]p[x]

DÜZENLEME: hxd1011 kullanıcısı tarafından verilen yanıt, bazı sayısal sorun giderme sorunlarının iyi bir nokta olan dik polinomlar kullanılarak ele alınabileceğini belirtmektedir . Bununla birlikte, yüksek dereceli polinomlarla ilgili belirlenebilirlik sorunlarının hala devam ettiğini belirtmek isterim. Diğer bir deyişle, sayısal kötü koşullandırma "sonsuz" bozulmalara (örn. Yuvarlak kapanma) duyarlılık ile ilişkiliyken, "istatistiksel" kötü koşullandırma "sonlu" bozulmalara duyarlılıkla ilgilidir (örn. Aykırı değerler, ters sorun kötüdür ).

İkinci paragrafımda belirtilen yöntemler, bu aykırı duyarlılık ile ilgilidir . Bu hassasiyeti, bir uyumsuzluğu kullanarak verilerin örtülü olarak Gauss olduğunu varsayan standart doğrusal regresyon modelinin ihlali olarak düşünebilirsiniz . Spline ve Tikhonov düzenlenmesi, uyumdan önce bir pürüzsüzlük empoze ederek bu aşırı duyarlılığı ele alır. Chebyshev yaklaşımı bununla sürekli alan üzerine uygulanan bir uyumsuzluğu , yani sadece veri noktalarında değil, bununla ilgilenir . Chebyshev polinomları dik olsa da (belirli bir ağırlıklı iç ürün wrt), veriler üzerinde bir uyumsuzluğu ile kullanılırsa hala daha fazla hassasiyete sahip olacaklarına inanıyorum .L2LL2


@ hxd1011 bu doğru ve ben Chebyshev polinomları örneğini verdim. Aykırı değerler varsa ve veri uyumsuzluğu hala ise, ortogonal polinomlar pratikte her zaman sorunu mi? Bence Runge fenomeni bu durumda katsayılarda güvenilirlik sorunlarına neden olacaktır (örn. Verilerdeki sonlu / büyük pertürbasyonlar için sonsuz L2
küçüklüğe

1
+1. Güzel açıklama. Bunun nereden geldiğini merak eden herkes için, spline'ların nasıl çalıştığını incelemek göz açıyor. p
Matthew Drury

1
Bu "vandermonde matrisinin kötü şartlandırılması" işi hakkında nereden daha fazla bilgi edinebilirim?
Matthew Drury

@MatthewDrury Genellikle hxd1011 tarafından önerilen ampirik yaklaşımı da yaparım. Ancak sorgunuzdan sonra hızlı bir Google ilgi çekici olabilecek yeni bir makale yayınladı : Vandermonde Matrisleri Ne Kadar Kötü? (VY Pan, 2015) . (DFT matrisleri Vandermonde ama neden Örneğin, yöneldiği değil hasta şartlandırılmış.)
GeoMatt22

Teşekkürler @ GeoMatt22. Sizi benim için google yapmak için özür dilerim, bazı kişisel favori kaynaklarınız olabileceğini düşündüğüm için sordum.
Matthew Drury

8

Kontrol etmek istediğiniz ilk şey, yazarın ham polinomlardan ortogonal polinomlardan mı bahsediyor olması .

Dik polinomlar için. katsayı "artmıyor".

2. ve 15. mertebeden polinom genişlemesinin iki örneği. İlk olarak 2. mertebe genleşme katsayısını gösteririz.

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

Sonra 15. sırayı gösteriyoruz.

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

Dikgen polinomları kullandığımızı unutmayın , bu nedenle düşük mertebe katsayısı, yüksek mertebe sonuçlarındaki karşılık gelen terimlerle tamamen aynıdır. Örneğin, birinci mertebeden kesişme ve katsayı her iki model için 20.09 ve -29.11'dir.

Öte yandan, ham genişleme kullanırsak böyle bir şey olmaz. Ve büyük ve hassas katsayılarımız olacak! Aşağıdaki örnekte, katsayıların düzeyinde olduğunu görebiliriz.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

Sözdiziminin doğru olduğundan emin değilim, ama ortogonal v raw sonuçlarını neden çizgilerle karşılaştırmıyorsunuz?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))
Antoni Parellada

@AntoniParellada iyi bir öneri, revize edeceğim. BTW, ham genleşmeyi kolay yapabilirizpoly(x,2,raw=T)
Haitao Du

Güzel hile ... Sanırım, o zaman 15'e yapışıp yapabilirsin summary(lm(mpg~poly(wt,15, raw=T),mtcars)). Katsayılarda büyük etki!
Antoni Parellada

@ Seanv507'nin cevabım hakkında yorum yapmak beni aşağıdakiler hakkında meraklandırdı. Dik polinomlar kullanırsanız ve aykırı değerlere duyarlılığı azaltmak isterseniz, standart sırt regresyonu yeterli olur mu? Yoksa daha yüksek mertebeden, daha salınımlı polinomlar hala ağırlık ~ mertebesini gerektirir mi? (Sanırım ikincisi, örneğin bir DFT matrisi diktir, ancak düşük ağırlıklı yüksek frekanslara hala ihtiyaç duyulacaktır. Bu özel durumla (hoş olmayan) deneyimim oldu!)
GeoMatt22

3

Abhishek, katsayıların hassasiyetini artırmanın doğruluğu artıracağını haklısınız.

M arttıkça, katsayıların büyüklüğünün tipik olarak arttığını görüyoruz. Özellikle M = 9 polinomu için, katsayılar büyük pozitif ve negatif değerler geliştirerek verilere ince ayarlanmıştır, böylece karşılık gelen polinom fonksiyonu veri noktalarının her biri ile tam olarak eşleşir, ancak veri noktaları arasında (özellikle fonksiyon) büyük salınımlar gösterir.

Büyüklük meselesinin Bishop'un genel noktasıyla oldukça ilgisiz olduğunu düşünüyorum - sınırlı veriler üzerinde karmaşık bir model kullanmak 'aşırı sığmaya' yol açıyor. Onun örneğinde, 9 boyutlu bir polinomu (yani 10 değişken ve 10 bilinmeyen) tahmin etmek için 10 veri noktası kullanılır.

Bir sinüs dalgası takarsak (gürültü yok), o zaman uyum mükemmel çalışır, çünkü sinüs dalgaları [sabit bir aralıkta] polinomlar kullanılarak keyfi bir doğrulukla tahmin edilebilir. Ancak Piskopos örneğinde uymamamız gereken belli bir miktarda 'gürültü' var. Bunu yapma şeklimiz, veri değişkenlerinin sayısını model değişkenlerinin sayısına (polinom katsayıları) büyük tutmak veya düzenlileştirme kullanmaktır. 9. sıra Polinom 10 dat noktaya uygun (0,1)

Düzenleme, model üzerinde 'yumuşak' kısıtlamalar getirir (örneğin sırt regresyonunda) en aza indirmeye çalıştığınız maliyet fonksiyonu, 'montaj hatası' ve model karmaşıklığının bir kombinasyonudur: örneğin sırt regresyonunda karmaşıklık, kare katsayılarının toplamı ile ölçülür. Bu, hatanın azaltılması için bir maliyet getirir - katsayıların artırılmasına yalnızca montaj hatasına göre yeterince büyük bir azalma olması durumunda izin verilecektir [model karmaşıklık teriminde bir çarpan tarafından ne kadar büyük olduğu belirtilir]. Bu nedenle umut, uygun çarpanı seçerek ek küçük gürültü terimine uymayacağımızdır, çünkü uyumdaki iyileşme katsayılardaki artışı haklı çıkarmaz.

Büyük katsayıların uyum kalitesini neden artırdığını sordunuz. Esasen, tahmini fonksiyonun (sin + gürültü) bir polinom olmaması ve polinomlarla gürültü etkisini yaklaşık olarak belirlemek için gereken büyük eğrilik değişiklikleri büyük katsayılar gerektirmektedir.

Ortogonal polinomların kullanılmasının hiçbir etkisi olmadığını unutmayın (0,1 ofset ekledim, böylece ortogonal ve ham polinomlar birbirinin üstünde değil)

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'))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.