Miglior approccio per un progetto di apprendimento automatico end-to-end [2022]
Pubblicato: 2021-01-01L'apprendimento automatico sta accelerando ed è stato oggetto di contesa per un periodo di tempo molto lungo. Alcuni ottimi algoritmi e architetture in questo dominio hanno reso possibile l'applicazione del concetto di Machine Learning nel mondo pratico e reale.
Non è più solo un concetto di ricerca e si è diffuso in profondità in utili aree di applicazione. E oggi più che mai è necessario padroneggiare l'arte della pipeline end-to-end per i progetti di Machine Learning.
C'è un crescente interesse per l'apprendimento automatico per molte persone e c'è un'immensa quantità di risorse disponibili che possono aiutarti a comprendere i fondamenti di ML e AI. Molti corsi ti portano dall'apprendimento di alcuni concetti di base alla costruzione finale di alcuni modelli all'avanguardia.
Ma è così? Impariamo davvero come accedere ai dati e vediamo davvero come pulire i dati in modo che il nostro modello ML possa estrarne utili funzionalità? E per quanto riguarda la parte di distribuzione? Ci sono così tante domande su linee simili che rimangono senza risposta nella nostra mente dopo aver completato tali corsi e programmi di studio.
Questo problema sorge a causa di una scarsa comprensione di una pipeline completa di Machine Learning end-to-end per qualsiasi progetto. In questo articolo, analizzeremo una di queste pipeline per capire cosa è necessario fare esattamente per ottenere risultati migliori in uno scenario reale per qualsiasi progetto ML.
Uno dei libri che meglio mostra questo è l'apprendimento pratico della macchina con Scikit-Learn, Keras e TensorFlow di Aurelien Geron.

