Tại sao có hệ số lớn cho đa thức bậc cao


13

Trong cuốn sách của Đức cha về học máy, nó thảo luận về vấn đề khớp đường cong một hàm đa thức với một tập hợp các điểm dữ liệu.

Gọi M là thứ tự của đa thức được trang bị. Nó nói như thế

Chúng ta thấy rằng, khi M tăng, độ lớn của các hệ số thường lớn hơn. Đặc biệt với đa thức M = 9, các hệ số đã được điều chỉnh chính xác cho dữ liệu bằng cách phát triển các giá trị dương và âm lớn để hàm đa thức tương ứng khớp chính xác với từng điểm dữ liệu, nhưng giữa các điểm dữ liệu (đặc biệt là gần cuối của dữ liệu phạm vi) hàm thể hiện các dao động lớn.

Tôi không hiểu tại sao giá trị lớn hàm ý phù hợp chặt chẽ hơn với các điểm dữ liệu. Tôi nghĩ rằng các giá trị sẽ trở nên chính xác hơn sau số thập phân thay vì phù hợp hơn.


cuốn sách xem xét y= =STôin(2*π*x)+ε x tại 10 điểm cách đều nhau trong [0,1] trong đó ε là gaussian với giá trị trung bình bằng 0 và phương sai 'nhỏ' (vì vậy hãy xem xét khớp đa thức 9 chiều với 10 điểm ...
seanv507

Câu trả lời:


18

Đây là một vấn đề nổi tiếng với đa thức bậc cao, được gọi là hiện tượng Runge . Về mặt số lượng, nó được liên kết với điều kiện không phù hợp của ma trận Vandermonde , làm cho các hệ số rất nhạy cảm với các biến đổi nhỏ trong dữ liệu và / hoặc làm tròn trong các tính toán (nghĩa là mô hình không thể nhận dạng ổn định ). Xem thêm câu trả lời này trên SciComp SE.

Có nhiều giải pháp cho vấn đề này, ví dụ như xấp xỉ Ch Quashev , làm mịn các splinechính quy Tikhonov . Chính quy hóa Tikhonov là một khái quát của hồi quy sườn núi , xử phạt một tiêu chuẩn của vector hệ số θ , nơi cho mịn ma trận cân Λ là một số nhà khai thác phái sinh. Để trừng phạt dao động, bạn có thể sử dụng bước sóng q = p ' ' [ x ] , nơi p [ x ]||Λθ]||θΛΛθ= =p''[x]p[x] là đa thức được đánh giá tại dữ liệu.

EDIT: Câu trả lời của người dùng hxd1011 lưu ý rằng một số vấn đề về điều hòa không khí số có thể được giải quyết bằng đa thức trực giao, đây là một điểm tốt. Tuy nhiên, tôi sẽ lưu ý rằng các vấn đề nhận dạng với đa thức bậc cao vẫn còn. Đó là, điều hòa bệnh số có liên quan đến độ nhạy cảm với nhiễu loạn "vô hạn" (ví dụ: vòng tròn), trong khi điều hòa bệnh "thống kê" liên quan đến độ nhạy đối với nhiễu loạn "hữu hạn" (ví dụ như ngoại lệ; vấn đề nghịch đảo là không rõ ràng ).

Các phương pháp được đề cập trong đoạn thứ hai của tôi có liên quan đến độ nhạy ngoại lệ này . Bạn có thể coi độ nhạy này là vi phạm mô hình hồi quy tuyến tính tiêu chuẩn, bằng cách sử dụng sai số giả định ngầm định dữ liệu là Gaussian. Splines và Tikhonov chính quy hóa đối phó với độ nhạy ngoại lệ này bằng cách áp đặt một độ mịn trước khi phù hợp. Chebyshev giao dịch xấp xỉ với điều này bằng cách sử dụng một L misfit áp dụng trong miền liên tục , tức là không chỉ ở các điểm dữ liệu. Mặc dù đa thức Ch Quashev là trực giao (ghi một sản phẩm bên trong có trọng số nhất định), tôi tin rằng nếu được sử dụng với L 2 sai đối với dữ liệu, chúng vẫn sẽL2LL2 có độ nhạy ngoại lệ.


