(Чому) у переоснащених моделей властиві великі коефіцієнти?


33

Я думаю, що чим більший коефіцієнт змінної, тим більше здатність моделі до того, щоб «розгойдуватися» в цьому вимірі, забезпечуючи збільшену можливість підключення шуму. Хоча я думаю, що у мене є розумний сенс взаємозв'язку між дисперсією моделі та великими коефіцієнтами, я не маю настільки хорошого розуміння того, чому вони трапляються в моделях з надлишком. Невірно сказати, що вони є симптомом надмірного оснащення, а коефіцієнт усадки - це більше техніка зменшення дисперсії в моделі? Регуляризація через зменшення коефіцієнтів, здається, працює за принципом, що великі коефіцієнти є результатом переозброєної моделі, але, можливо, я неправильно трактую мотивацію цієї техніки.

Моя інтуїція, що великі коефіцієнти, як правило, є симптомом надмірного пристосування, випливає з наступного прикладу:

Скажімо, ми хотіли помістити n точок, які всі сидять на осі x. Ми можемо легко побудувати поліном, рішенням якого є ці точки: . Скажімо, наші точки знаходяться при . Ця методика дає всі коефіцієнти> = 10 (крім одного коефіцієнта). Оскільки ми додамо більше точок (і тим самим збільшуємо ступінь многочлена), величина цих коефіцієнтів швидко зросте.f(x)=(xx1)(xx2)....(xxn1)(xxn)x=1,2,3,4

Цей приклад полягає в тому, як я зараз пов'язую розмір коефіцієнтів моделі із "складністю" згенерованих моделей, але я стурбований тим, що цей випадок повинен бути стерильним, щоб дійсно свідчити про поведінку в реальному світі. Я навмисно побудував переозброєну модель (поліном 10-го ступеня OLS, що підходить для даних, сформованих з квадратичної моделі вибірки) і був здивований, побачивши в своїй моделі переважно невеликі коефіцієнти:

set.seed(123)
xv = seq(-5,15,length.out=1e4)
x=sample(xv,20)
gen=function(v){v^2 + 7*rnorm(length(v))}
y=gen(x)
df = data.frame(x,y)

model = lm(y~poly(x,10,raw=T), data=df)
summary(abs(model$coefficients))
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# 0.000001 0.003666 0.172400 1.469000 1.776000 5.957000


data.frame(sort(abs(model$coefficients)))
#                                   model.coefficients
# poly(x, 10, raw = T)10                  7.118668e-07
# poly(x, 10, raw = T)9                   3.816941e-05
# poly(x, 10, raw = T)8                   7.675023e-04
# poly(x, 10, raw = T)7                   6.565424e-03
# poly(x, 10, raw = T)6                   1.070573e-02
# poly(x, 10, raw = T)5                   1.723969e-01
# poly(x, 10, raw = T)3                   6.341401e-01
# poly(x, 10, raw = T)4                   8.007111e-01
# poly(x, 10, raw = T)1                   2.751109e+00
# poly(x, 10, raw = T)2                   5.830923e+00
# (Intercept)                             5.956870e+00

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

Чи є (L2) регуляризація лише механізмом зменшення дисперсії в моделі і тим самим "згладжує" криву для кращого пристосування до майбутніх даних, чи це скористатися евристикою, отриманою з спостереження, що перефіфіковані моделі мають великі коефіцієнти? Чи точне твердження про те, що у переоснащених моделей є великі коефіцієнти? Якщо так, чи може хтось трохи пояснити механізм, що стоїть за явищем, та / або направити мене на деяку літературу?


4
Що саме ви маєте на увазі під «великим» коефіцієнтом? Зрештою, якщо ми просто змінимо одиниці, в яких ми виражаємо залежну змінну (наприклад, від parsecs до femtometers), ми можемо зробити коефіцієнти довільно великими або малими за значенням.
whuber

1
Я не маю гарної відповіді на це. Я розумію, що атака на "великі" коефіцієнти є мотивуючим евристикою за регуляризацією L2. Але синтетичне збільшення коефіцієнтів вимагає також зміни константи регуляризації для компенсації різної величини в моделі, чи не так? Я не думаю, що поняття "великого" тут настільки неоднозначне, як ви робите це, навіть якщо я не можу його охарактеризувати дуже добре.
Девід Маркс

@DavidMarx: Я не думаю, що регуляризація L2 йде за "великими" коефіцієнтами, чи не так? Швидше це, як правило, підштовхують коефіцієнти, які, ймовірно, не були порівняно великими до нуля, в певному сенсі змушують вас вибирати, а не знаходити компроміс між ними.
Уейн

@wayne ах, я думаю, я мав це назад. Я думав, що вона зменшить більші коефіцієнти або зменшить всі коефіцієнти пропорційно. Це було б більше сенсу, якби регуляризація L2 витіснила змінні з меншими коефіцієнтами з моделі.
Девід Маркс

1
Після 8 редагувань я думаю, що я відповів. Шиш.
Hong Ooi

Відповіді:


15

У контексті регуляризації "великий" коефіцієнт означає, що величина оцінки більша, ніж була б, якби специфікація фіксованої моделі була використана . Вплив отримання даних не лише оцінок, але й специфікації моделі.

Поміркуйте, що зробить така процедура, як покрокова регресія для даної змінної. Якщо оцінка його коефіцієнта невелика відносно стандартної похибки, вона випаде з моделі. Це може бути тому, що справжнє значення дійсно невелике, або просто через випадкову помилку (або комбінацію двох). Якщо воно впало, то ми більше не звертаємо на це ніякої уваги. З іншого боку, якщо оцінка велика відносно її стандартної помилки, вона буде збережена. Помітьте дисбаланс: наша кінцева модель відхилить змінну, коли оцінка коефіцієнта невелика, але ми збережемо її, коли оцінка велика. Таким чином, ми, ймовірно, завищуємо його значення.

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

