(Perché) i modelli sovralimentati tendono ad avere coefficienti elevati?


33

Immagino che maggiore è un coefficiente su una variabile, maggiore è la capacità del modello di "oscillare" in quella dimensione, offrendo una maggiore opportunità di adattamento al rumore. Anche se penso di avere un ragionevole senso della relazione tra la varianza nel modello e i coefficienti elevati, non ho la stessa idea del perché si verifichino nei modelli di overfit. È errato affermare che sono un sintomo di eccesso di adattamento e la riduzione del coefficiente è più una tecnica per ridurre la varianza nel modello? La regolarizzazione tramite il restringimento dei coefficienti sembra funzionare secondo il principio che i coefficienti elevati sono il risultato di un modello sovradimensionato, ma forse sto fraintendendo la motivazione alla base della tecnica.

La mia intuizione che i coefficienti di grandi dimensioni siano generalmente un sintomo di overfitting deriva dal seguente esempio:

Diciamo che volevamo inserire punti che si trovano tutti sull'asse x. Possiamo facilmente costruire un polinomio le cui soluzioni sono questi punti: . Supponiamo che i nostri punti siano . Questa tecnica fornisce tutti i coefficienti> = 10 (tranne un coefficiente). Man mano che aggiungiamo più punti (e quindi aumentiamo il grado del polinomio) l'entità di questi coefficienti aumenterà rapidamente.f ( x ) = ( x - x 1 ) ( x - x 2 ) . . . . ( x - x n - 1 ) ( x - x n ) x = 1 , 2 , 3 , 4nf(x)=(x-x1)(X-X2)....(X-Xn-1)(X-Xn)x=1,2,3,4

Questo esempio è come sto attualmente collegando la dimensione dei coefficienti del modello con la "complessità" dei modelli generati, ma sono preoccupato che questo caso sia sterile per essere davvero indicativo del comportamento nel mondo reale. Ho deliberatamente costruito un modello sovradimensionato (un OLS polinomiale di decimo grado si adattava ai dati generati da un modello di campionamento quadratico) e sono rimasto sorpreso nel vedere coefficienti per lo più piccoli nel mio modello:

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

Forse il take-away di questo esempio è che due terzi dei coefficienti sono inferiori a 1 e rispetto agli altri coefficienti , ci sono tre coefficienti insolitamente grandi (e le variabili associate a questi coefficienti sono anche quelle più vicine in relazione al vero modello di campionamento).

La regolarizzazione (L2) è solo un meccanismo per ridurre la varianza in un modello e quindi "smussare" la curva per adattarsi meglio ai dati futuri, o sta sfruttando un euristico derivato dall'osservazione che i modelli sovrastampati tendono a presentare coefficienti elevati? È un'affermazione accurata che i modelli sovradimensionati tendono a presentare coefficienti elevati? Se è così, qualcuno può forse spiegare un po 'il meccanismo alla base del fenomeno e / o indirizzarmi verso qualche letteratura?


4
Cosa intendi esattamente con un coefficiente "grande"? Dopotutto, se cambiamo semplicemente le unità in cui esprimiamo la variabile dipendente (come da parsecs a femtometri) possiamo rendere i coefficienti arbitrariamente grandi o piccoli in valore.
whuber

1
Non ho una buona risposta per questo. La mia comprensione era che attaccare coefficienti "grandi" era una euristica motivante alla base della regolarizzazione di L2. Ma aumentare sinteticamente l'entità dei coefficienti richiederebbe anche cambiare la costante di regolarizzazione per compensare la diversa grandezza nel modello ora, no? Non penso che l'idea di "grande" qui sia ambigua come la fai sembrare, anche se non riesco a caratterizzarla molto bene.
David Marx,

@DavidMarx: non penso che la regolarizzazione L2 segua coefficienti "grandi", vero? Piuttosto tende a spingere coefficienti che probabilmente non erano relativamente grandi a zero, in un certo senso costringendoti a scegliere piuttosto che trovare un compromesso tra i due.
Wayne,

@wayne ah, penso di averlo fatto al contrario. Avevo pensato che avesse ridotto i coefficienti più grandi o ridotto tutti i coefficienti in modo proporzionale. Ciò avrebbe più senso se la regolarizzazione L2 spingesse fuori dal modello le variabili con coefficienti più piccoli.
David Marx,

1
Dopo 8 modifiche, penso di avere la mia risposta giù. Sheesh.
Hong Ooi,

Risposte:


15

Nel contesto della regolarizzazione un coefficiente "grande" significa che l'entità della stima è maggiore di quanto sarebbe stata se fosse stata utilizzata una specifica del modello fissa . È l'impatto dell'ottenimento non solo delle stime, ma anche delle specifiche del modello, dai dati.

Considera cosa farà una procedura come la regressione graduale per una determinata variabile. Se la stima del suo coefficiente è piccola rispetto all'errore standard, verrà eliminata dal modello. Ciò potrebbe essere dovuto al fatto che il valore reale è veramente piccolo o semplicemente a causa di un errore casuale (o una combinazione dei due). Se viene lasciato cadere, non prestiamo più attenzione. D'altra parte, se la stima è grande rispetto al suo errore standard, verrà mantenuta. Notare lo squilibrio: il nostro modello finale rifiuterà una variabile quando la stima del coefficiente è piccola, ma la terremo quando la stima è grande. Pertanto è probabile che sopravvalutiamo il suo valore.

