Почему существуют большие коэффициенты для полинома высшего порядка?


13

В книге Бишопа по машинному обучению обсуждается проблема подгонки полиномиальной функции к набору точек данных.

Пусть M - порядок подогнанного многочлена. Это утверждает, что

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

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


книга рассматривает x в 10 одинаково разнесенных точках в [ 0 , 1 ], где ϵ гауссово с нулевым средним и «малой» дисперсией (поэтому рассматривает подгонку 9-мерного полинома с 10 Очки ...y=sin(2πx)+ϵ[0,1]ϵ
seanv507

Ответы:


18

Это хорошо известная проблема с полиномами высокого порядка, известная как феномен Рунге . Численно это связано с плохой подготовкой матрицы Вандермонда , что делает коэффициенты очень чувствительными к небольшим изменениям данных и / или округлению в вычислениях (т. Е. Модель не является устойчиво идентифицируемой ). Смотрите также этот ответ на SciComp SE.

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

РЕДАКТИРОВАТЬ: Ответ пользователя hxd1011 отмечает, что некоторые из числовых проблем плохой обусловленности могут быть решены с помощью ортогональных полиномов, что является хорошим моментом. Однако я хотел бы отметить, что проблемы идентификации с полиномами высокого порядка все еще остаются. То есть числовое плохое обусловление связано с чувствительностью к «бесконечно малым» возмущениям (например, округление), в то время как «статистическое» плохое обусловление касается чувствительности к «конечным» возмущениям (например, выбросы; обратная задача некорректна ).

Методы, упомянутые в моем втором абзаце, касаются этой чувствительности к выбросам . Вы можете думать об этой чувствительности как о нарушении стандартной модели линейной регрессии, которая при использовании несоответствия неявно предполагает, что данные являются гауссовыми. Сплайновая и тихоновская регуляризация справляются с этой чувствительностью выбросов путем наложения гладкости перед подбором. Чебышевское приближение решает эту проблему, используя несоответствие L ∞, примененное над непрерывной областьюL2L , т.е. не только в точках данных. Хотя полиномы Чебышева являются ортогональными (по отношению к некоторому взвешенному внутреннему произведению), я полагаю, что при использовании с имеют более высокую чувствительность.L2 несоответствием по данным они все равно


@ hxd1011, это правда, и я привел пример полиномов Чебышева. Будут ли ортогональные полиномы всегда решать проблему на практике, если есть выбросы и несоответствие данных все еще равно ? Я думаю, что в этом случае явление Рунге по-прежнему будет вызывать проблемы с надежностью коэффициентов (т. L2
Е.

1
+1. Приятно комментировать . Для тех, кто интересуется, откуда это взялось, изучение работы сглаживающих сплайнов является открытием глаз. p
Мэтью Друри

1
Где я могу узнать больше об этом "плохом кондиционировании матрицы Вандермонда"?
Мэтью Друри

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

Спасибо @ GeoMatt22. Извините, что заставил вас гуглить для меня, я спросил, так как думал, что у вас могут быть некоторые личные любимые источники
Мэтью Друри

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 для обеих моделей.

С другой стороны, если мы используем необработанное расширение, такого не произойдет. И у нас будут большие и чувствительные коэффициенты! В следующем примере мы видим, что коэффициенты примерно в уровне 6 .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

Я не уверен, что синтаксис правильный, но почему бы вам не сравнить результаты orthogonal v raw с чем-то вроде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))
Антони Пареллада,

@AntoniParellada хорошее предложение, я буду пересматривать. Кстати, мы можем легко сделать необработанное расширениеpoly(x,2,raw=T)
Haitao Du

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

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

3

Абхишек, ты прав, что повышение точности коэффициентов повысит точность.

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

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

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

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

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

Обратите внимание, что использование ортогональных многочленов не имеет никакого эффекта (я добавил смещение 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.