Questa pipeline end-to-end può essere suddivisa in pochi passaggi per una migliore comprensione, e quelli sono:
- Comprendere l'affermazione del problema
- Acquisizione dei dati richiesti
- Comprendere i dati
- Pulizia dei dati
- Selezione del miglior modello per l'allenamento
- Ottimizzazione degli iperparametri
- Presentazione dei risultati
- Distribuzione e manutenzione del sistema
Per comprendere meglio la pipeline di qualsiasi progetto di Machine Learning nella vita reale, utilizzeremo l'esempio popolare del problema della previsione dei prezzi della California House. Discuteremo tutti i punti precedenti in relazione a questa affermazione del problema. Potrebbero esserci alcune modifiche minori per diversi progetti, ma nel complesso l'obiettivo rimane lo stesso.
Sommario
Comprendere l'affermazione del problema
Per costruire una buona soluzione, è necessario comprendere l'affermazione del problema in modo molto chiaro. Molto probabilmente finirai per costruire e addestrare un modello di Machine Learning, ma le aree applicative della vita reale richiedono molto più dei semplici modelli. L'output del modello deve essere abbinato a ciò che è esattamente necessario all'utente finale.
Per questo esempio particolare, ci viene fornito un set di dati di tutte le metriche in California come popolazione, reddito, prezzi delle case e altri. L'output richiesto dal modello è che dovrebbe essere in grado di prevedere il prezzo della casa dati gli altri attributi come posizione, popolazione, reddito e altri.
Il motivo importante di questo passaggio è capire esattamente cosa deve essere fatto e esattamente che tipo di soluzione è necessaria. È qui che viene eseguita la parte principale del brainstorming su come affrontare l'affermazione del problema.
Leggi: Idee per progetti di apprendimento automatico per principianti
Acquisizione dei dati richiesti
Una volta che hai compreso chiaramente l'affermazione del problema e hai deciso di andare avanti con un approccio di Machine Learning per risolvere il problema, dovresti iniziare a cercare i dati rilevanti. I dati sono l'ingrediente più importante di qualsiasi progetto di Machine Learning, quindi devi trovare e selezionare attentamente solo i dati di qualità. Le prestazioni finali dei modelli ML dipendono dai dati utilizzati durante l'addestramento.
Esistono varie fonti per trovare dati che possono aiutare a comprendere la distribuzione dei dati anche in esempi di vita reale. Per il nostro esempio, possiamo prendere il set di dati California House Price Prediction da Kaggle. Questi dati sono in formato CSV e quindi utilizzeremo la libreria Pandas per caricare il set di dati.
Comprendere i dati
È un aspetto molto importante della soluzione ML essere in grado di comprendere i dati con cui stai lavorando. Questo ci permette di scegliere quali algoritmi o architetture modello sono più adatti al progetto. Prima di iniziare a esaminare i dati in dettaglio, è buona norma suddividere prima il set di dati in set di treni e test. Ciò mantiene il set di test intatto e quindi diminuisce le possibilità di sovraadattamento al set di test. In questo modo, elimini la distorsione dei dati dal modello.
Esistono vari modi per suddividere i set di dati in questi set di treni e test. Uno di questi è dividerlo con un valore percentuale codificato. 90% treno e 10% test è un valore comune nella maggior parte dei casi.
Dopo lo sdoppiamento, dovrai visualizzare in modo approfondito il treno impostato per comprendere i dati. L'attuale set di dati include i punti di latitudine e longitudine e, quindi, è molto utile utilizzare il grafico a dispersione per osservare la densità in base alle posizioni.
Trovare la correlazione tra due attributi nel set di dati è utile per capire quali attributi sono più correlati all'attributo richiesto. In questo caso, dobbiamo scoprire quale attributo è più correlato ai prezzi delle case nel set di dati. Questo può essere fatto facilmente in Scikit-Learn usando il metodo corr(). Restituisce un valore per ogni attributo rispetto ad un altro. Quindi se hai bisogno di vedere le relazioni rispetto ai prezzi delle case, questo è il modo in cui puoi farlo:
corr_matrix[“median_house_value”].sort_values(ascending=False)
valore_casa_mediana 1.000000reddito_mediano 0,687170totale_camere 0.135231housing_median_age 0.114220famiglie 0,064702totale_camere da letto 0.047865popolazione -0,026699longitudine -0,047279latitudine -0,142826
Qui, è visibile che il reddito_mediano è direttamente correlato al valore della casa e d'altra parte il valore della latitudine è indirettamente correlato ad esso.
Infine, puoi anche provare a fare un po' di ingegneria delle funzionalità combinando insieme alcuni attributi. Ad esempio, il totale delle stanze_per_famiglia può essere molto più informativo del totale delle stanze o dei valori della famiglia individualmente.
Pulizia dei dati
In questo passaggio, prepari i dati per il progetto Machine Learning. È il passaggio più importante e dispendioso in termini di tempo dell'intera pipeline. Le prestazioni del modello dipendono principalmente dalla preparazione dei dati. Di solito, è buona norma scrivere funzioni per questo scopo in quanto ti consentirà di utilizzare tali funzioni quando necessario e le stesse funzioni possono essere utilizzate nella linea di produzione per preparare i nuovi dati per le previsioni.
Uno dei problemi più riscontrati nei dati reali sono i valori mancanti per alcune voci nel set di dati. Ci sono alcuni modi per gestirlo. Puoi eliminare direttamente l'intero attributo, ma questo non è molto buono per il modello. Puoi eliminare la riga che ha un valore mancante. Un altro modo che viene utilizzato principalmente è impostare il valore mancante su un altro valore come zero o la media aritmetica dell'intera colonna se si tratta di un valore numerico.
Per i valori categoriali, è meglio rappresentarli con numeri e codificarli in una codifica one-hot in modo che sia più facile per il modello lavorarci sopra. Scikit-Learn fornisce anche la classe OneHotEncoder in modo da poter convertire facilmente i valori categoriali in vettori one-hot.
Un'altra cosa di cui devi occuparti è il ridimensionamento delle funzionalità. Potrebbero esserci alcuni attributi i cui intervalli di valori sono molto drastici. Quindi è meglio ridimensionarli su una scala standard in modo che il modello possa facilmente lavorare con quei valori e ottenere prestazioni migliori.
Leggi anche: Stipendio per ingegnere di apprendimento automatico in India

