È possibile eseguire la regressione logistica su set di dati con migliaia di funzionalità senza utilizzare un computer cluster? Che ne dici di decine di migliaia?

Sì. È comune e io stesso ho usato la regressione logistica per gestire alcune centinaia di migliaia di funzionalità.

Penso che un numero così elevato di funzionalità possa derivare da 3 scenari:

  1. quando i dati non sono strutturati (ad es. immagini, video, sacco di parole)
  2. Variabile categoriale cardinale (ad es. Nomi di città, nomi di prodotti)
  3. Gran numero di espansioni correlate (trasformazione + polinomi)

Se il tuo caso è 1), potresti prendere in considerazione anche altri algoritmi come Deep Learning.

Se il tuo caso è 2), potresti accelerare ulteriormente le cose sfruttando la Scarsità intrinseca, ovvero una città può avere solo 1 nome alla volta. Ad esempio, evita di usare 1-hot e usa invece i trucchi Feature Hashing o Sparse Data.

Se il tuo caso è 3), considera sicuramente l’uso della regolarizzazione come Lasso, in modo che il miglior modello luce / rado (in alcune caratteristiche importanti tra loro) possa essere rilevato e successivamente prodotto.

La complessità per l’addestramento di un modello di regressione logistica è O (N * M) in cui N è il numero di esempi su cui è necessario eseguire il training fino a quando il modello non converge e M è il numero di funzionalità. Una cosa da notare è che spesso le tue funzionalità sono scarse, il che significa che il numero medio di funzioni diverse da zero per esempio, da cui dipende la complessità dell’algoritmo di training, è molto inferiore al numero totale di funzionalità. Quindi, nel complesso, la risposta dipende da quanto è grande il tuo set di dati, da quante iterazioni hai bisogno, da quanto scarseggiano le tue caratteristiche e da quanto sei disposto ad aspettare per addestrare un buon modello (es. Poche ore / giorni non è irragionevole).

Un semplice trucco per accelerare l’addestramento di un modello di regressione logistica su una singola macchina consiste nell’impiegare una (mini) discendenza del gradiente batch in cui il calcolo del gradiente per un (mini) batch di esempi viene eseguito su più thread che vengono quindi sincronizzati sull’operazione di aggiornamento del peso .