Qual è la regola .632+ nel bootstrap?


107

Qui @gung fa riferimento alla regola .632+. Una rapida ricerca su Google non fornisce una risposta di facile comprensione su cosa significhi questa regola e per quale scopo venga utilizzata. Qualcuno potrebbe chiarire la regola .632+?

Risposte:


115

Arriverò allo stimatore 0.632, ma sarà uno sviluppo piuttosto lungo:

Supponiamo di voler prevedere Y con X utilizzando la funzione f , dove f può dipendere da alcuni parametri stimati utilizzando i dati (Y,X) , ad esempio f(X)=Xβ

Una stima ingenua dell'errore di previsione è doveLè una funzione di perdita, ad es. Perdita di errore al quadrato. Questo è spesso chiamato errore di allenamento. Efron et al. lo chiama tasso di errore apparente o tasso di reintegrazione. Non è molto buono poiché usiamo i nostri dati(xi,yi)per adattarci af. Ciò comporta che¯errsia distorto verso il basso. Volete sapere quanto bene fa il vostro modellofnel prevedere nuovi valori.

err¯=1NΣio=1NL(yio,f(Xio))
L(Xio,yio)ferr¯f

Spesso utilizziamo la convalida incrociata come un modo semplice per stimare l'errore di predizione extra-campione atteso (in che misura il nostro modello fa i dati non nel nostro set di formazione?).

Err=E[L(Y,f(X))]

Un modo popolare per farlo è fare la validazione incrociata di -fold. Dividi i tuoi dati in gruppi K (ad es. 10). Per ogni gruppo k , adatta il tuo modello ai restanti gruppi K - 1 e testalo sul k esimo gruppo. Il nostro errore di predizione extra-validato con cross-validation è solo la media E r r C V = 1KKKK-1Kdoveκè una funzione di indice che indica la partizione a cuiè allocata l'osservazioneief-κ(i)(xi)è il valore previsto dixiutilizzando dati noncompresi nelsetκ(i).

ErrCV=1NΣio=1NL(yio,f-κ(io)(Xio))
κiof-κ(io)(Xio)Xioκ(io)

Questo stimatore è approssimativamente imparziale per il vero errore di previsione quando ha una varianza maggiore ed è più costoso dal punto di vista computazionale per K maggiore . Quindi, ancora una volta vediamo in gioco il compromesso tra distorsione e pregiudizio.K=NK

Invece della convalida incrociata potremmo usare il bootstrap per stimare l'errore di predizione extra-sample. Il ricampionamento Bootstrap può essere utilizzato per stimare la distribuzione campionaria di qualsiasi statistica. Se i nostri dati formazione è , allora possiamo pensare di prendere B campioni bootstrap (con sostituzione) da questo insieme Z 1 , ... , Z B dove ogni Z i è un insieme di N campioni . Ora possiamo usare i nostri campioni bootstrap per stimare l'errore di predizione di campioni extra: E r r bX=(X1,...,XN)BZ1,...,ZBZioNdovefb(xi)è il valore previsto inxidal modello adattatoall'insieme di dati bootstrapb. Sfortunatamente, questo non è uno stimatore particolarmente buono perché i campioni bootstrap usati per produrrefb(xi)potrebbero contenerexi