Selezione del miglior modello per l'allenamento
Dopo aver completato tutta la pulizia dei dati e l'ingegneria delle funzionalità, il passaggio successivo diventa abbastanza semplice. Ora, tutto ciò che devi fare è addestrare alcuni modelli promettenti sui dati e scoprire il modello che fornisce le migliori previsioni. Ci sono alcuni modi che ci aiutano a selezionare il modello migliore.
Il nostro esempio della previsione dei prezzi delle case in California è un problema di regressione. Ciò significa che dobbiamo prevedere un valore da un intervallo di numeri che è, in questo caso, il prezzo della casa.
Il primo passo qui è addestrare alcuni modelli e testarli sul set di convalida. Non dovresti usare il set di test qui in quanto porterà a un overfitting sul set di test e alla fine il modello avrà una regolarizzazione molto bassa. Tra questi modelli, la maggior parte delle volte dovrebbe essere scelto il modello con una buona accuratezza di addestramento e accuratezza di convalida. Può anche dipendere dal caso d'uso poiché alcune attività richiedono configurazioni diverse rispetto ad altre.
Poiché abbiamo già ripulito i dati e le funzioni di preelaborazione sono pronte, è molto facile addestrare diversi modelli in tre o quattro righe di codice utilizzando alcuni framework come Scikit-Learn o Keras. In Scikit-Learn abbiamo anche un'opzione di convalida incrociata che aiuta molto a trovare buoni iperparametri per modelli come alberi decisionali.
Ottimizzazione degli iperparametri
Dopo aver selezionato alcuni modelli, è necessario mettere a punto gli iperparametri per liberare il loro vero potenziale. Ci sono molti modi per raggiungere anche questo. Uno di questi è che puoi modificare manualmente gli iperparametri e addestrare i modelli ancora e ancora fino a ottenere un risultato soddisfacente. Qui puoi vedere chiaramente il problema che non puoi controllare tutte le combinazioni che farebbe un'attività automatizzata. Quindi ecco alcuni buoni metodi per automatizzare questa roba.
Grid Search è una meravigliosa funzionalità fornita da Scikit-Learn sotto forma di una classe GridSearchCV in cui esegue la convalida incrociata da solo e trova i valori dell'iperparametro perfetti per risultati migliori. Tutto quello che dobbiamo fare è menzionare con quali iperparametri deve sperimentare. È una funzionalità semplice ma molto potente.
La ricerca randomizzata è un altro approccio che può essere utilizzato per uno scopo simile. Grid Search funziona bene quando c'è un piccolo spazio di iperparametri da sperimentare ma quando c'è un numero elevato di iperparametri, è meglio usare RandomizedSearchCV. Prova iperparametri casuali e fornisce i valori migliori che ha visto in tutto.
Ultimo ma non meno importante, è l'approccio di Ensemble Learning . Qui possiamo utilizzare più modelli per fornire le rispettive previsioni e, infine, possiamo scegliere la previsione finale come media di tutte. Questo è un metodo molto promettente e vince molte competizioni su Kaggle.
Dopo aver messo a punto tutti gli iperparametri per il modello finale, puoi quindi utilizzare il modello per fare previsioni sul set di test. Qui possiamo valutare quanto va bene il modello sul set di prova. Ricorda che non dovresti mettere a punto il tuo modello dopo questo per aumentare la precisione sul set di test in quanto ciò comporterà un overfitting sui campioni del set di test.
Presentazione dei risultati
Una volta selezionato il modello migliore e completata la valutazione, è necessario visualizzare correttamente i risultati. La visualizzazione è la chiave per realizzare progetti di Machine Learning migliori in quanto si basa sui dati e sulla comprensione dei modelli alla base di essi. I risultati numerici grezzi possono suonare bene alle persone che hanno già familiarità con questo dominio, ma è molto importante visualizzarlo su grafici e diagrammi poiché rende il progetto interessante e tutti possono avere un quadro chiaro di ciò che sta effettivamente accadendo nella nostra soluzione.
Distribuzione e manutenzione del sistema
La maggior parte degli studenti raggiunge questa fase della pipeline e affronta enormi problemi mentre cerca di implementare il progetto per l'applicazione in uno scenario di vita reale. È abbastanza facile creare e addestrare modelli in un notebook Jupyter, ma la parte importante è salvare correttamente il modello e quindi utilizzarlo in un ambiente live.
Uno dei problemi più comuni incontrati dagli ingegneri ML è che c'è una differenza tra i dati ricevuti in tempo reale e i dati su cui hanno addestrato il modello. Qui possiamo utilizzare le funzioni di preelaborazione che abbiamo creato durante la creazione della pipeline per l'addestramento dei nostri modelli.
Esistono due tipi di modelli di Machine Learning che possono essere distribuiti: un modello online e un modello offline. Il modello online è quello che continua ad imparare dai dati che sta ricevendo in tempo reale. I modelli offline non apprendono da nuovi campioni e devono essere aggiornati e mantenuti correttamente se c'è un cambiamento nel tipo di dati ricevuti da esso. Quindi è necessaria una corretta manutenzione per entrambi i tipi di modelli.
Durante la distribuzione dei modelli di machine learning, devono essere racchiusi in una piattaforma per consentire agli utenti di interagire facilmente con loro. Le opzioni sono ampie, possiamo racchiuderlo in un'app Web, un'app Android, un'API Restful e molti altri. La conoscenza di base della creazione di tali app o API è un enorme vantaggio. Dovresti essere in grado di distribuire app NodeJS o Python su servizi cloud come Google Cloud Platforms, Amazon Web Services o Microsoft Azure.

