Quale algoritmo ML scegliere?

Mar 04 2023
Una delle decisioni chiave che devi prendere quando risolvi un problema di data science è quale algoritmo di machine learning utilizzare. Esistono centinaia di algoritmi di apprendimento automatico tra cui scegliere, ciascuno con i propri vantaggi e svantaggi.

Una delle decisioni chiave che devi prendere quando risolvi un problema di data science è quale algoritmo di machine learning utilizzare.

Esistono centinaia di algoritmi di apprendimento automatico tra cui scegliere, ciascuno con i propri vantaggi e svantaggi. Alcuni algoritmi possono funzionare meglio di altri su specifici tipi di problemi o su set di dati specifici.

Il teorema "No Free Lunch" (NFL) afferma che non esiste un algoritmo che funzioni meglio per ogni problema, o in altre parole, tutti gli algoritmi hanno le stesse prestazioni quando le loro prestazioni sono mediate su tutti i possibili problemi.

Diversi modelli di apprendimento automatico

In questo articolo discuteremo i punti principali da considerare quando si sceglie un modello per il proprio problema e come confrontare diversi algoritmi di apprendimento automatico.

Aspetti chiave dell'algoritmo

Il seguente elenco contiene 10 domande che potresti porti quando consideri uno specifico algoritmo di machine learning:

  1. Che tipo di problemi può risolvere l'algoritmo? L'algoritmo può risolvere solo problemi di regressione o classificazione o può risolverli entrambi? Può gestire problemi multi-classe/multi-etichetta o solo problemi di classificazione binaria?
  2. L'algoritmo ha delle ipotesi sul set di dati? Ad esempio, alcuni algoritmi presuppongono che i dati siano linearmente separabili (ad esempio, perceptron o SVM lineare), mentre altri presuppongono che i dati siano distribuiti normalmente (ad esempio, Gaussian Mixture Models).
  3. Ci sono garanzie sulle prestazioni dell'algoritmo? Ad esempio, se l'algoritmo tenta di risolvere un problema di ottimizzazione (come nella regressione logistica o nelle reti neurali), è garantito che trovi l'ottimo globale o solo una soluzione ottima locale?
  4. Quanti dati sono necessari per addestrare il modello in modo efficace? Alcuni algoritmi come le reti neurali profonde sono più esperti di dati di altri.
  5. L'algoritmo tende a sovradimensionarsi? In tal caso, l'algoritmo fornisce modi per gestire l'overfitting?
  6. Quali sono i requisiti di runtime e memoria dell'algoritmo, sia durante l'addestramento che durante la previsione?
  7. Quali passaggi di pre-elaborazione dei dati sono necessari per preparare i dati per l'algoritmo?
  8. Quanti iperparametri ha l'algoritmo? Gli algoritmi che hanno molti iperparametri richiedono più tempo per l'addestramento e la messa a punto.
  9. I risultati dell'algoritmo possono essere facilmente interpretati? In molti domini problematici (come la diagnosi medica), vorremmo essere in grado di spiegare le previsioni del modello in termini umani. Alcuni modelli possono essere facilmente visualizzati (come gli alberi decisionali), mentre altri si comportano più come una scatola nera (ad esempio, le reti neurali).
  10. L'algoritmo supporta l'apprendimento online (incrementale), ovvero possiamo addestrarlo su campioni aggiuntivi senza ricostruire il modello da zero?

Ad esempio, prendiamo due degli algoritmi più popolari: alberi decisionali e reti neurali e confrontiamoli in base ai criteri di cui sopra.

