Come posso allenare una regressione (logistica?) In R usando la funzione di perdita L1?


11

Posso allenare una regressione logistica Rnell'uso

glm(y ~ x, family=binomial(logit)))

ma, IIUC, questo ottimizza per la probabilità di log.

Esiste un modo per addestrare il modello utilizzando la funzione di perdita lineare ( ) (che in questo caso è uguale alla distanza di variazione totale )?L1

Vale a dire, dato un vettore numerico un vettore bit (logico) , voglio costruire una funzione monotonica (in effetti crescente) tale cheè ridotto al minimo.xyf|f(x)y|

Guarda anche


Quello che vuoi non esiste e, per essere sincero, non ha molto senso. Possiamo discutere delle alternative, ma devi dichiarare più a fondo cosa stai cercando di fare. Perché vuoi adattare un modello logistico con una perdita L1?
user603

@ user603: Perché voglio valutare il mio modello usando TVD
sds

Sembra che tu stia parlando di adattare una curva logistica ai dati, piuttosto che adattare dati distribuiti binomialmente - cioè una forma di regressione non lineare , ma usando la norma anziché . In effetti, la funzione di perditasuggerisce che il massimo non è (in tal caso, fa riferimento al binomiale GLM fuorviante). D'altra parte, se davvero è costretto a 0-1, la funzione di perdita non ha senso. Puoi fornire dettagli sulla tua situazione attuale, per favore? L 2| f ( x ) - y | 1L1L2|f(x)y|1
Glen_b -Restate Monica

Si prega di notare che l' aiuto chiedere che non si la stessa domanda croce posta a più siti, ma invece scegliere un unico sito. Se in seguito cambi idea su quale sito sia il migliore, segnalalo per l'attenzione del moderatore e chiedigli di spostarlo.
Glen_b

@Glen_b: Penso che il "bit (logico) vettore y" implichi una risposta 0/1.
sds,

Risposte:


21

Quello che vuoi fare non esiste perché è, per mancanza di parole migliori, matematicamente imperfetto.

Ma prima, sottolineerò perché penso che le premesse della tua domanda siano solide. Cercherò quindi di spiegare perché ritengo che le conclusioni tratte da esse si basino su un malinteso sul modello logistico e, infine, suggerirò un approccio alternativo.

