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+?
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:
Arriverò allo stimatore 0.632, ma sarà uno sviluppo piuttosto lungo:
Supponiamo di voler prevedere con utilizzando la funzione , dove può dipendere da alcuni parametri stimati utilizzando i dati , ad esempio
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.
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?).
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 = 1doveκè una funzione di indice che indica la partizione a cuiè allocata l'osservazioneief-κ(i)(xi)è il valore previsto dixiutilizzando dati noncompresi nelsetκ(i).
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.
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 bdovefb(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
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 o con w= 0.632
.
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.
Poi:
e
così
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.
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)