Deep Learning vs boosting gradiente: quando usare cosa?


30

Ho un grosso problema con un grande set di dati (ad esempio 50 milioni di righe e 200 colonne). Il set di dati è costituito da circa 100 colonne numeriche e 100 colonne categoriche e una colonna di risposta che rappresenta un problema di classe binaria. La cardinalità di ciascuna delle colonne categoriali è inferiore a 50.

Voglio sapere a priori se dovrei optare per metodi di apprendimento profondo o metodi basati su un insieme di alberi (ad esempio aumento del gradiente, adaboost o foreste casuali). Esistono analisi esplorative dei dati o altre tecniche che possono aiutarmi a decidere un metodo rispetto all'altro?


2
Penso che a meno che tu non abbia una buona intuizione sulle proprietà dei dati, finisci per esplorare entrambe le opzioni (forse su solo 500.000 righe) e convalidi incrociati. Ma forse ci sono visualizzazioni o altre analisi che possono aiutarti a ottenere quell'intuizione.
Neil Slater,

1
In realtà ho programmato di fare un grande confronto tra i modelli per le mie ricerche su dati reali questa settimana. Pulirò un po 'i risultati e li pubblicherò qui. Anche almeno uno studente CS ha studiato la domanda: academia.edu/3526056/…
shadowtalker

1
@NeilSlater Mi piacerebbe vedere una risposta indirizzata su ciò che quell'intuizione potrebbe / potrebbe / dovrebbe essere
shadowtalker

1
Non ho ancora abbastanza reputazione per mettere un breve commento sulla tua domanda originale e questa non è davvero una risposta. In ogni caso, volevo dire che penso che questo documento sia abbastanza rilevante per questo problema: Fernández-Delgado, M., Cernadas, E., Barro, S., & Amorim, D. (2014). Abbiamo bisogno di centinaia di classificatori per risolvere i problemi di classificazione nel mondo reale? The Journal of Machine Learning Research, 15, 3133–3181. Estratto da dl.acm.org/citation.cfm?id=2697065
José María Mateos,

Esistono analisi esplorative dei dati o altre tecniche che possono aiutarmi a decidere un metodo rispetto all'altro? Nel caso generale no, il "no teorema del pranzo libero" lo dimostra. Ma ci sono euristiche che potrebbero guidarti nella giusta direzione, ad es. Scikit-learn.org/stable/tutorial/machine_learning_map/…
Simon,

Risposte:


32

Perché limitarti a questi due approcci? Perché sono fighi? Vorrei sempre iniziare con un semplice classificatore / regressore lineare. Quindi in questo caso un SVM lineare o regressione logistica, preferibilmente con un'implementazione dell'algoritmo che può sfruttare la scarsità a causa della dimensione dei dati. Ci vorrà molto tempo per eseguire un algoritmo DL su quel set di dati e normalmente proverei solo l'apprendimento approfondito su problemi specialistici in cui c'è una struttura gerarchica nei dati, come immagini o testo. È eccessivo per molti problemi di apprendimento più semplici e richiede molto tempo ed esperienza per apprendere e anche gli algoritmi DL sono molto lenti da addestrare. Inoltre, solo perché hai 50 milioni di righe, non significa che devi utilizzare l'intero set di dati per ottenere buoni risultati. A seconda dei dati, potresti ottenere buoni risultati con un campione di poche 100.000 righe o qualche milione. Vorrei iniziare in modo semplice, con un piccolo campione e un classificatore lineare, e da lì sarei più complicato se i risultati non fossero soddisfacenti. Almeno in questo modo otterrai una linea di base. Abbiamo spesso trovato semplici modelli lineari per eseguire modelli più sofisticati sulla maggior parte delle attività, quindi vuoi iniziare sempre da lì.


4
+1 per iniziare con un modello semplice e sottocampionamento
Matt

Sono d'accordo con l'utilizzo di svm per dati sparsi, ma non pensi che svm impiegherà molto tempo per addestrare un set di dati dimensionale così grande!
blitu12345,

No, soprattutto se è scarso e utilizza un kernel lineare. Ma possono avere problemi con un gran numero di righe. Sarà comunque molto più veloce di un modello DL in entrambi i casi. Ma nota che ho anche raccomandato la regressione logistica.
Simon,

Il mio punto principale è iniziare con un semplice modello lineare e non utilizzare nemmeno il set di dati completo, poiché è improbabile che sia necessario l'intero set di dati per ottenere buone prestazioni. Dubito che ci sia molta differenza nella precisione tra l'utilizzo di dire 100.000 righe e qualche milione.
Simon,

+1 per provare l'apprendimento approfondito su problemi specialistici in cui esiste una struttura gerarchica nei dati
eric2323223

4

