Esistono algoritmi per calcolare i parametri di regressione lineare o logistica "in esecuzione"?


32

Un documento "Calcolo accurato della varianza corrente" all'indirizzo http://www.johndcook.com/standard_deviation.html mostra come calcolare media corrente, varianza e deviazioni standard.

Esistono algoritmi in cui i parametri di un modello di regressione lineare o logistica possono essere similmente aggiornati "dinamicamente" man mano che viene fornito ogni nuovo record di addestramento?


1
Con un enorme set di addestramento o un flusso continuo di dati in input, puoi usare algoritmi iterativi come la discesa gradiente stocastica e afferrare l'input in piccoli lotti mentre vai avanti. È questo quello che stavi chiedendo?
Andreister

1
Ricerca algoritmo RLS e sue varianti. en.wikipedia.org/wiki/Recursive_least_squares_filter
Memming

Risposte:


20

I coefficienti di regressione lineare di y=ax+b sono a=cov(x,y)/var(x) e b=mean(y)amean(x) .

Quindi tutto ciò che serve davvero è un metodo incrementale per calcolare cov(x,y) . Da questo valore e la varianza di x e la media sia y ed x si può calcolare i parametri a e b . Come vedrai nello pseudo codice riportato di seguito, il calcolo incrementale di cov(x,y) è molto simile al calcolo incrementale di var(x) . Questa non dovrebbe essere una sorpresa perché var(x)=cov(x,x) .

Ecco lo pseudo codice che probabilmente stai cercando:

init(): meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0

update(x,y):
n += 1
dx = x - meanX
dy = y - meanY
varX += (((n-1)/n)*dx*dx - varX)/n
covXY += (((n-1)/n)*dx*dy - covXY)/n
meanX += dx/n
meanY += dy/n

getA(): return covXY/varX
getB(): return meanY - getA()*meanX

Ho trovato questa domanda durante la ricerca di un algoritmo equivalente che calcola in modo incrementale una regressione multi-variabile come R=(XX)1XY modo che XR=Y+ϵ


4
Grazie per il tuo contributo! La parte della domanda sulla regressione lineare è in realtà un duplicato di stats.stackexchange.com/questions/6920/… le cui risposte mostrano come aggiornare un modello di regressione lineare multipla. Il presente thread è autorizzato a rimanere perché la parte di regressione logistica della domanda è indipendente da interesse. In realtà, anche la parte logistica è stata duplicata su stats.stackexchange.com/questions/59174/… .
whuber

1
Ho pensato che questa risposta sarebbe stata utile considerando il testo di riferimento fornito nella domanda. Grazie per il link. Tuttavia non è quello che sto cercando. Il mio caso d'uso è apparentemente particolare.
Chmike,

3
Credo che possa essere utile ed è unico nell'offrire codice funzionante.
whuber

Posso chiederti perché hai lasciato dx * dy volte (n-1) / n?
FavorMylikes,

Puoi migliorare il codice per calcolare il valore p?
Nathan,

12

Per i tuoi due esempi specifici:

Regressione lineare L'articolo "Regressione lineare online e la sua applicazione all'apprendimento del rinforzo basato sui modelli" di Alexander Strehl e Michael Littman descrive un algoritmo chiamato "Regressione lineare KWIK" (vedi algoritmo 1) che fornisce un'approssimazione della soluzione di regressione lineare mediante aggiornamenti incrementali . Si noti che questo non è regolarizzato (ovvero non è Regressione della cresta). Sono abbastanza sicuro che il metodo di Strehl & Littman non possa estendersi a quell'impostazione.

Regressione logistica

Questo thread fa luce sulla questione. citando:

Anche senza un vincolo di regolarizzazione, la regressione logistica è un problema di ottimizzazione non lineare. Già questo non ha una soluzione analitica, che di solito è un prerequisito per derivare una soluzione di aggiornamento. Con un vincolo di regolarizzazione, diventa un problema di ottimizzazione vincolata. Questo introduce una serie completamente nuova di complicazioni non analitiche oltre a quelle che il problema senza vincoli aveva già.

Esistono tuttavia altri metodi online (o incrementali) per la regressione che potresti voler esaminare, ad esempio Regressione della proiezione ponderata localmente (LWPR)


A proposito della regressione logistica, penso che tu sia inutilmente pessimista. La regressione logistica equivale a calcolare le probabilità della classe posteriore per un problema di due classi con ogni classe gaussiana distribuita, con mezzi diversi e una covarianza condivisa. Il MLE per la covarianza è solo una somma ponderata delle covarianze per classe, quindi le statistiche sufficienti sono solo il conteggio, la somma e la somma dei quadrati per classe. Ovviamente è facile inventare un aggiornamento esatto usando le statistiche sufficienti.
Robert Dodier,

3
@RobertDodier Hai descritto un'analisi discriminante lineare, non una regressione logistica. L'ultimo paragrafo della sezione introduttiva qui chiarisce la relazione.
Ahfoss,

@ahfoss Anche se i dati per classe non sono normalmente distribuiti, si può comunque costruire un modello equivalente alla regressione logistica tramite covarianze per classe.
Robert Dodier,

1
@RobertDodier Qual è il modello equivalente? Sembra che tu stia insinuando che esiste una soluzione ovvia a un problema sostanzialmente difficile. La tua soluzione o è più brillante di quanto pensi, o molto meno.
Ahfoss,

11

Come principio generale:

0) si mantengono le statistiche sufficienti e le stime ML correnti

1) quando ottieni nuovi dati, aggiorna le statistiche e le stime sufficienti

