Best practice per l'apprendimento automatico per set di dati di grandi dimensioni


9

Sto per laurearmi dal mio Master e ho imparato l'apprendimento automatico e ho svolto progetti di ricerca con esso. Mi chiedo quali siano le migliori pratiche del settore quando si eseguono attività di machine learning con Big Dataset (come 100s GB o TB). Apprezzo se i colleghi data scientist possano condividere la loro esperienza. Ecco le mie domande:

  1. Ovviamente, set di dati molto grandi richiedono più tempo per l'allenamento (possono essere giorni o settimane). Molte volte abbiamo bisogno di formare vari modelli (SVM, Neural Network, ecc.) Per confrontare e trovare modelli di prestazioni migliori. Sospetto, nei progetti del settore, vogliamo che i risultati siano il più rapidi possibile ma producano le migliori prestazioni. Ci sono suggerimenti per ridurre i tempi di addestramento e test? Se si consiglia di sottoimpostare il set di dati, sarò interessato a imparare il modo migliore per impostare il sottoinsieme del set di dati per coprire tutti o la maggior parte degli scenari del set di dati.
  2. Sappiamo che l'esecuzione della convalida incrociata è migliore in quanto può ridurre l'eccessivo adattamento. Tuttavia, anche la convalida incrociata richiede tempo per la formazione e il modello addestrato con la convalida incrociata potrebbe non essere implementato direttamente (parlando dall'esperienza python sklearn: ho bisogno di addestrare di nuovo il modello con set di dati dopo il test di convalida incrociata per essere implementato). Normalmente esegui la convalida incrociata nei tuoi progetti sui big data o riesci a cavartela con la divisione treno-test?

Apprezzo il feedback.

Risposte:


8

Elencherò alcune pratiche che ho trovato utili, spero che questo aiuti:

  1. Indipendentemente dal fatto che i dati siano enormi o meno, la convalida incrociata è indispensabile per la creazione di qualsiasi modello. Se ciò richiede più tempo di quanto un consumatore finale sia disposto ad aspettare, potrebbe essere necessario ripristinare le proprie aspettative o ottenere hardware / software più veloce per costruire il modello; ma non saltare la convalida incrociata. Tracciare curve di apprendimento e convalida incrociata sono passaggi efficaci per aiutarci a riconoscere e correggere gli errori all'inizio del processo. Ho riscontrato casi in cui un semplice set di test del treno non rivela alcun problema fino a quando non eseguo convalide incrociate e non trovo una grande variazione nelle prestazioni dell'algoritmo su diverse pieghe.

  2. Prima di ridimensionare un set di dati, eliminare i record con valori mancanti di variabili chiave e valori anomali, colonne di variabili altamente correlate e variabili quasi zero. Ciò fornirà una stima molto migliore del set di dati utilizzabile reale. A volte potresti finire con solo una frazione del set di dati disponibile che può essere effettivamente utilizzato per costruire un modello.

  3. Quando si dimensiona un set di dati per la creazione di un modello, è più semplice stimare le risorse di calcolo se si enumera il set di dati in righe e colonne e le dimensioni della memoria della matrice numerica finale. Poiché ogni algoritmo di apprendimento automatico alla fine convertirà il set di dati in una matrice numerica, enumerare le dimensioni del set di dati in termini di GB / TB di dati di input non elaborati (che possono essere principalmente stringhe / variabili nominali testuali / ecc.) È spesso fuorviante e il il set di dati può sembrare più scoraggiante e gigantesco con cui lavorare.

  4. Una volta che conosci (o stimhi) le dimensioni utilizzabili finali del tuo set di dati, controlla se disponi di una macchina adatta per poterle caricare in memoria e addestrare il modello. Se la dimensione del set di dati è inferiore alla memoria disponibile / utilizzabile dal software, non è più necessario preoccuparsi della dimensione.

  5. Se la dimensione del set di dati è maggiore della memoria disponibile per addestrare un modello, è possibile provare questi approcci (iniziando prima da quelli più semplici):

    • Usa una macchina con più memoria: se stai usando un fornitore di servizi cloud, l'approccio più semplice potrebbe essere solo quello di fornire più memoria e continuare a costruire il modello come al solito. Per le macchine fisiche, prova a procurarti RAM aggiuntiva, il suo prezzo continua a ridursi e se il tuo set di dati rimarrà così grande o crescerà nel tempo, allora è un buon investimento.
    • Aggiungi nodi al cluster: per le distribuzioni di cluster computing basate su Hadoop e Spark, l'addestramento su un set di dati più ampio è facile come aggiungere più macchine al cluster.
    • Molto spesso le attività di classificazione richiedono una formazione sui dati con classi altamente squilibrate, il rapporto tra classi positive e negative a volte può essere pari a 1: 1000 o più. Un metodo semplice per migliorare l'accuratezza in questi casi consiste nel sottocampionare la classe di minoranza o sottocampionare la classe di maggioranza, oppure fare entrambe insieme. Se disponi di un set di dati di grandi dimensioni, il sottocampionamento della classe di maggioranza è un'ottima opzione che migliorerà l'accuratezza del tuo algoritmo e ridurrà i tempi di addestramento.
    • Costruisci un ensemble: dividi il set di dati in modo casuale e addestra diversi apprendenti di base su ciascuna parte, quindi combinali per ottenere la previsione finale. In questo modo sarebbe possibile utilizzare in modo efficace l'insieme di dati di grandi dimensioni e produrre un modello più accurato. Ma devi dedicare più tempo per costruire con cura l'ensemble e tenerti alla larga dalle solite insidie ​​della costruzione dell'ensemble.
    • Se stai usando un ensemble, addestra molti modelli a thread singolo in parallelo. Quasi tutti i software ML offrono funzionalità per addestrare più modelli su core diversi o nodi separati del tutto.
    • Valuta diversi algoritmi diversi sul tempo impiegato per addestrarli per il tuo set di dati specifico rispetto alla loro accuratezza. Sebbene non esista una risposta universale, ma ho riscontrato che quando si utilizzano dati rumorosi, gli SVM impiegano molto più tempo a formarsi rispetto a un insieme attentamente costruito di modelli di regressione regolarizzati, ma possono essere solo leggermente più accurate nelle prestazioni; e una rete neurale ben costruita può richiedere molto tempo per la formazione rispetto a un albero CART, ma offre prestazioni significativamente più accurate rispetto all'albero.
    • Per ridurre il tempo impiegato per creare il modello, prova ad automatizzare il più possibile il processo. Alcune ore trascorse nell'automazione di un'attività manuale complessa soggetta a errori possono salvare il team cento ore dopo nel progetto.
    • Se disponibili, utilizzare le implementazioni di algoritmi che utilizzano l'elaborazione parallela, matrici sparse e elaborazione in grado di riconoscere la cache, riducendo notevolmente i tempi di elaborazione. Ad esempio, utilizzare xgboost invece di un'implementazione single-core di GBM.
    • Se nient'altro funziona, addestrare il modello su un set di dati più piccolo; come Emre ha suggerito nella sua risposta, utilizzare le curve di apprendimento per fissare la dimensione del campione più piccola richiesta per l'addestramento del modello, l'aggiunta di più registrazioni di allenamento di queste dimensioni non migliora notevolmente l'accuratezza del modello. Ecco un buon articolo che esplora questa situazione: http://web.mit.edu/vondrick/largetrain.pdf .

Grazie @Sandeep per la tua esaustiva risposta. Per quanto riguarda il punto n. 3 che elenca il set di dati in righe e colonne e la dimensione della memoria della matrice numerica finale, potresti per favore elaborarne di più? Significa che trovare la dimensione del tuo set di dati pulito usando sintassi, come 'df.values.nbytes', 'df.shape' nel frame di dati di Panda? Grazie.
iLoeng,

Usa: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Sandeep S. Sandhu

4

La domanda è: quanti dati sono necessari per saturare il tuo modello? Per determinarlo puoi tracciare curve di apprendimento con quantità variabili di dati, magari aumentando / diminuendo le dimensioni di un fattore costante. Se l'addestramento su tutti i dati non è fattibile, la curva di apprendimento può aiutarti a fare un compromesso informato.

Anche la saturazione del modello entra in gioco con la validazione incrociata. Se non si è vicini alla saturazione, l'utilizzo di un piccolo numero di pieghe fornisce dati pessimistici sulle prestazioni perché si addestrerà il modello su un numero di dati inferiore a quello che può utilizzare.

Infine e viceversa, è possibile utilizzare un modello più complesso invece di "ridimensionare" i dati per adattarli al modello.

Benvenuti in DataScience.SE.

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.