Oltre ad altre risposte (e c'è qualche buon link nei commenti) dipende da quale sia il problema o dal tipo di domande a cui vuoi rispondere. Come posso solo suggerire in base alla mia esperienza, quindi nel caso di un'attività di classificazione, i possibili metodi possono essere severamente limitati in base al bilancio delle classi nel set di dati.

Una volta che si passa a uno squilibrio di classe superiore a circa 1:10, la maggior parte dei metodi di classificazione smette di funzionare. Ti verranno lasciati metodi basati su foreste casuali e forse su reti neurali (non ho ancora provato). Lavoro con l'equilibrio di classe nell'intervallo da 1: 500 a 1: 1000 e ho scoperto che né il down-down né il upsampling funzionano. Fortunatamente il mio set di dati è "solo" 6 mln di osservazioni per 200 variabili e sono in grado di eseguire alberi potenziati sull'intero set in tempi ragionevoli.

Quindi per rispondere direttamente alla tua domanda:

  • dovresti trovare una serie di domande a cui vorresti rispondere e, in caso di classificazione, controlla i saldi di classe delle variabili target.

  • dovresti controllare la distribuzione (non in senso matematico) dei valori mancanti in tutti i tuoi dati e documentare ciò che trovi. Alcuni metodi ML vanno bene con valori mancanti mentre altri no e devi esaminare l'imputazione dei dati (che ha il suo set di regole, linee guida e problemi).


1
Prova il classificatore SGD di sklearn con class_weight = "bilanciato"
Diego,

4

Dal mio punto di vista, per 5 milioni di casi hai bisogno di molti alberi per ottenere un buon limite di generalizzazione (un buon modello nel termine laico). Se questo non è un problema, cercalo, anche la risposta esatta dipende dalla natura del tuo problema. GBT è un buon metodo soprattutto se hai tipi di caratteristiche miste come categoriali, numerici e simili. Inoltre, rispetto alle reti neurali ha un numero inferiore di iperparametri da sintonizzare. Pertanto, è più veloce avere un modello di impostazione ottimale. Un'altra cosa è l'alternativa dell'allenamento parallelo. Puoi addestrare più alberi contemporaneamente con una buona CPU. Se non sei soddisfatto dei risultati, scegli Neural Nets poiché ciò significa che il tuo modello dovrebbe essere più ampio e dovrebbe apprendere informazioni di ordine superiore attraverso i tuoi dati. Questo è dovuto agli NN rispetto ad altri algoritmi di apprendimento.


4

Sulla falsità di ciò che @Simon ha già detto:

  1. Gli approcci di deep learning sono stati particolarmente utili per risolvere problemi nella visione, nella modellazione del linguaggio e del linguaggio in cui l'ingegnerizzazione delle caratteristiche è complicata e richiede molto sforzo.
  2. Per la tua applicazione ciò non sembra essere il caso poiché hai caratteristiche ben definite e sono richieste solo interazioni di caratteristiche ecc.
  3. Dato che attualmente i modelli di apprendimento profondo hanno bisogno di molte risorse di elaborazione e di tempo da parte degli scienziati nella stesura del codice, suggerirei di optare per un approccio di apprendimento non profondo.

Per il tuo problema, lo scambio tra sforzo e beneficio non sembra essere a favore del deep learning. DL sarebbe eccessivo


1

Quando disponi di un set di dati così ampio, puoi giocare con qualsiasi delle tecniche di modellazione statistica e di apprendimento automatico e questo è fortemente incoraggiato. Come altri hanno suggerito, consiglierei anche di prendere alcuni milioni di campioni casuali dai dati e giocare con quello. Dato che questo è un problema di classificazione, seguirò prima semplici tecniche di classificazione e poi proseguirò con altre più complesse. La regressione logistica è ottima per cominciare.

Volevo aggiungere che anche i modelli generativi devono essere provati. Il classificatore Naive Bayes è uno dei classificatori probabilistici più semplici e supera molti metodi complessi come il supporto di macchine vettoriali su molte attività. Potete guardare questo semplice implementazione di NB e questo collegamento per il confronto di NB a regressione logistica.

Si può costruire un classificatore Naive bayes (NB) come modello di base e quindi utilizzare qualsiasi tecnica di apprendimento automatico come Support vector machines (SVM) o percetrons multistrato (MLP). Un compromesso qui è che NB è computazionalmente meno costoso di MLP, quindi si desiderano prestazioni migliori da MLP.

Venendo alla tua query esatta: l'apprendimento approfondito e il potenziamento dell'albero del gradiente sono tecniche molto potenti che possono modellare qualsiasi tipo di relazione nei dati. Ma cosa succede se nel tuo caso una semplice regressione logistica o NB sta dando la precisione desiderata. Quindi è sempre meglio provare prima le tecniche semplici e avere prestazioni di base. Quindi si può andare per i modelli complessi e confrontarli con la linea di base.

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.