Indicheremo tue osservazioni (le lettere più in grassetto indicano i vettori) che giacciono nello spazio dimensionale (la prima voce di è 1) con , e è una funzione monotona della , come dire la curva logistica per fissare idee. Per convenienza, supporrò solo che sia sufficientemente grande rispetto a . np x{(xxi,yi)}i=1nnp p<n y i[0,1]f( xxxip<nyi[0,1]xf(xxi)=f(xxiββ) n pxxiββnp

Hai ragione nel dire che se intendi utilizzare TVD come criterio per valutare il modello adattato, è ragionevole aspettarsi che la tua misura ottimizzi lo stesso criterio tra tutti i possibili candidati, sui tuoi dati. Quindi

ββ=argminββRp||yyf(xxiββ)||1

Il problema è il termine di errore : e se imponiamo (vogliamo semplicemente che il nostro modello sia asintoticamente imparziale ), quindi, deve essere eteroschedastico . Questo perché può assumere solo due valori, 0 e 1. Pertanto, dato , può assumere solo due valori: quando , che si verifica con probabilità e quandoE ( ϵϵi=yif(xxiββ)ϵ iE(ϵϵ)=0ϵi xyixxi 1 - f ( xϵiy i = 1 f ( x1f(xxiββ)yi=1- f ( xf(xxiββ)y i = 1 1 - f ( xf(xxiββ)yi=1, che si verifica con probabilità .1f(xxiββ)

Queste considerazioni insieme implicano che:

var(εε)=E(εε2)=(1-f(XX'ββ))2f(XX'ββ)+(-f(XX'ββ))2(1-f(XX'ββ))=(1-f(XX'ββ))f(XX'ββ)=E(yy|XX)E(1-yy|XX)

quindi non è costante ma a forma di parabola concava ed è massimizzato quando è tale che .xvar(εε) E ( y | xXXE(y|XX).5

Questa intrinseca eteroschedasticità dei residui ha conseguenze . Ciò implica tra l'altro che quando si minimizza la funzione di perdita , si sta pesando in modo asintotico una parte del campione. Cioè, il montato non si adatta affatto ai dati ma solo alla parte di esso che è raggruppata attorno a luoghi in cui è tale che . Vale a dire, questi sono i punti di dati meno informativi nel tuo campione : corrispondono a quelle osservazioni per le quali il componente del rumore è il più grande. Quindi, il tuo adattamento è tirato verso , ad esempio reso irrilevante.βl1xββ*XXE(yy|XX).5ββ*=ββ:f(XX'ββ).5

Una soluzione, come risulta chiaramente dall'esposizione precedente, è quella di eliminare il requisito di imparzialità. Un modo popolare per distorcere lo stimatore (con qualche interpretazione bayesiana allegata) è includere un termine di restringimento. Se ridimensioniamo la risposta:

yio+=2(yio-.5),1ion

e, per convenienza computazionale, sostituisci con un'altra funzione monotona --è sarà conveniente per il seguito per indicare il primo componente del vettore di parametro come ed i restanti quelli - e comprendono un termine restringimento (per esempio una delle forme ), il problema di ottimizzazione risultante diventa:f(XX'ββ)c p - 1 γg(XX,[c,γγ])=XX'[c,γγ]cp-1| | γγγ||γγ||2

[c*,γγ*]=argmin[[c,γγ]RpΣio=1nmax(0,1-yio+XXio'[[c,γγ])+12||γγ||2

Si noti che in questo nuovo problema di ottimizzazione (anche convesso), la penalità per osservazioni correttamente classificate è 0 e cresce linearmente con per una classificazione classificata erroneamente - come in perdita. La soluzione a questo secondo problema di ottimizzazione sono i celebri coefficienti lineari svm (con separazione perfetta). A differenza di , ha senso apprendere questi dai dati con una penalità di tipo TVD ('tipo' a causa del termine bias) . Di conseguenza, questa soluzione è ampiamente implementata. Vedi ad esempio il pacchetto R LiblineaR .l 1 [ c , γXX'[[c,γ]l1 β[c*,γγ*] [ c , γββ*[c*,γγ*]


Vorrei poterti dare più di 25 punti :-)
sds

@sds; grazie: è stata un'ottima domanda :) Tornerò durante il giorno e riempirò i dettagli, correggerò qualche errore di battitura.
user603

8

Non sono sicuro del motivo per cui vorresti usare la perdita di L1 per qualcosa di limitato tra 0 e 1. A seconda di quale sia il tuo obiettivo, potresti prendere in considerazione qualcosa come la perdita di cerniera, che è simile alla perdita di L1 in una direzione e piatta nell'altro.

In ogni caso, il codice qui sotto dovrebbe fare quello che hai chiesto. Si noti che la risposta ottimale è sostanzialmente una funzione di passaggio.

set.seed(1)

# Fake data
x = seq(-1, 1, length = 100)
y = rbinom(100, plogis(x), size = 1) # plogis is the logistic function

# L1 loss
loss = function(y, yhat){
  sum(abs(y - yhat))
}

# Function to estimate loss associated with a given slope & intercept
fn = function(par){
  a = par[1]
  b = par[2]
  loss(y = y, yhat = plogis(a + b * x))
}

# Find the optimal parameters
par = optim(
  par = c(a = 0, b = 0),
  fn = fn
)$par

# Plot the results
plot(y ~ x)
curve(plogis(par[1] + par[2] * x), add = TRUE, n = 1000)

0

È possibile utilizzare il pacchetto glmnet per il montaggio dei modelli L1, L2. Non si limita alla regressione logistica ma la include.

Ecco la vignetta: http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

C'è anche un webminar: https://www.youtube.com/watch?v=BU2gjoLPfDc

Liblinear è buono, ma ho trovato glmnet più facile da iniziare. Glmnet include una funzione che esegue la convalida incrociata e seleziona un parametro di regolarizzazione basato su metriche diverse come l'AUC.

Per quanto riguarda la teoria, vorrei leggere l'articolo di tibshiarini sul lazo (regolarizzazione L1) e il capitolo sugli elementi dell'apprendimento statistico. http://statweb.stanford.edu/~tibs/lasso/lasso.pdf

Per quanto riguarda la perdita del registro, è solo per valutare i modelli. Non è una funzione di perdita per l'adattamento del modello.

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.