Чому існують великі коефіцієнти для поліномів вищого порядку


13

У книзі Бішопа про машинне навчання він обговорює проблему притаманння кривої функції полінома до набору точок даних.

Нехай M - порядок встановленого многочлена. У ньому йдеться про те

Ми бачимо, що по мірі збільшення М величина коефіцієнтів зазвичай збільшується. Зокрема, для многочлена M = 9 коефіцієнти стали точно налаштовані на дані, розвиваючи великі позитивні та негативні значення, щоб відповідна поліноміальна функція відповідала точно кожній із точок даних, але між точками даних (особливо біля кінців діапазон) функція проявляє великі коливання.

Я не розумію, чому великі значення мають на увазі більш тісне пристосування даних. Я думаю, що значення стануть більш точними після десяткових, а не для кращого розміщення.


книга розглядає x у 10 однаково розташованих точках у [ 0 , 1 ], де ϵ гауссова з нульовою середньою та «малою» дисперсією (тому враховуючи пристосування 9-мірного полінома до 10 бали ...y=sin(2πx)+ϵ[0,1]ϵ
seanv507

Відповіді:


18

Це добре відома проблема з поліномами високого порядку, відомими як феномен Рунге . Чисельно це пов'язано з поганої обумовленості з матриці Вандермонда , що робить коефіцієнти дуже чутливі до малих змін даних і / або округлення в розрахунках (тобто модель не стабільно ідентифікувати ). Дивіться також цю відповідь у SciComp SE.

Існує багато рішень цієї проблеми, наприклад, наближення Чебишева , згладжування сплайнів і регуляризація Тихонова . Регуляризація Тихонова - це узагальнення регресії хребта , що карає нормою коефіцієнта вектора θ , де для згладжування вагової матриці Λ є деякий похідний оператор. Щоб скасувати коливання, ви можете використовувати Λ θ = p [ x ] , де p [ x ]||Λθ]||θΛΛθ=p[x]p[x] - поліном, оцінений за даними.

EDIT: Відповідь користувача hxd1011 зазначає, що деякі чисельні проблеми поганого кондиціонування можна вирішити за допомогою ортогональних многочленів, що є хорошим моментом. Однак зауважу, що проблеми з ідентифікацією поліномів високого порядку все ще залишаються. Тобто, чисельне жорстоке кондиціонування пов’язане з чутливістю до "нескінченно малих" збурень (наприклад, округлення), тоді як "статистичне" жорстоке кондиціонування стосується чутливості до "кінцевих" збурень (напр., Інвалідність; обернена проблема неправомірна ).

L2LL2 мають зовнішню чутливість.


L2

1
p

1
Де я можу дізнатись більше про цю справу "поганого кондиціонування матриці вандермондів"?
Меттью Друрі

@MatthewDrury Я зазвичай також виконую емпіричний підхід, запропонований hxd1011. Однак після вашого запиту швидкий Google виявив нещодавній документ, який також може зацікавити: Наскільки погані матриці Вандермонд? (В.Я. Пан, 2015) . (Наприклад, він звертається до уваги, чому матриці DFT є Vandermonde, але не погано обумовлені.)
GeoMatt22

Дякуємо @ GeoMatt22. Вибачте за те, що ви зробили Google для мене, я запитав, бо думав, що у вас можуть бути якісь улюблені джерела.
Метью Друрі

8

Перше, що ви хочете перевірити, - це якщо автор говорить про необроблені многочлени проти ортогональних многочленів .

Для ортогональних многочленів. коефіцієнт не стає "більшим".

Ось два приклади розширення поліномів 2-го та 15-го порядку. Спочатку показуємо коефіцієнт розширення 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

Зауважимо, що ми використовуємо ортогональні поліноми , тому коефіцієнт нижчого порядку точно такий же, як і відповідні доданки в результатах вищого порядку. Наприклад, перехоплення та коефіцієнт для першого замовлення становить 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))
Antoni Parellada

@AntoniParellada гарна пропозиція, я перегляну. До речі, ми можемо легко зробити розширення сировини за допомогоюpoly(x,2,raw=T)
Хайтао Дю

Хороший трюк ... Я думаю, значить, ви можете дотримуватися 15, і робити summary(lm(mpg~poly(wt,15, raw=T),mtcars)). Масовий ефект у коефіцієнтах!
Антоні Пареллада

Коментар до моєї відповіді від @ seanv507 змусив мене цікавитись наступним. Якщо ви використовуєте ортогональні поліноми і хочете знизити чутливість до інших людей, чи буде тоді достатньою стандартною регресією хребта? Або б більш коливальні поліноми вищого порядку все ж вимагали зважування ~ порядку? (Я думаю, що остання, як, наприклад, матриця DFT є ортогональною, але все ж потрібні будуть високі частоти. У мене був (неприємний) досвід роботи з цим конкретним випадком!)
GeoMatt22

3

Абхішек, ви праві, що підвищення точності коефіцієнтів підвищить точність.

Ми бачимо, що по мірі збільшення М величина коефіцієнтів зазвичай збільшується. Зокрема, для многочлена M = 9 коефіцієнти стали чітко налаштовані на дані, розвиваючи великі позитивні та негативні значення, щоб відповідна поліноміальна функція відповідала точно кожній із точок даних, але між точками даних (особливо біля кінців діапазон) функція проявляє великі коливання.

Я вважаю, що питання масштабу є неактуальним для загальної точки Бішопа - що використання складної моделі з обмеженими даними призводить до «перевищення». У його прикладі 10 точок даних використовуються для оцінки 9-мірного многочлена (тобто 10 змінних і 10 невідомих).

Якщо ми підходимо до синусоїди (без шуму), то пристосування справно працює, оскільки синусоїди [через фіксований інтервал] можна наблизити з довільною точністю за допомогою многочленів. Однак у прикладі Бішопа у нас є певна кількість «шуму», до якого ми не повинні підходити. Ми це робимо, підтримуючи велику кількість точок даних до кількості змінних моделі (коефіцієнти поліномів) або використовуючи регуляризацію. Поліном 9-го порядку підходить до 10 точок на (0,1)

Регуляризація накладає «м'які» обмеження на модель (наприклад, у регресії хребта) функція витрат, яку ви намагаєтеся мінімізувати, є поєднанням «помилки підгонки» та складності моделі: наприклад, при регресії хребта складність вимірюється сумою квадратних коефіцієнтів - в Ефект це накладає витрати на зменшення похибки - збільшення коефіцієнтів буде дозволено лише в тому випадку, якщо воно має досить велике зменшення похибки розміщення [наскільки велика є достатньо великою, визначається множником на термін складності моделі]. Тому сподіваємось, що, вибравши відповідний множник, ми не підходимо до додаткового невеликого шуму, оскільки поліпшення придатності не виправдовує збільшення коефіцієнтів.

Ви запитали, чому великі коефіцієнти покращують якість пристосування. По суті, причина полягає в тому, що оцінена функція (sin + шум) не є многочленом, а великі зміни кривизни, необхідні для наближення ефекту шуму з поліномами, вимагають великих коефіцієнтів.

Зауважте, що використання ортогональних многочленів не дає ефекту (я додав зміщення 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'))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.