stepβ3β10

Ось приклад того, про що я говорю.

repeat.exp <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(step(lm(y ~ x1, data=d), y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10, trace=0))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z <- repeat.exp(M=1000)

# some time later...
rowMeans(abs(z), na.rm=TRUE)

(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    3.162100    6.533642    3.108974    3.204341    3.131208    3.118276    3.217231    3.293691    3.149520    3.073062 

β3β10

repeat.exp.base <- function(M)
{
    x <- seq(-2, 2, len=25)
    px <- poly(x, 10)
    colnames(px) <- paste0("x", 1:10)
    out <- setNames(rep(NA, 11), c("(Intercept)", colnames(px)))
    sapply(1:M, function(...) {
        y <- x^2 + rnorm(N, s=2)
        d <- data.frame(px, y)
        b <- coef(lm(y ~ ., data=d))
        out[names(b)] <- b
        out
    })
}

set.seed(53520)
z2 <- repeat.exp.base(M=1000)

rowMeans(abs(z2))
(Intercept)          x1          x2          x3          x4          x5          x6          x7          x8          x9         x10 
   1.453553    1.676066    6.400629    1.589061    1.648441    1.584861    1.611819    1.607720    1.656267    1.583362    1.556168 

β1β2


Мене трохи бентежить ваш модифікований приклад. Ви кажете, що "Ви повинні виявити, що всі оцінки коефіцієнтів β3 до β10 систематично занадто великі, якщо порівнювати їх із неперемінним виділенням", але, здається, ви отримали більші значення в першому експерименті (з step), ніж у вашому другому експерименті (значення "сліпо"). Чи це не суперечить тому, що ви запропонували?
Девід Маркс

Також ви та інші тут запропонували мені стандартизувати змінні в моєму прикладі. Я бачу міркування, але не знаю, як це зробити. Чи слід покращувати мої вибіркові дані, щоб включати стовпці для кожної потужності X і стандартизувати ці значення? Або є спосіб я стандартизувати змінні безпосередньо у формулі моєї моделі, куди я дзвоню poly(гадаю, ні)?
Девід Маркс

? Ви отримуєте більші абсолютні відхилення при використанні ступінчасто, порівняно з невикористанням. Не впевнений, що ви просите. Що стосується стандартизації: це зайве, якщо ви робите це, як я розмістив, тобто роблячи порівняння між поетапним та некроковим підходом. Кожна змінна порівнюється від однієї обробки до іншої, а не до інших змінних.
Hong Ooi

6

Один дуже простий відповідь, не дивлячись на ваші деталі: Коли ви переозброюєте, оцінювачі параметрів, як правило, отримують великі відхилення, а при великих відхиленнях великі значення - це саме те, чого слід очікувати!


Якщо я вас правильно зрозумів, це пояснило б, чому модель передбачає "великі" значення, а не чому модель складається з "великих" коефіцієнтів.
Девід Маркс

Ні, це неправильно! Принаймні деякі оцінки окремих коефіцієнтів матимуть великі розбіжності, тому розрахункові значення цих коефіцієнтів будуть, як правило, великими. (з нашої точки зору, навіть при перевищенні, деякі коефіцієнти можуть бути стабільними, але не всі). Крім того, для збереження властивості неупередженості прогнозування, як правило, існують великі негативні коваріації між незалежними оцінками коефіцієнтів.
kjetil b halvorsen

1
Однак це не повністю відповідає на питання. Якби це була лише проблема великих розбіжностей, то ви отримаєте невеликі оцінки так само часто, як і великі (неофіційно кажучи). Проблема полягає в тому, що тоді ми припускаємо, що невеликі оцінки (щодо їх std-помилок) є "неважливими" і скидають ці змінні з моделі. В результаті єдиними оцінками, що залишилися, будуть великі.
Hong Ooi

0

Девід. Я думаю, що проблема у вашому прикладі полягає в тому, що ви не нормалізували свої дані (тобто X ^ 10 >> X.

Тож Девід правильно, що він скорочує більші коефіцієнти (тому ви можете отримати багато малих коефіцієнтів, тоді як регуляризація L1 може дати вам один великий, а решта нульовий)

так що в основному є інкапсуляція, що невеликі зміни повинні мати невеликі наслідки (і, звичайно, ми повертаємося до питання, наскільки мало - нормалізації ваших даних тощо). Але головне в більш високих вимірах, де кореляція вступає в гру: уявіть, у вас є дві змінні x, y, які сильно корелюються (обидві нормалізуються на дисперсію 1), тоді їх різниця буде невеликою = "шум" - тому великі ваги будуть штрафувати не дозволяють вам підходити до цього шуму (і отримувати дуже великі майже скасовуючі коефіцієнти для y і x).

Приклад все ще справедливий для будь-якого лінійного відношення (y = mx)

шукати регресу хребта


1
Девіде, чому ти не повториш приклад, нормалізуючи всі змінні x, x ^ 2, ..., x ^ n до нульового середнього та стандартного відхилення 1, а потім побачиш отримані результати ... це не дуже дивно, що коефіцієнти невеликі, коли ваші вхідні змінні великі
seanv507

0

демонстрація надмірного розміру

Це зображення з моєї записки курсу DL Ендрю Нґ, будь ласка, повідомте мене, якщо у вас є питання


1
Чи можете ви пояснити, чому ви вважаєте, що ця записка про регуляризацію нейронної мережі відповідає на питання про розміри коефіцієнтів та надлишковий розмір?
whuber

всі 3 пов’язані накладання - це саме те, що регуляризація намагається запобігти, і це намагається, караючи високий коефіцієнт через причину вище
Pradi KL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.