Alberi decisionali

  1. Gli alberi decisionali possono gestire sia problemi di classificazione che di regressione. Possono anche gestire facilmente problemi multiclasse e multietichetta.
  2. Gli algoritmi dell'albero decisionale non hanno ipotesi specifiche sul set di dati.
  3. Un albero decisionale è costruito utilizzando un algoritmo greedy, che non è garantito per trovare l'albero ottimale (cioè l'albero che minimizza il numero di test necessari per classificare correttamente tutti i campioni di addestramento). Tuttavia, un albero decisionale può raggiungere una precisione del 100% sul set di addestramento se continuiamo ad estendere i suoi nodi fino a quando tutti i campioni nei nodi foglia appartengono alla stessa classe. Tali alberi di solito non sono buoni predittori, poiché si adattano eccessivamente al rumore nel set di addestramento.
  4. Gli alberi decisionali possono funzionare bene anche su set di dati di piccole o medie dimensioni.
  5. Gli alberi decisionali possono facilmente adattarsi eccessivamente. Tuttavia, possiamo ridurre l'overfitting utilizzando la potatura degli alberi. Possiamo anche utilizzare metodi di ensemble come foreste casuali che combinano l'output di più alberi decisionali. Questi metodi soffrono meno di overfitting.
  6. Il tempo per costruire un albero decisionale è O ( n ² p ), dove n è il numero di campioni di addestramento e p è il numero di caratteristiche. Il tempo di previsione negli alberi decisionali dipende dall'altezza dell'albero, che di solito è logaritmica in n , poiché la maggior parte degli alberi decisionali sono abbastanza equilibrati.
  7. Gli alberi decisionali non richiedono alcuna preelaborazione dei dati. Possono gestire senza problemi diversi tipi di funzionalità, comprese le funzionalità numeriche e categoriche. Inoltre non richiedono la normalizzazione dei dati.
  8. Gli alberi decisionali hanno diversi iperparametri chiave che devono essere ottimizzati, soprattutto se si utilizza la potatura, come la profondità massima dell'albero e quale misura di impurità utilizzare per decidere come suddividere i nodi.
  9. Gli alberi decisionali sono semplici da capire e da interpretare e possiamo facilmente visualizzarli (a meno che l'albero non sia molto grande).
  10. Gli alberi decisionali non possono essere facilmente modificati per tenere conto di nuovi campioni di addestramento, poiché piccoli cambiamenti nel set di dati possono causare grandi cambiamenti nella topologia dell'albero.
  1. Le reti neurali sono uno dei modelli di machine learning più generali e flessibili esistenti. Possono risolvere quasi ogni tipo di problema, inclusa la classificazione, la regressione, l'analisi delle serie temporali, la generazione automatica di contenuti, ecc.
  2. Le reti neurali non hanno ipotesi sul set di dati, ma i dati devono essere normalizzati.
  3. Le reti neurali vengono addestrate utilizzando la discesa del gradiente, quindi possono trovare solo una soluzione ottimale locale. Tuttavia, ci sono varie tecniche che possono essere utilizzate per evitare di rimanere bloccati nei minimi locali, come lo slancio e i tassi di apprendimento adattivo.
  4. Le reti neurali profonde richiedono molti dati per l'addestramento, nell'ordine di milioni di punti campione. In generale, più grande è la rete (più livelli e neuroni ha), abbiamo bisogno di più dati per addestrarla.
  5. Le reti troppo grandi potrebbero memorizzare tutti i campioni di addestramento e non generalizzare bene. Per molti problemi, puoi iniziare da una piccola rete (ad esempio, con solo uno o due livelli nascosti) e aumentarne gradualmente le dimensioni fino a quando non inizi a sovradimensionare il training set.
  6. Il tempo di addestramento di una rete neurale dipende da molti fattori (la dimensione della rete, il numero di iterazioni di discesa del gradiente necessarie per addestrarla, ecc.). Tuttavia, il tempo di previsione è molto rapido poiché è sufficiente eseguire un solo passaggio in avanti sulla rete per ottenere l'etichetta.
  7. Le reti neurali richiedono che tutte le caratteristiche siano numeriche e normalizzate.
  8. Le reti neurali hanno molti iperparametri che devono essere regolati, come il numero di livelli, il numero di neuroni in ogni livello, quale funzione di attivazione utilizzare, il tasso di apprendimento, ecc.
  9. Le previsioni delle reti neurali sono difficili da interpretare poiché si basano sul calcolo di un gran numero di neuroni, ognuno dei quali ha solo un piccolo contributo alla previsione finale.
  10. Le reti neurali possono adattarsi facilmente per includere campioni di addestramento aggiuntivi, poiché utilizzano un algoritmo di apprendimento incrementale (discesa del gradiente stocastico).

La tabella seguente confronta i tempi di addestramento e previsione per alcuni algoritmi popolari ( n è il numero di campioni di addestramento e p è il numero di funzionalità).

Algoritmi di maggior successo nelle competizioni Kaggle

Secondo un sondaggio condotto nel 2016, gli algoritmi utilizzati più frequentemente dai vincitori del concorso Kaggle erano gli algoritmi di potenziamento del gradiente (XGBoost) e le reti neurali (vedi questo articolo ).

Tra i 29 vincitori del concorso Kaggle nel 2015, 8 di loro hanno utilizzato XGBoost, 9 hanno utilizzato reti neurali profonde e 11 hanno utilizzato un insieme di entrambi.

XGBoost è stato utilizzato principalmente in problemi che trattavano dati strutturati (ad es. tabelle relazionali), dove le reti neurali avevano più successo nella gestione di problemi non strutturati (ad es. problemi che trattano immagini, voce o testo).

Sarebbe interessante verificare se questa è ancora la situazione oggi o se le tendenze sono cambiate (qualcuno è pronto alla sfida?)

Grazie per aver letto!