Se non ti senti a tuo agio con alcuni framework come Django o Flask, puoi provare Streamlit che ti consente di distribuire un codice Python sotto forma di app Web in poche righe di codice aggiuntivo. Esistono varie librerie e framework di questo tipo che possono essere esplorati.
Conclusione
Per concludere questo intero articolo, direi che i progetti di Machine Learning sono abbastanza diversi dagli altri progetti tradizionali in termini di pipeline e se riesci a padroneggiare questa pipeline, tutto il resto diventa molto più semplice.
Alcuni dei passaggi più importanti di questa pipeline end-to-end che molti principianti tendono a trascurare sono la pulizia dei dati e l'implementazione del modello. Se questi passaggi vengono eseguiti, il resto della parte è come qualsiasi altro progetto.
Seguire questi passaggi e avere una pipeline impostata per i progetti ti aiuta ad avere una visione chiara delle attività e il debug dei problemi diventa più gestibile. Quindi ti suggerisco di seguire questi passaggi e provare a implementare un tuo progetto di Machine Learning end-to-end utilizzando questo elenco di controllo. Raccogli una dichiarazione del problema, trova il set di dati e vai avanti per divertirti con il tuo progetto!
Se sei interessato a saperne di più sull'apprendimento automatico, dai un'occhiata al Diploma PG di IIIT-B e upGrad in Machine Learning e AI, progettato per i professionisti che lavorano e offre oltre 450 ore di formazione rigorosa, oltre 30 casi di studio e incarichi, IIIT- B Status di Alumni, oltre 5 progetti pratici pratici e assistenza sul lavoro con le migliori aziende.
Che cos'è l'apprendimento automatico o ML?
La capacità di un sistema di apprendere un'attività senza essere esplicitamente programmato dai dati forniti viene definita apprendimento automatico. Questo campo si concentra sullo sviluppo di programmi per computer in grado di accedere ai dati e apprendere da soli. È un sottocampo della vasta materia dell'intelligenza artificiale (AI). L'apprendimento automatico viene implementato in quasi tutti i settori per aumentare la produttività, il marketing, le vendite, la soddisfazione dei clienti e il profitto aziendale. Molti esperti IT sono stati interessati a questo e stanno valutando la possibilità di cambiare carriera.
Cosa sono i progetti ML end-to-end?
I progetti di machine learning end-to-end comprendono passaggi come la preparazione dei dati, l'addestramento di un modello su di essi e la distribuzione di tale modello. Consiste in pipeline che sono i modi per scrivere il codice e automatizzare il processo di lavoro. Queste pipeline, se compilate correttamente, portano alla formazione di un progetto di apprendimento automatico di successo. Comprendere la dichiarazione del problema, ottenere i dati appropriati, comprendere i dati, pulire i dati, selezionare il modello ottimale per l'addestramento, mettere a punto gli iperparametri e presentare i risultati sono solo alcune delle fasi coinvolte.
Cosa sono gli iperparametri in Machine learning?
Un iperparametro è un parametro nell'apprendimento automatico il cui valore viene utilizzato per influenzare il processo di apprendimento. Possono essere classificati in due parti, Iperparametri del modello e Iperparametri dell'algoritmo. Gli iperparametri del modello non possono essere assunti mentre servono la macchina al set di addestramento perché indirizzano all'attività di selezione del modello. Al contrario, gli iperparametri dell'algoritmo non hanno alcun effetto sulle prestazioni del modello ma influenzano la velocità e la qualità del processo di apprendimento. Diversi iperparametri sono richiesti da diverse tecniche di addestramento del modello, ma ci sono alcuni algoritmi di base che non necessitano di alcun iperparametro.