2) Quando non si dispone di statistiche sufficienti, è necessario utilizzare tutti i dati.

3) In genere non hai soluzioni in formato chiuso; utilizzare i precedenti MLE come punto di partenza, utilizzare un metodo di ottimizzazione conveniente per trovare il nuovo ottimale da lì. Potrebbe essere necessario sperimentare un po 'per scoprire quali approcci rendono i migliori compromessi per i tuoi particolari tipi di istanze problematiche.

Se il tuo problema ha una struttura speciale, probabilmente puoi sfruttarlo.

Un paio di potenziali riferimenti che potrebbero avere o meno un certo valore:

McMahan, HB e M. Streeter (2012),
Problema aperto:
vincoli migliori per la regressione logistica online , JMLR: Atti di seminari e conferenze , vol 23, 44.1–44.3

Penny, WD e SJ Roberts (1999),
Regressione logistica dinamica ,
Atti IJCNN '99


Sono d'accordo con l'idea di mantenere statistiche sufficienti (se esistono per il problema), ma la presenza di statistiche sufficienti non rende le altre cose inutili? Se si dispone di statistiche sufficienti, è possibile calcolare i parametri aggiornati esattamente come se si utilizzasse l'intero set di dati. Non è necessario tenere conto dei parametri attuali e non è necessario sperimentare metodi di ottimizzazione.
Robert Dodier,

2
È importante notare che avere statistiche sufficienti non implica che tu abbia una soluzione alle equazioni.
Glen_b -Restate Monica

8

Aggiungendo alla risposta di tdc, non ci sono metodi noti per calcolare stime esatte dei coefficienti in qualsiasi momento con solo tempo costante per iterazione. Tuttavia, ci sono alcune alternative che sono ragionevoli e interessanti.

Il primo modello da guardare è l' impostazione di apprendimento online . In questa impostazione, il mondo annuncia per primo un valore di x, il tuo algoritmo prevede un valore per y, il mondo annuncia il vero valore y 'e il tuo algoritmo subisce una perdita l (y, y'). Per questa impostazione è noto che algoritmi semplici (discesa gradiente e gradiente esponenziale, tra gli altri) ottengono rimpianti sublineari. Ciò significa che quando vedi più esempi, il numero di errori extra che il tuo algoritmo commette (rispetto al miglior predittore lineare possibile) non aumenta con il numero di esempi. Funziona anche in contesti avversari. C'è un buon documento che spiega una strategia popolare per dimostrare questi limiti di rimpianto. Le note di lezione di Shai Shalev-Schwartz sono anche utili.

C'è un'estensione dell'impostazione di apprendimento online chiamata impostazione del bandito in cui al tuo algoritmo viene assegnato solo un numero che rappresenta quanto era sbagliato (e nessun puntatore alla risposta giusta). Sorprendentemente, molti risultati dell'apprendimento online si ripercuotono su questa impostazione, tranne che qui si è costretti a esplorare e sfruttare, il che porta a tutti i tipi di sfide interessanti.


6

Altre risposte hanno indicato il mondo dell'apprendimento automatico, e questo è certamente un luogo in cui questo problema è stato affrontato.

Tuttavia, un altro approccio che potrebbe essere più adatto alle tue esigenze è l'uso della fattorizzazione QR con aggiornamenti di basso livello. Gli approcci per farlo e usarlo per risolvere i problemi dei minimi quadrati sono indicati in:

Aggiornamento della fattorizzazione QR e del problema dei minimi quadrati di Hammerling e Lucas.


5

yt=βtxt+εt,βt=βt1+ηt
βt=βt1

yt=logit(βtxt+εt),βt=βt1+ηt

2

Questo è da aggiungere alla risposta @chmike.

Il metodo sembra essere simile all'algoritmo online di BP Welford per la deviazione standard che calcola anche la media. John Cook dà una buona spiegazione qui . Tony Finch nel 2009 fornisce un metodo per una media mobile esponenziale e deviazione standard:

diff := x – mean 
incr := alpha * diff 
mean := mean + incr 
variance := (1 - alpha) * (variance + diff * incr)

Scrutando la risposta precedentemente pubblicata e espandendola per includere una finestra mobile esponenziale:

init(): 
    meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
    meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation

update(x,y):
    n += 1
    alpha=max(desiredAlpha,1/n) #to handle initial conditions

    dx = x - meanX
    dy = y - meanY
    dxy = (x*y) - meanXY #needed for cor

    varX += ((1-alpha)*dx*dx - varX)*alpha
    varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
    covXY += ((1-alpha)*dx*dy - covXY)*alpha

    #alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
    #alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
    #alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)

    meanX += dx * alpha
    meanY += dy * alpha
    meanXY += dxy  * alpha

getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )

Nel "codice" sopra riportato, si potrebbe impostare Alpha su 0 e, in tal caso, il codice funzionerebbe senza ponderazione esponenziale. Può essere suggerito di impostare la finestra desiderata su 1 / desiderata Finestra Dimensione come suggerito da Modified_moving_average per le dimensioni di una finestra mobile.

Domanda a margine: dei calcoli alternativi sopra, qualche commento su quale sia migliore dal punto di vista della precisione?

Riferimenti:

chmike (2013) https://stats.stackexchange.com/a/79845/70282

Cook, John (nd) Calcolo accurato della varianza in esecuzione http://www.johndcook.com/blog/standard_deviation/

Finch, Tony. (2009) Calcolo incrementale della media ponderata e della varianza. https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

Wikipedia. (nd) Algoritmo online di Welford https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm

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.