Detto in altro modo, ciò che significa overfitting è che stai sopravvalutando l'impatto di un determinato set di predittori sulla risposta. Ma l'unico modo per sopravvalutare l'impatto è se i coefficienti stimati sono troppo grandi (e viceversa, le stime per i predittori esclusi sono troppo piccole).

stepβ3β10

Ecco un esempio di ciò di cui sto parlando.

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


Sono un po 'confuso dal tuo esempio modificato. Dici che "Dovresti scoprire che tutte le stime dei coefficienti da β3 a β10 sono sistematicamente troppo grandi, rispetto al non utilizzo della selezione variabile", ma sembra che tu abbia ottenuto valori maggiori nel tuo primo esperimento (con step) rispetto al secondo esperimento (valori di adattamento "alla cieca"). Non è forse contrario a ciò che stavi suggerendo?
David Marx,

Inoltre, tu e altri qui avete suggerito che dovrei standardizzare le variabili nel mio esempio. Vedo il ragionamento, ma non conosco un buon modo per farlo. Devo migliorare i miei dati di esempio per includere colonne per ogni potenza di X e standardizzare quei valori? Oppure c'è un modo in cui posso standardizzare le variabili direttamente nella mia formula del modello in cui chiamo poly(suppongo di no)?
David Marx,

? Si ottengono deviazioni assolute maggiori quando si utilizza stepwise, rispetto al non usare stepwise. Non sono sicuro di quello che stai chiedendo. Per quanto riguarda la standardizzazione: non è necessario se lo fai come ho pubblicato, cioè facendo un confronto tra l'approccio graduale e non graduale. Ogni variabile viene confrontata da un trattamento all'altro, piuttosto che alle altre variabili.
Hong Ooi,

6

Una risposta molto semplice senza esaminare i tuoi dettagli: quando sei troppo adatto, gli stimatori dei parametri tendono a ottenere grandi variazioni e con grandi variazioni i valori di grandi dimensioni sono esattamente ciò che dovresti aspettarti!


Se ti capissi correttamente, questo spiegherebbe perché il modello dovrebbe prevedere valori "grandi", non perché il modello dovrebbe essere costituito da coefficienti "grandi".
David Marx,

No, è sbagliato! Almeno alcuni dei singoli stimatori dei coefficienti avranno grandi variazioni, quindi i valori stimati di tali coefficienti tenderanno ad essere grandi. (ovviamente, anche in caso di overfitting, alcuni coefficienti potrebbero essere stabili, ma non tutti). Inoltre, per mantenere l'imparzialità della predizione, si tende ad avere alcune grandi covarianze negative tra stimatori di coefficienti indipendenti.
kjetil b halvorsen,

1
Questo, tuttavia, non risponde completamente alla domanda. Se fosse solo un problema di grandi variazioni, allora otterresti piccole stime tanto spesso quanto grandi (informalmente parlando). Il problema è quando assumiamo quindi piccole stime (relative ai loro errori std) che sono "non importanti" e eliminiamo quelle variabili dal modello. Di conseguenza, le uniche stime rimaste saranno quelle grandi.
Hong Ooi,

0

David. Penso che il problema con il tuo esempio sia che non hai normalizzato i tuoi dati (ad es. X ^ 10 >> X.

Quindi David ha ragione nel ridurre di più i coefficienti più grandi (quindi puoi finire con molti piccoli coefficienti, mentre la regolarizzazione L1 potrebbe darti uno grande e il resto zero)

quindi fondamentalmente è incapsulando che piccoli cambiamenti dovrebbero avere piccoli effetti (e naturalmente torniamo al problema di quanto piccolo sia piccolo: normalizzare i tuoi dati ecc.). Ma la cosa fondamentale è nelle dimensioni più elevate, in cui entra in gioco la correlazione: immagina di avere due variabili x, y che sono altamente correlate (entrambe normalizzate alla varianza 1), quindi la loro differenza sarà piccola = "rumore" - penalizzando così i grandi pesi ti impedisce di adattarti a questo rumore (e di ottenere coefficienti quasi annullanti molto grandi per y e x).

L'esempio vale ancora per qualsiasi relazione lineare (y = mx)

cercare la regressione della cresta


1
david perché non rifai l'esempio normalizzando tutte le variabili x, x ^ 2, ..., x ^ n a zero media e deviazione standard 1, e poi vedi i risultati che ottieni ... non è molto sorprendente che il tuo i coefficienti sono piccoli quando le variabili di input sono grandi
seanv507

0

overfitting demo

Questa immagine è dalla mia nota del corso DL di Andrew Ng, per favore fatemi sapere se avete domande


1
Potresti spiegare perché pensi che questa nota sulla regolarizzazione della rete neurale risponda alla domanda sulle dimensioni dei coefficienti e sul sovradimensionamento?
whuber

tutti e 3 sono collegati a un overfitting è proprio quello che la regolarizzazione cerca di prevenire e tenta di penalizzare l'alto coefficiente a causa del motivo di cui sopra
Pradi KL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.