ErrBoot=1BΣB=1B1NΣio=1NL(yio,fB(Xio))
fB(Xio)XioBfB(Xio)Xio. Lo stimatore del bootstrap con esclusione offre un miglioramento imitando la convalida incrociata ed è definito come: doveC-iè l'insieme di indici per i campioni bootstrap che non contengono osservazionii, e| C-i| è il numero di tali campioni. Errboot(1)
Errboot(1)=1Ni=1N1|Ci|bCiL(yi,fb(xi))
Cii|Ci|Errboot(1)risolve il problema di overfitting, ma è ancora di parte (questo è di parte). Il bias è dovuto a osservazioni non distinte nei campioni bootstrap che risultano dal campionamento con la sostituzione. Il numero medio di osservazioni distinte in ciascun campione è di circa (vedere questa risposta per una spiegazione del perché Perché in media ciascun campione bootstrap contiene circa due terzi delle osservazioni? ). Per risolvere il problema di distorsione, Efron e Tibshirani hanno proposto lo stimatore 0.632: E r r .632 = 0.368 ¯ e r r + 0.632 E r r b o o t (0.632N dove ¯ e r r = 1
Err.632=0.368err¯+0.632Errboot(1)
è la stima ingenua dell'errore di predizione spesso chiamato errore di allenamento. L'idea è di mediare una stima distorta al ribasso e una stima distorta al rialzo.
err¯=1Ni=1NL(yi,f(xi))

Tuttavia, se disponiamo di una funzione di predizione molto attillata (ovvero ), anche lo stimatore .632 sarà distorto verso il basso. Lo stimatore .632+ è progettato per essere un compromesso meno distorto tra ¯ e r r ed E r r b o o t ( 1 ) . E r r .632 + = ( 1 - w ) ¯ e r r + w E r r b o oerr¯=0err¯ErrBoot(1) con w= 0.632

Err0,632+=(1-w)err¯+wErrBoot(1)
doveγè il tasso di errore senza informazioni, stimato valutando il modello di previsione su tutte le possibili combinazioni di obiettiviyie predittorixi.
w=0,6321-0.368ReR=ErrBoot(1)-err¯γ-err¯
γyioXio

.

γ=1N2Σio=1NΣj=1NL(yio,f(Xj))

Qui misura la relativa velocità di overfitting. Se non vi è alcun eccesso di valore (R = 0, quando E r r b o o t ( 1 ) = ¯ e r r ) questo è uguale allo stimatore .632.RErrBoot(1)=err¯


2
Queste sono buone domande, @rpierce, ma si allontanano in qualche modo dall'argomento centrale di questa discussione. Sarebbe meglio, in termini di organizzazione CV, inserirli in un nuovo thread, in modo che sia più facile per le persone trovare e utilizzare tali informazioni successivamente.
gung - Ripristina Monica



1
err¯=1NΣio=1NL(yio,f(Xio))1nΣio=1n(yio-y^io)2

1
@rpierce, sì! Ero un po 'generale perché stavo recyling molto di questo materiale da alcune note di classe.
bdeonovic,

53

Sn{1:n}S(1-e-1)n0.63212056n

S={S1,...,Sn}io=1,...,n{1:n}m{1:n}

Poi:

P(Sio=m)=1/n

e

P(Siom)=1-1/n

1ionio

così

P(mS)=1-P(mS)=1-P(io=1nSiom)=1-Πio=1nP(Siom)=1-(1-1/n)n1-e-1

n

n <- 100
fx01 <- function(ll,n){
    a1 <- sample(1:n, n, replace=TRUE)
    length(unique(a1))/n
}
b1 <- c(lapply(1:1000,fx01,n=100), recursive=TRUE)
mean(b1)

1. Bradley Efron e Robert Tibshirani (1997). Miglioramenti della convalida incrociata: il metodo .632+ Bootstrap . Journal of American Statistical Association , vol. 92, n. 438, pagg. 548-560.


3
ecco un documento per te in riferimento - stat.washington.edu/courses/stat527/s14/readings/…

1
(X1,...,Xn)S1,...,Sn . Risultato: P (P(Sio=K)=1nio{1,...,n}(K)P(io=1n{Sio=K})=1-P(io=1n{SioK})=1-Πio=1nP{SioK}=1-(1-1/n)n1-1/e63.21%

4
1-e-10.63212056

1
Anche questa risposta è ottima, infatti, la risposta accettata più questa risposta in realtà fornisce la risposta completa alla mia domanda - ma tra i due mi sento come se Benjamin fosse più vicino a quello che stavo cercando in una risposta. Detto questo, vorrei davvero che fosse possibile accettare entrambi.
russellpierce,

1
@rpierce: Per citare Celine Dion, "Storia vecchia come il tempo / canzone vecchia come la rima / La bella e la bestia". : P
Nick Stauner,

8

c


3
Non credo di aver capito la maggior parte delle cose che hai detto qui Frank. Saresti disposto a chiarire? Sembra che tu abbia qualcosa di unico e importante da contribuire.
Russellpierce,

Sono contento di espandersi se è possibile formulare una domanda specifica.
Frank Harrell,

1
Queste regole di punteggio stavano ... giudicando la qualità del risultato bootstrap? Potresti fornire un link che descriva la proporzione "classificata" che regola correttamente il punteggio, ho difficoltà a immaginare che tipo di bestia potrebbe essere. Tra i migliori risultati di "ottimismo Efron-Gong" su Google, la stragrande maggioranza sembra essere post da te ... come è diverso dal dire "bootstrap" senza le qualificazioni? Quale articolo di Effron e Gong dovrei cercare? Sembra che ce ne siano diversi.
russellpierce,

3
Vedi l'articolo originale su 0.632 che utilizza e definisce la proporzione correttamente classificata (Efron & Tibshirani JASA 92: 548; 1997). L'ottimismo bootstrap è una variante del bootstrap per stimare il bias. È descritto in Gong: JASA 85:20; 1990.
Frank Harrell,

2

Queste risposte sono molto utili. Non sono riuscito a trovare un modo per dimostrarlo con la matematica, quindi ho scritto del codice Python che funziona abbastanza bene anche se:

    from numpy import mean
    from numpy.random import choice

    N = 3000

    variables = range(N)

    num_loop = 1000
    # Proportion of remaining variables
    p_var = []

    for i in range(num_loop):
        set_var = set(choice(variables, N))
        p=len(set_var)/float(N)
        if i%50==0:
            print "value for ", i, " iteration ", "p = ",p
        p_var.append(p)

    print "Estimator of the proportion of remaining variables, ", mean(p_var)
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.