@ hxd1011 là đúng, và tôi đã đưa ra ví dụ về đa thức Ch Quashev. Các đa thức trực giao sẽ luôn luôn giải quyết vấn đề trong thực tế, nếu có các ngoại lệ và dữ liệu không phù hợp vẫn là ? Tôi nghĩ rằng hiện tượng Runge vẫn sẽ gây ra các vấn đề về độ tin cậy trong các hệ số trong trường hợp này (nghĩa là đối với các nhiễu loạn hữu hạn / lớn trên dữ liệu, so với L2
vòng tròn

1
+1. Nice trên các nhận xét. Đối với bất cứ ai tự hỏi nó đến từ đâu, nghiên cứu làm thế nào mịn splines hoạt động là mở mắt. p"
Matthew Drury

1
Tôi có thể tìm hiểu thêm về hoạt động kinh doanh "điều kiện xấu của ma trận vandermonde" này ở đâu?
Matthew Drury

@MatthewDrury Tôi cũng thường làm theo cách tiếp cận theo kinh nghiệm được đề xuất bởi hxd1011. Tuy nhiên, sau khi truy vấn của bạn, Google đã tiết lộ một bài báo gần đây cũng có thể được quan tâm: Ma trận Vandermonde xấu đến mức nào? (VY Pan, 2015) . (Ví dụ, anh ấy giải quyết tại sao ma trận DFT là Vandermonde nhưng không bị điều hòa.)
GeoMatt22

Cảm ơn @ GeoMatt22. Xin lỗi để làm cho bạn google cho tôi, tôi hỏi vì tôi nghĩ bạn có thể có một số nguồn yêu thích cá nhân.
Matthew Drury

8

Điều đầu tiên bạn muốn kiểm tra là nếu tác giả đang nói về đa thức thô so với đa thức trực giao .

Đối với đa thức trực giao. hệ số không được "lớn hơn".

Dưới đây là hai ví dụ về mở rộng đa thức bậc 2 và 15. Đầu tiên chúng tôi hiển thị hệ số cho mở rộng thứ 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

Sau đó, chúng tôi hiển thị thứ 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

Lưu ý rằng, chúng tôi đang sử dụng đa thức trực giao , vì vậy hệ số của bậc thấp hơn hoàn toàn giống với các điều khoản tương ứng trong kết quả của bậc cao hơn. Ví dụ, phần chặn và hệ số cho đơn hàng đầu tiên là 20,09 và -29,11 cho cả hai mô hình.

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

Tôi không chắc cú pháp là đúng, nhưng tại sao bạn không đối chiếu kết quả của trực giao v thô với một cái gì đó dọc theo dòngsummary(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 đề nghị tốt, tôi sẽ sửa lại. BTW, chúng ta có thể dễ dàng thực hiện mở rộng thô bằng cáchpoly(x,2,raw=T)
Haitao Du

Thủ thuật hay ... tôi đoán, sau đó, bạn có thể bám vào 15, và làm summary(lm(mpg~poly(wt,15, raw=T),mtcars)). Hiệu ứng lớn trong các hệ số!
Antoni Parellada

Một nhận xét về câu trả lời của tôi bởi @ seanv507 khiến tôi tò mò về những điều sau đây. Nếu bạn sử dụng đa thức trực giao và muốn giảm độ nhạy cảm với các ngoại lệ, liệu hồi quy sườn tiêu chuẩn có đủ không? Hoặc các đa thức bậc cao hơn, dao động hơn vẫn yêu cầu trọng số ~ thứ tự? (Tôi nghĩ sau này, như ví dụ một DFT ma trận là trực giao, nhưng downweighting tần số cao vẫn sẽ là cần thiết tôi đã có (khó chịu) Trải nghiệm với trường hợp cụ thể này.!)
GeoMatt22

3

Abhishek, bạn đã đúng rằng cải thiện độ chính xác của các hệ số sẽ cải thiện độ chính xác.

Chúng ta thấy rằng, khi M tăng, độ lớn của các hệ số thường lớn hơn. Đặc biệt với đa thức M = 9, các hệ số đã được điều chỉnh chính xác cho dữ liệu bằng cách phát triển các giá trị dương và âm lớn để hàm đa thức tương ứng khớp chính xác với từng điểm dữ liệu, nhưng giữa các điểm dữ liệu (đặc biệt là gần cuối của dữ liệu phạm vi) hàm thể hiện dao động lớn.

Tôi nghĩ rằng vấn đề tầm quan trọng không liên quan đến quan điểm chung của Giám mục - rằng việc sử dụng một mô hình phức tạp trên dữ liệu hạn chế dẫn đến 'quá mức'. Trong ví dụ của mình, 10 datapoint được sử dụng để ước tính đa thức 9 chiều (tức là 10 biến và 10 ẩn số).

Nếu chúng ta điều chỉnh một sóng hình sin (không có nhiễu), thì sự phù hợp đó hoạt động hoàn hảo, vì sóng hình sin [trong một khoảng thời gian cố định] có thể được xấp xỉ với độ chính xác tùy ý bằng cách sử dụng đa thức. Tuy nhiên, trong ví dụ của Giám mục, chúng ta có một lượng 'tiếng ồn' nhất định mà chúng ta không nên phù hợp. Cách chúng ta làm điều này là bằng cách giữ số lượng điểm dữ liệu cho số lượng biến mô hình (hệ số đa thức) lớn hoặc bằng cách sử dụng chính quy. Đa thức bậc 9 phù hợp với 10 điểm dữ liệu trên (0,1)

Chính quy hóa áp đặt các ràng buộc 'mềm' cho mô hình (ví dụ: trong hồi quy sườn) hàm chi phí bạn cố gắng giảm thiểu là sự kết hợp giữa 'lỗi phù hợp' và độ phức tạp của mô hình: ví dụ: trong hồi quy sườn, độ phức tạp được đo bằng tổng các hệ số bình phương - trong hiệu ứng này sẽ gây ra chi phí cho việc giảm lỗi - tăng hệ số sẽ chỉ được phép nếu nó có mức giảm đủ lớn trong lỗi lắp [mức lớn đủ lớn được chỉ định bởi một số nhân theo thuật ngữ độ phức tạp của mô hình]. Do đó, hy vọng là bằng cách chọn hệ số nhân thích hợp, chúng tôi sẽ không phù hợp với thuật ngữ tiếng ồn nhỏ bổ sung, vì sự cải thiện về độ phù hợp không biện minh cho việc tăng hệ số.

Bạn hỏi tại sao các hệ số lớn cải thiện chất lượng của sự phù hợp. Về cơ bản, lý do là hàm ước tính (sin + nhiễu) không phải là đa thức và những thay đổi lớn về độ cong cần thiết để ước tính hiệu ứng nhiễu với đa thức đòi hỏi các hệ số lớn.

Lưu ý rằng việc sử dụng đa thức trực giao không có hiệu lực (tôi đã thêm phần bù 0,1 chỉ để đa thức trực giao và đa thức không nằm chồng lên nhau)

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'))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.