Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
5.6 Pipeline Scikit-learn (L05: Apprendimento automatico con Scikit-Learn)
5.6 Pipeline Scikit-learn (L05: Apprendimento automatico con Scikit-Learn)
Bene, gente, siamo finalmente arrivati all'ultima parte della Lezione 5, che è, secondo me, la più interessante: le pipeline di apprendimento sacro. Queste pipeline sono oggetti o classi incredibilmente utili che ci consentono di combinare l'elaborazione dei dati e le fasi di previsione senza soluzione di continuità. Per darti una panoramica, presenterò un diagramma di flusso di come funzionano le pipeline, anche se non approfondirò ancora tutti i dettagli.
Pensa a una pipeline come a uno stimatore con un'API del trasformatore. Simile a uno stimatore, una pipeline ha un metodo di adattamento che possiamo utilizzare sul set di addestramento. Internamente, la pipeline passa attraverso più fasi di adattamento e trasformazione e alla fine arriva alla fase di adattamento finale. A seconda di ciò che definiamo nella nostra pipeline, può eseguire varie attività come il ridimensionamento dei dati (ad esempio, la standardizzazione o il ridimensionamento min-max), la riduzione della dimensionalità, l'addestramento di un algoritmo di apprendimento e la restituzione di un modello predittivo che possiamo utilizzare sul set di test .
Quando chiamiamo il metodo predict sul set di test, analogamente all'API dello stimatore, la pipeline utilizza internamente il passaggio di trasformazione per applicare lo stesso ridimensionamento eseguito sul set di training. Ciò garantisce la coerenza nell'elaborazione dei dati. Infine, la pipeline usa il modello adattato per fare previsioni, come la restituzione di etichette di classe nel caso di un classificatore.
Permettetemi di illustrarlo con un semplice esempio di codice di una pipeline. Qui, sto creando una pipeline usando la funzione make_pipeline dal sottomodulo sklearn.pipeline di sacred learn. Questo è un modo conveniente per creare pipeline. In questo esempio, sto costruendo una pipeline di base composta da uno scaler standard e un classificatore K-nearest neighbor. Lo scaler standard, come abbiamo discusso nel video precedente, standardizza i dati facendoli avere media zero e varianza unitaria. Inizializziamo lo scaler standard e il classificatore K-nearest neighbor come componenti della pipeline.
Una volta creata la pipeline, possiamo utilizzare il metodo fit per addestrare la pipeline sui dati di addestramento. Quindi, possiamo utilizzare il metodo predict per fare previsioni sul set di test. Quando chiamiamo fit, la pipeline applica prima lo scaler standard per apprendere la media e la deviazione standard dai dati di addestramento. Utilizza quindi queste informazioni per ridimensionare i dati, che vengono passati al passaggio successivo, il classificatore K-nearest neighbor. Il classificatore riceve il training set standardizzato ed esegue il suo algoritmo di apprendimento.
Durante la previsione, si verifica lo stesso processo, tranne per il fatto che non è necessario un passaggio di adattamento. La pipeline riutilizza le statistiche apprese durante il training per ridimensionare i dati di test e applica il classificatore appreso per fare previsioni.
Per riassumere, una pipeline ci consente di concatenare più oggetti, come trasformatori e stimatori, per creare un flusso di lavoro coerente. Fornisce un modo conveniente ed efficiente per gestire l'elaborazione dei dati e le fasi di previsione nelle attività di machine learning.
Diamo ora un'occhiata a una pipeline in azione applicando il semplice metodo di controllo per la selezione del modello. La selezione del modello implica l'ottimizzazione degli iperparametri per selezionare il modello migliore. Nel metodo di controllo, dividiamo i dati in un set di addestramento e un set di test. All'interno del set di addestramento, lo suddividiamo ulteriormente in un sottoinsieme per l'apprendimento e un altro sottoinsieme per la convalida, in cui valutiamo diversi modelli con varie impostazioni di iperparametri.
In scikit-learn, possiamo eseguire il metodo di controllo e l'ottimizzazione degli iperparametri utilizzando un metodo chiamato ricerca sulla griglia. La ricerca della griglia implica la creazione di una griglia di parametri che definisce le combinazioni di iperparametri che vogliamo valutare. Ad esempio, nel caso di k vicini più vicini, possiamo considerare valori diversi per il numero di vicini (k) e la metrica della distanza (p). La ricerca a griglia esegue iterazioni su tutte le possibili combinazioni, adattando i modelli al set di addestramento e valutandoli sul set di convalida.
Sebbene la ricerca in griglia venga in genere utilizzata con la convalida incrociata K-fold, in questo esempio ci concentreremo sul metodo di controllo. Per applicare il metodo di controllo e la ricerca della griglia utilizzando una pipeline, possiamo utilizzare la classe GridSearchCV da scikit-learn. Questa classe ci consente di definire la griglia dei parametri e la pipeline e gestisce il processo di adattamento dei modelli e di valutazione degli stessi.
Ecco uno snippet di codice di esempio per dimostrare come utilizzare GridSearchCV con una pipeline:
Successivamente, definiamo la griglia del parametro param_grid che specifica le diverse combinazioni di iperparametri che vogliamo valutare. In questo caso, variamo il numero di vicini (n_neighbors) e la funzione di peso (weights) per il classificatore K-nearest neighbor. Si noti che i nomi dei parametri nella griglia sono preceduti dal nome del componente della pipeline seguito da un doppio carattere di sottolineatura (__).
Creiamo un oggetto GridSearchCV, passando la pipeline, la griglia dei parametri e il numero desiderato di pieghe di convalida incrociata (cv). La classe GridSearchCV esegue automaticamente la ricerca nella griglia adattando la pipeline ai dati di addestramento e valutando i modelli nel set di convalida.
Una volta completata la ricerca sulla griglia, possiamo accedere ai migliori parametri e al miglior punteggio utilizzando gli attributi best_params_ e best_score_ dell'oggetto GridSearchCV. Stampiamo questi valori per vedere quale combinazione di iperparametri ha prodotto le prestazioni migliori.
Infine, valutiamo il modello migliore sul set di test accedendovi dall'attributo best_estimator_ dell'oggetto GridSearchCV e calcolando l'accuratezza utilizzando il metodo score.
Questo esempio dimostra come possiamo sfruttare le pipeline e la ricerca sulla griglia per esplorare in modo efficiente le diverse impostazioni degli iperparametri e selezionare il modello migliore utilizzando il metodo di controllo. Combinando le fasi di elaborazione dei dati e l'addestramento del modello all'interno di una pipeline, possiamo semplificare il flusso di lavoro di machine learning e sperimentare facilmente diversi componenti e iperparametri.
6.1 Introduzione agli alberi decisionali (L06: Alberi decisionali)
6.1 Introduzione agli alberi decisionali (L06: Alberi decisionali)
Infine, tratteremo un nuovo argomento: gli alberi decisionali. Gli algoritmi dell'albero decisionale possono essere considerati come metodi iterativi di costruzione top-down per classificatori e modelli di regressione. Per mantenere i video gestibili e non troppo lunghi, ho diviso la lezione in sette parti.
Nella prima parte, forniremo una breve panoramica degli alberi decisionali, la loro rappresentazione concettuale e introdurremo la terminologia di base. Successivamente, discuteremo gli algoritmi ricorsivi nel contesto degli alberi decisionali e spiegheremo brevemente cosa sono gli algoritmi ricorsivi. Questa comprensione ci aiuterà ad analizzare la complessità di runtime (Big O) degli alberi decisionali.
Andando avanti, esploreremo diversi tipi di alberi decisionali. Attualmente, il secondo studente implementa l'algoritmo dell'albero decisionale CART (Alberi di classificazione e regressione) sviluppato da Leo Breiman. Tuttavia, esistono altri algoritmi come ID3 e C4.5, ognuno con i propri vantaggi e svantaggi. Toccheremo questi diversi metodi e potremmo assegnare un esercizio a casa, possibilmente implementando l'albero decisionale ID3.
Durante la lezione, esploreremo anche vari criteri di suddivisione utilizzati per gli alberi decisionali. Attualmente, il secondo studente utilizza CART, che è tipicamente basato sull'impurità di Gini. Tuttavia, consente di combinare e abbinare diversi criteri di suddivisione. Questi criteri di suddivisione si riferiscono alle funzioni o misure utilizzate per determinare una buona caratteristica per suddividere un albero decisionale. Tratteremo i criteri di impurità ed entropia di Gini e discuteremo perché sono preferiti rispetto all'errore di classificazione errata quando si valuta la crescita dell'albero e la qualità della divisione.
Una volta trattati questi dettagli, approfondiremo i miglioramenti che possono rendere gli alberi decisionali più efficienti in termini di tempo di esecuzione computazionale e precisione di classificazione. Affronteremo anche la sfida dell'overfitting ed esploreremo le tecniche per mitigarla.
Infine, forniremo un esempio di codice che dimostra come lavorare con alberi decisionali in scikit-learn, una popolare libreria di machine learning. Questo esempio pratico ti aiuterà a consolidare la tua comprensione degli alberi decisionali e della loro implementazione.
Ora, tuffiamoci nel concetto di base di un albero decisionale. Sebbene non siano strettamente un problema di apprendimento automatico, gli alberi decisionali si riferiscono a scenari della vita quotidiana che coinvolgono il processo decisionale. Ad esempio, possiamo considerare la decisione di cosa fare in un dato momento. Se abbiamo del lavoro da fare, possiamo scegliere di rimanere dentro e completare il lavoro. Al contrario, se non abbiamo lavori in sospeso, possiamo prendere in considerazione l'idea di uscire, a seconda delle previsioni meteorologiche.
Diciamo che, se c'è il sole e non fa troppo freddo, potremmo optare per andare al mare. Tuttavia, se è nuvoloso, potremmo scegliere di andare a correre. In caso di pioggia o neve, potremmo chiedere ai nostri amici la loro disponibilità. Se i nostri amici sono occupati, potremmo decidere di rimanere in casa e impegnarci in attività come leggere un libro. D'altra parte, se i nostri amici sono liberi, possiamo esplorare opzioni come andare al cinema, giocare ai videogiochi online o fare una chat online.
Questo schema di base rappresenta un albero decisionale, in cui ogni nodo corrisponde a una domanda oa una decisione, ei rami portano a diverse opzioni. Il nodo radice rappresenta la prima domanda o decisione nell'albero, mentre i nodi foglia sono gli output finali. I nodi interni sono le decisioni intermedie che guidano il flusso dell'albero.
Inoltre, i nodi in un albero decisionale possono essere classificati in nodi binari o multicategoria. I nodi binari offrono solo due opzioni, mentre i nodi multicategoria supportano più di due opzioni. Tuttavia, le suddivisioni multicategoria possono essere convertite in suddivisioni binarie, come discusso in precedenza.
Gli alberi decisionali possono anche essere interpretati come insiemi di regole, simili alle istruzioni if-else nella programmazione. Infatti, gli alberi decisionali possono essere convertiti in insiemi di regole, anche se la conversione inversa non è sempre possibile. Questa caratteristica degli alberi decisionali li rende altamente interpretabili e spiegabili, il che è cruciale nei domini in cui l'interpretabilità e la spiegabilità sono importanti, come nei domini legali e medici.
Per costruire un albero decisionale, abbiamo bisogno di un set di dati che contenga esempi di input e output corrispondenti. Ogni esempio è costituito da un insieme di caratteristiche (noto anche come attributi o predittori) e una variabile di destinazione (l'output che vogliamo prevedere). L'algoritmo dell'albero delle decisioni analizza le caratteristiche e le loro relazioni per determinare il modo migliore per suddividere i dati e fare previsioni.
Il processo di costruzione di un albero decisionale comporta la selezione della migliore funzionalità per suddividere i dati in ciascun nodo. L'obiettivo è trovare la caratteristica che fornisce il maggior guadagno di informazioni o la migliore suddivisione in termini di accuratezza della classificazione. Questo processo viene in genere eseguito in modo ricorsivo, partendo dal nodo radice e proseguendo fino ai nodi foglia.
Ad ogni passaggio, l'algoritmo valuta diversi criteri di suddivisione, come l'impurità di Gini o l'entropia. L'impurità di Gini misura la probabilità di classificare erroneamente un elemento scelto a caso dall'insieme, mentre l'entropia misura la quantità media di informazioni necessarie per identificare l'etichetta di classe di un elemento scelto a caso dall'insieme. Questi criteri aiutano a determinare la purezza dei sottoinsiemi risultanti dopo una divisione.
Una volta selezionata una caratteristica per la suddivisione, i dati vengono divisi in sottoinsiemi in base ai possibili valori della caratteristica. Questo processo viene ripetuto in modo ricorsivo per ogni sottoinsieme finché non viene soddisfatto un criterio di arresto. Il criterio di arresto potrebbe essere il raggiungimento di una profondità massima dell'albero, il raggiungimento di un numero minimo di campioni in un nodo foglia o il raggiungimento di un certo livello di purezza nei nodi foglia.
Per prevedere la variabile di destinazione per una nuova istanza utilizzando un albero decisionale addestrato, iniziamo dal nodo radice e attraversiamo l'albero seguendo i rami appropriati in base ai valori delle caratteristiche dell'istanza. Alla fine, raggiungiamo un nodo foglia, che fornisce l'output previsto.
Gli alberi decisionali hanno diversi vantaggi. Sono facili da capire e interpretare, rendendoli una scelta popolare per visualizzare e spiegare il processo decisionale. Possono gestire funzioni sia numeriche che categoriche e possono essere utilizzate sia per attività di classificazione che di regressione. Gli alberi decisionali sono anche resistenti ai valori mancanti e ai valori anomali, in quanto possono gestirli in modo efficace durante il processo di suddivisione.
Tuttavia, anche gli alberi decisionali presentano alcune limitazioni. Possono facilmente sovradimensionare i dati di addestramento, con conseguente scarsa generalizzazione a esempi invisibili. Ciò può essere mitigato utilizzando tecniche di potatura o impiegando metodi di ensemble come foreste casuali o potenziamento del gradiente. Gli alberi decisionali sono anche sensibili a piccoli cambiamenti nei dati di addestramento e possono essere generate diverse suddivisioni per set di dati simili. Inoltre, gli alberi delle decisioni possono avere difficoltà a catturare relazioni complesse tra le caratteristiche.
In conclusione, gli alberi decisionali sono modelli potenti e interpretabili che possono essere utilizzati per attività di classificazione e regressione. Forniscono un chiaro quadro decisionale rappresentando i dati come una struttura ad albero con nodi e rami. La scelta dei criteri di suddivisione e dei criteri di arresto, insieme alle tecniche per gestire l'overfitting, svolgono un ruolo importante nella costruzione di alberi decisionali accurati e robusti.
6.2 Algoritmi ricorsivi e Big-O (L06: Decision Trees)
6.2 Algoritmi ricorsivi e Big-O (L06: Decision Trees)
In questo video, la nostra discussione ruota attorno agli algoritmi ricorsivi, che sono strettamente collegati al concetto di divide et impera. Il divide et impera comporta la scomposizione di un problema in sottoproblemi più piccoli, risolvendoli individualmente e quindi combinando le soluzioni. L'addestramento e la previsione dell'albero decisionale, nonché vari algoritmi di divisione e conquista, sono collegati a questo concetto. La ricorsione è una tecnica comune utilizzata per implementare algoritmi di divisione e conquista, sebbene non sia l'unico approccio.
Per cogliere l'idea di ricorsione, esaminiamo un esempio di algoritmo ricorsivo implementato in Python. Per motivi di discussione, ho intenzionalmente nascosto il nome effettivo della funzione per incoraggiarti ad analizzarne lo scopo prima di approfondire i dettagli. Ti incoraggio a prenderti un momento per pensare a cosa potrebbe fare questa funzione. Puoi mettere in pausa il video o persino sperimentarlo in un notebook Jupyter per comprenderne il comportamento.
Supponendo che tu abbia avuto il tempo di analizzarlo, esploriamo insieme la funzione. Questa particolare funzione opera sulle liste Python. Ad esempio, considera un elenco come [1, 2, 3]. Lo scopo di questa funzione è determinare la lunghezza di un array o di un elenco. Esaminiamo come funziona. La funzione accetta un input, qui indicato come 'X', e verifica due condizioni. Innanzitutto, controlla se l'elenco è vuoto. Se lo è, la funzione restituisce 0 perché un elenco vuoto ha una lunghezza pari a zero, che funge da condizione di arresto. Altrimenti, se l'elenco non è vuoto, la funzione restituisce 1 e chiama se stessa con un input più piccolo.
Se questo sembra astratto, analizziamolo passo dopo passo. Supponiamo di iniziare con un elenco completo, come [1, 2, 3]. Inizialmente, la funzione controlla se l'elenco è vuoto, cosa che non è. Di conseguenza, procede all'istruzione 'else', dove restituisce 1 e si richiama ricorsivamente con un input più piccolo. In questo caso, l'input diventa [2, 3] poiché rimuoviamo il primo elemento dall'elenco originale. Ripetiamo il processo: la funzione restituisce di nuovo 1, chiama se stessa con il nuovo input [3] e infine si chiama con una lista vuota.
Una volta raggiunta la lista vuota, la funzione controlla ancora una volta la condizione 'if', che ora è vera. Di conseguenza, restituisce 0. Quando valutiamo l'intera espressione, otteniamo il valore 3. Pertanto, questa funzione calcola la lunghezza di un array utilizzando la ricorsione, in cui la funzione chiama se stessa all'interno della propria definizione. Vale la pena notare che mentre la ricorsione è una soluzione concettualmente elegante nella teoria dell'informatica, potrebbe non essere sempre l'approccio più pratico per l'implementazione. In Python, la ricorsione ha limitazioni sul numero di chiamate automatiche e liste eccessivamente grandi possono causare un errore di Stack Overflow.
Andando avanti, esploriamo un altro esempio che utilizza la ricorsione. Qui, affrontiamo un problema di divisione e conquista, ordinando un elenco o un array, utilizzando l'algoritmo quicksort. Simile alla funzione precedente, quicksort utilizza la ricorsione come mezzo di implementazione. L'algoritmo utilizza una condizione di arresto, in cui la funzione restituisce l'array così com'è se contiene meno di due elementi. In caso contrario, l'algoritmo esegue la sezione principale del codice.
Come funziona Quicksort? Innanzitutto, selezioniamo un pivot, in genere il primo elemento dell'array. Quindi, creiamo due nuovi elenchi: uno per contenere gli elementi più piccoli del pivot e un altro per gli elementi più grandi del pivot. Iteriamo attraverso l'array, escludendo il pivot, e distribuiamo ciascun elemento all'elenco più piccolo o più grande in base al suo confronto con il pivot. Successivamente, chiamiamo ricorsivamente quicksort su entrambe le liste più piccole e più grandi, usando il pivot come elemento centrale. Alla fine, il
le chiamate ricorsive raggiungeranno la condizione di arresto quando le liste hanno meno di due elementi. A quel punto, la funzione restituisce semplicemente gli elenchi ordinati.
Facciamo un esempio per capire il processo. Supponiamo di avere un elenco non ordinato [7, 2, 5, 1, 9, 3]. L'algoritmo quicksort procederà come segue:
Dividendo ricorsivamente l'elenco in sottoelenchi più piccoli e ordinandoli, l'algoritmo quicksort ordina in modo efficiente l'intero elenco.
In conclusione, gli algoritmi ricorsivi giocano un ruolo cruciale negli approcci divide et impera. Suddividono i problemi in sottoproblemi più piccoli e li risolvono individualmente, combinando infine le soluzioni per risolvere il problema originale. Le funzioni ricorsive chiamano se stesse all'interno della propria definizione, lavorando ripetutamente su input più piccoli fino a raggiungere una condizione di arresto. Tuttavia, è importante considerare la condizione di terminazione per evitare la ricorsione infinita e garantire che l'algoritmo converga a una soluzione.
6.3 Tipi di alberi decisionali (L06: Alberi decisionali)
6.3 Tipi di alberi decisionali (L06: Alberi decisionali)
Nei video precedenti, ci siamo concentrati sull'introduzione di alberi decisionali e algoritmi ricorsivi. Ora, esaminiamo diversi tipi di alberi decisionali. Esploreremo in che modo l'alterazione di determinate scelte di progettazione può portare a diverse implementazioni degli algoritmi dell'albero decisionale.
Innanzitutto, ricapitoliamo l'algoritmo dell'albero decisionale generico in pseudocodice, di cui abbiamo discusso nel video precedente. Abbiamo affrontato un problema di classificazione binaria, in cui le etichette di classe erano solo 1 e 0. Il nostro albero seguiva una struttura binaria, che coinvolgeva la divisione binaria. Ciò significa che ogni nodo è stato diviso esattamente in due nodi figli. Inoltre, abbiamo considerato solo le funzionalità binarie, in cui i valori delle funzionalità potrebbero essere 0 o 1.
Tuttavia, come abbiamo dimostrato in precedenza utilizzando la visualizzazione dell'albero decisionale in scikit-learn, possiamo anche utilizzare funzionalità continue e convertirle in suddivisioni binarie. Ad esempio, possiamo selezionare una caratteristica, chiamiamola xj, e dividerla in due parti usando una soglia, indicata con 't'. Questo criterio di suddivisione può essere definito come xj minore di to xj maggiore o uguale a t, che può essere rappresentato come vero o falso. Questo ci consente di eseguire uno split binario anche con funzionalità continue, in quanto possiamo regolare la soglia di decisione durante il processo di splitting. Avrai l'opportunità di lavorare su una tale divisione nei compiti.
Ora, concentriamoci sull'implementazione dell'algoritmo dell'albero decisionale. Ad ogni nodo dell'albero decisionale, consideriamo una singola caratteristica, indicata come xj, dove 'j' va da 1 a m, rappresentando fino a m caratteristiche. Quando dividiamo un nodo genitore in due nodi figli, diciamo figlio zero e figlio uno, dobbiamo determinare quale caratteristica scegliere per la divisione. Per le funzionalità continue, dobbiamo anche considerare la soglia di decisione, dove confrontiamo se xj è maggiore o uguale a un valore specifico 't'. La selezione della caratteristica e della soglia appropriate è fondamentale e abbiamo bisogno di una misura di bontà per valutare la qualità di una divisione.
Per riassumere l'algoritmo di crescita dell'albero generico, selezioniamo la caratteristica che si traduce nel maggior guadagno di informazioni quando il nodo padre viene diviso. Il guadagno di informazioni è una misura della bontà per una scissione. Maggiore è il guadagno di informazioni, migliore è la suddivisione e la caratteristica scelta, inclusa la sua soglia di suddivisione per le caratteristiche continue. Nel prossimo video discuteremo di due misure comunemente utilizzate per valutare la bontà di una scissione: l'entropia e l'impurità di Gini.
L'algoritmo segue determinate condizioni di arresto. Si interrompe se i nodi figlio sono puri, ovvero tutti i punti dati all'interno di un nodo hanno la stessa etichetta di classe. In alternativa, si interrompe se il guadagno di informazioni è minore o uguale a zero, indicando nessun miglioramento. Una volta che raggiungiamo un nodo puro o non riusciamo a fare progressi, smettiamo di far crescere ulteriormente l'albero.
Dopo aver fatto crescere l'albero decisionale, possiamo usarlo per fare previsioni. Supponiamo di avere un albero con più livelli, comprendente nodi padre e foglia. Per prevedere l'etichetta della classe di un nuovo punto dati, attraversiamo l'albero in base ai valori delle caratteristiche del punto dati. Ad ogni nodo, seguiamo il ramo corrispondente in base alle condizioni della caratteristica fino a raggiungere un nodo foglia. Per i nodi foglia, utilizziamo l'approccio del voto di maggioranza per determinare l'etichetta della classe. Ciò significa che prevediamo l'etichetta di classe che appare più frequentemente all'interno di quel nodo foglia.
È importante notare che gli alberi decisionali possono gestire problemi di classificazione sia binaria che multiclasse. Lo pseudocodice di cui abbiamo discusso nelle diapositive precedenti si concentrava sulla classificazione binaria, ma gli alberi decisionali possono gestire un numero arbitrario di etichette di classe. L'approccio del voto maggioritario è applicabile indipendentemente dal numero delle classi.
Quando sviluppiamo algoritmi ad albero decisionale, incontriamo varie scelte progettuali. Una domanda cruciale è come dividere i nodi. Dobbiamo definire il criterio per la divisione e determinare come confrontare e valutare le diverse divisioni. Le due misure comunemente utilizzate per valutare la qualità di una scissione sono l'entropia e l'impurità di Gini.
L'entropia è una misura dell'impurità o del disordine all'interno di un nodo. Quantifica l'incertezza associata alle etichette di classe dei punti dati in quel nodo. L'entropia di un nodo viene calcolata utilizzando la seguente formula:
Entropia(nodo) = - sum(p(i) * log2(p(i))), per tutte le classi i
dove p(i) rappresenta la proporzione di punti dati nel nodo che appartengono alla classe i. Il valore di entropia varia da 0 a 1, dove 0 indica un nodo puro (tutti i punti dati appartengono alla stessa classe) e 1 indica la massima impurità (equa distribuzione dei punti dati in tutte le classi).
Per valutare la qualità di una divisione, calcoliamo la media ponderata dei valori di entropia per i nodi figli risultanti. Questo è noto come guadagno di informazioni. Il guadagno di informazioni è calcolato come segue:
Informazioni Guadagno = Entropy(parent) - sum((|Sv| / |S|) * Entropy(Sv)), per tutti i nodi figli v
dove Entropy(parent) è l'entropia del nodo genitore, |Sv| rappresenta il numero di punti dati nel nodo figlio v, e |S| è il numero totale di punti dati nel nodo padre. Il guadagno di informazioni misura la riduzione dell'entropia ottenuta dividendo il nodo in base a una particolare caratteristica.
L'impurità di Gini è un'altra misura utilizzata per valutare la qualità di una scissione. Quantifica la probabilità di classificare erroneamente un punto dati scelto a caso in un nodo se assegniamo un'etichetta di classe basata sulla distribuzione delle etichette di classe in quel nodo. L'impurità Gini di un nodo viene calcolata utilizzando la seguente formula:
Gini(nodo) = 1 - sum(p(i)^2), per tutte le classi i
dove p(i) rappresenta la proporzione di punti dati nel nodo che appartengono alla classe i. Simile all'entropia, il valore dell'impurità di Gini varia da 0 a 1, dove 0 indica un nodo puro e 1 indica la massima impurità.
Per valutare la qualità di una divisione, calcoliamo la media ponderata dei valori di impurità di Gini per i nodi figli risultanti. Questo è noto come indice di impurità di Gini. L'indice di impurità di Gini è calcolato come segue:
Indice Gini = sum((|Sv| / |S|) * Gini(Sv)), per tutti i nodi figli v
dove |Sv| rappresenta il numero di punti dati nel nodo figlio v, e |S| è il numero totale di punti dati nel nodo padre. L'indice di Gini misura la riduzione dell'impurità di Gini ottenuta dividendo il nodo in base a una particolare caratteristica.
Sia l'entropia che l'impurità di Gini sono comunemente utilizzate negli algoritmi dell'albero decisionale e la scelta tra di esse dipende dal problema specifico e dalle caratteristiche dei dati. In scikit-learn, puoi selezionare il parametro criterio per specificare "entropia" o "gini" durante la creazione di modelli di albero decisionale.
Nel prossimo video, approfondiremo queste misure e discuteremo come utilizzarle per determinare le migliori suddivisioni in un algoritmo ad albero decisionale.
6.4 Criteri di suddivisione (L06: Alberi decisionali)
6.4 Criteri di suddivisione (L06: Alberi decisionali)
Nel video, l'oratore approfondisce le complessità degli alberi decisionali e introduce il concetto di criteri di suddivisione all'interno di questo quadro. I criteri di suddivisione sono essenzialmente i criteri o le misure impiegati per determinare la caratteristica più adatta per suddividere un nodo padre nei suoi nodi figlio. In generale, un set di dati comprende più caratteristiche, denotate come x1, x2, x3, ..., xm, dove j rappresenta un valore compreso tra 1 e m.
Il relatore sottolinea che in ogni nodo dell'albero decisionale, deve essere presa una decisione critica in merito alla caratteristica da utilizzare per il processo di scissione. Per identificare la caratteristica ottimale, vengono definiti determinati criteri o misure per confrontare e valutare le caratteristiche disponibili. L'obiettivo è selezionare una caratteristica che produca una suddivisione migliore, migliorando così l'accuratezza predittiva dell'albero decisionale.
Per illustrare il funzionamento degli alberi decisionali, il relatore presenta un set di dati giocattolo costituito da tre caratteristiche: x1, x2, x3 e una colonna che denota l'etichetta della classe, y. Le etichette di classe in questo set di dati sono binarie e assumono i valori di uno o zero. Il relatore osserva che utilizzando solo due funzionalità, è possibile ottenere una precisione di addestramento del 100% per questo particolare set di dati.
Sfidando il pubblico, il relatore li invita a trovare due regole basate sulle tre caratteristiche che possono portare a una precisione di allenamento del 100%. Suggeriscono di mettere in pausa il video per contemplare la soluzione. Successivamente, il relatore rivela la soluzione, spiegando che solo x1 e x2 sono le caratteristiche rilevanti e utili, mentre x3 è apparentemente casuale e non contribuisce alla precisione.
Andando avanti, il relatore rappresenta visivamente il set di dati tracciando i valori di x1 e x2 su un grafico. I punti rossi sul grafico rappresentano i punti dati appartenenti all'etichetta di classe uno, mentre i quadrati blu rappresentano i punti dati etichettati come zero. Sulla base del modello osservato nei punti dati, l'oratore procede a creare una divisione, con conseguente formazione di un albero decisionale.
La divisione iniziale si basa sul fatto che x1 è maggiore di 5,5. Questa divisione suddivide i dati in due regioni, una etichettata in blu e l'altra in rosso. L'oratore osserva che mentre questa suddivisione classifica correttamente alcuni punti dati, ne classifica anche altri in modo errato. La divisione successiva si basa sul fatto che x2 è maggiore di 10,5. Ciò perfeziona ulteriormente il processo di classificazione e alla fine porta a un albero decisionale che raggiunge una precisione di addestramento del 100%.
Per migliorare la chiarezza, l'oratore fornisce una rappresentazione visiva più chiara dell'albero decisionale, chiarendo le informazioni associate a ciascun nodo. Ogni nodo simboleggia un nodo genitore che subisce la divisione, con conseguente creazione di nodi figli. Per ogni nodo vengono visualizzati il valore di suddivisione (rappresentato dal valore della caratteristica e dalla soglia), l'entropia (una misura del contenuto informativo), il numero di esempi di addestramento (campioni), la distribuzione dell'etichetta di classe (sede) e la classe di maggioranza.
L'albero decisionale è rappresentato in una struttura gerarchica, con nodi padre che danno origine a nodi figlio. Il relatore sottolinea il significato di ciascun nodo, evidenziando che gli alberi decisionali utilizzano questi nodi per fare previsioni basate sulle caratteristiche di input.
Infine, il relatore menziona un approccio alternativo per ottenere una precisione di allenamento del 100% utilizzando esclusivamente la seconda funzione. Dimostrano un albero decisionale basato su questo approccio alternativo, mostrando come la funzione due può essere suddivisa ai valori 7,5 e 10 per separare accuratamente i punti dati nelle classi desiderate.
In uno scenario ideale in cui abbiamo funzionalità continue e soglie impostate correttamente, si applicherebbero i concetti di cui sopra. Invece di usare la variabile "V", useremmo una variabile xj, che rappresenta una caratteristica continua che è minore o uguale a una soglia. Il secondo nodo figlio simbolizzerebbe i valori superiori alla soglia. In questo caso, se disponiamo di caratteristiche continue, è possibile utilizzare una formula simile a quella precedente, ma ora è necessario incorporare un valore di soglia nella funzione. Possiamo confrontare i valori per verificare se sono maggiori o uguali alla soglia.
Quindi, se abbiamo una funzione continua e un albero binario simile a CART (albero di classificazione e regressione), dobbiamo solo sommare due nodi figlio invece di più nodi. Un nodo figlio corrisponde a valori superiori alla soglia, mentre l'altro rappresenta valori inferiori o uguali alla soglia. Questa semplificazione è logica in quanto ci concentriamo sui due possibili esiti basati sul valore soglia. Tuttavia, è fondamentale riconoscere che questa spiegazione potrebbe apparire densa, e un aspetto significativo che manca ancora è il concetto di entropia, che verrà esplorato nelle diapositive successive.
In questo contesto, l'entropia appartiene all'entropia di Shannon, introdotta da Claude Shannon nell'ambito della teoria dell'informazione. Diverge dall'entropia impiegata in biofisica o termodinamica. L'entropia di Shannon funge da metrica per quantificare l'impurità o il disordine dei nodi figlio all'interno degli alberi decisionali. Quantifica la quantità di informazioni trasmesse da una variabile casuale discreta che possiede due risultati, simile a una distribuzione di Bernoulli. Nella distribuzione di Bernoulli, un parametro di probabilità indicato come p rappresenta la probabilità che si verifichi un evento.
Shannon ha definito l'informazione come il numero di bit richiesti per codificare il valore 1/p. In termini più semplici, misura il livello di certezza o incertezza associato a un evento. Il numero di bit necessari può essere calcolato come base logaritmica 2 di 1/p. All'aumentare della probabilità p, il numero di bit richiesti diminuisce, indicando un maggiore grado di certezza. Al contrario, quando la probabilità si avvicina allo zero, il numero di bit richiesti aumenta, implicando un livello di incertezza più elevato.
Per esemplificare questo concetto, consideriamo alcuni esempi. Se abbiamo una probabilità di 0,5, il numero di bit richiesti ammonterebbe a 1. Se la probabilità è 0, il numero di bit richiesti sarebbe infinito, a significare certezza assoluta. Al contrario, se la probabilità è 1, il numero di bit richiesti sarebbe 0, indicando completa incertezza. Quindi, l'intervallo di valori per il termine -log2(p) va da meno infinito a 0.
L'entropia di Shannon viene calcolata come informazione media su tutti i possibili eventi. Rappresenta la media ponderata delle informazioni associate a ciascun evento, dove i pesi sono le rispettive probabilità degli eventi. Nel caso degli alberi decisionali, il concetto di entropia può essere applicato per valutare l'impurità di un nodo figlio. Se un nodo mostra una distribuzione ben bilanciata di etichette di classe, possiederà un'entropia più elevata, a significare una maggiore impurità. Al contrario, se un nodo mostra una distribuzione distorta in cui domina una classe, possiederà un'entropia inferiore, indicando una minore impurità. Questa nozione si allinea intuitivamente, poiché un nodo con maggiore impurità fornisce meno informazioni ai fini della classificazione.
L'entropia offre un mezzo per misurare l'impurità o il disordine all'interno dei nodi figli degli alberi decisionali. Consente la valutazione della purezza di un nodo in base alla distribuzione delle etichette di classe. Un nodo con maggiore entropia suggerisce una distribuzione più diversificata, mentre un nodo con minore entropia indica una distribuzione più omogenea. Considerando l'entropia dei nodi figlio, è possibile prendere decisioni più informate durante la costruzione di alberi decisionali.
6.5 Gini & Entropy contro errori di classificazione errata (L06: Decision Trees)
6.5 Gini & Entropy contro errori di classificazione errata (L06: Decision Trees)
Nel video precedente, abbiamo discusso i vari criteri di suddivisione che possono essere utilizzati per far crescere un albero decisionale. Ora, approfondiamo il motivo per cui due dei criteri di scissione, vale a dire l'impurità di Gini e l'entropia, sono preferiti rispetto al terzo criterio, errore di classificazione errata.
Per ricapitolare, abbiamo tre misure di impurità: entropia, entropia scalata (scalata di 0,5 per il confronto con l'impurità di Gini) ed errore di classificazione errata. La forma di queste misure di impurità è diversa. L'entropia appare come una funzione concava, mentre l'errore di errata classificazione ha un picco acuto a 0,5 con pendenze lineari.
La domanda sorge spontanea: perché usiamo l'entropia e l'impurità di Gini invece dell'errore di classificazione errata per la crescita degli alberi decisionali? Questa domanda si applica non solo all'entropia ma anche all'impurità di Gini. In questo video ci concentreremo sull'entropia, ma il concetto si applica anche all'impurità di Gini.
Consideriamo l'equazione del guadagno di informazioni. Abbiamo una funzione di impurità per il nodo genitore, che rappresenta il set di dati D nel nodo genitore. Quando dividiamo questo set di dati in base ai valori delle funzionalità, generiamo diversi nodi figlio. Questo concetto si applica sia alle caratteristiche categoriche che a quelle continue. Per le funzioni continue, possiamo suddividere creando contenitori basati su una soglia.
La misura dell'impurità viene utilizzata sia per il nodo padre che per il nodo figlio e li riassumiamo considerando la dimensione del set di dati originale nel nodo padre e nel nodo figlio corrente. Generalmente, se scegliamo una misura di impurità per il genitore, la manteniamo coerente anche per i nodi figli.
In pratica, tendiamo ad evitare di utilizzare l'errore di classificazione errata in quanto presenta uno svantaggio, di cui parleremo in questo video. Rivediamo brevemente come vengono calcolati l'entropia e l'errore di classificazione errata. L'entropia è calcolata sommando il prodotto della proporzione di etichette per ogni classe e il logaritmo della proporzione. D'altra parte, l'errore di classificazione errata si basa sulla perdita 0/1, che misura la proporzione di etichette classificate in modo errato.
Ora, concentrandosi sull'entropia rispetto all'errore di classificazione errata, una differenza fondamentale è la loro forma. L'entropia è concava, mentre l'errore di classificazione errata non lo è. Questa differenza influenza il motivo per cui l'entropia è favorita rispetto all'errore di classificazione errata per la crescita degli alberi decisionali.
Per illustrare questo, consideriamo un semplice set di dati giocattolo. Al nodo genitore, abbiamo 40 esempi di classe uno e 80 esempi di classe zero. Se dividiamo il set di dati in base ai valori delle caratteristiche, ci ritroveremo con nodi figli con distribuzioni di classi diverse. Dobbiamo valutare se questa divisione migliora la purezza dei nodi rispetto al genitore.
Se calcoliamo l'entropia per i nodi padre e figlio, troviamo che l'entropia per il nodo figlio due è inferiore a quella del genitore, indicando una maggiore purezza. Tuttavia, il nodo figlio uno è peggiore del genitore. In media, dobbiamo determinare se la divisione è vantaggiosa.
Per misurare la qualità della divisione, utilizziamo il guadagno di informazioni, che considera i valori di entropia per i nodi padre e figlio. Se il guadagno di informazioni è positivo, indica una buona divisione. Nel nostro esempio, il guadagno di informazioni è positivo, indicando una divisione favorevole basata sull'entropia.
Esaminiamo ora lo stesso scenario utilizzando l'errore di classificazione errata. L'errore per il nodo padre, figlio uno e nodo figlio due viene calcolato in base alla proporzione di etichette classificate in modo errato. Se inseriamo questi valori di errore nella formula del guadagno di informazioni, troviamo che il guadagno di informazioni è zero. Un guadagno di informazioni pari a zero implica che la scissione non è vantaggiosa. Di conseguenza, questi nodi non esisteranno e dovremmo considerare altre funzionalità.
In conclusione, il motivo principale per cui l'entropia è preferita all'errore di classificazione errata per la crescita degli alberi decisionali è che l'entropia cattura l'incertezza e il disordine nei dati in modo più efficace. La forma concava dell'entropia consente una migliore differenziazione tra le diverse distribuzioni di classe e fornisce una misura più sfumata dell'impurità. D'altra parte, l'errore di classificazione errata è una misura più semplicistica che considera solo la proporzione di etichette classificate in modo errato e non coglie l'incertezza e la distribuzione delle classi.
La forma concava dell'entropia le consente di penalizzare sia i piccoli che i grandi squilibri di classe. È sensibile ai cambiamenti nelle proporzioni delle classi, dando pesi più elevati a classi distribuite in modo più uniforme. Questa proprietà rende l'entropia particolarmente utile quando si ha a che fare con set di dati che hanno distribuzioni di classi squilibrate.
Al contrario, l'errore di errata classificazione ha una forma lineare, con un picco acuto a 0,5. Tratta tutte le classificazioni errate allo stesso modo e non distingue tra diversi gradi di classificazione errata. Ciò rende l'errore di classificazione errata più sensibile agli squilibri di classe e meno efficace negli scenari con set di dati sbilanciati.
Inoltre, la differenza nelle forme tra l'entropia e l'errore di errata classificazione influisce sul processo di apprendimento dell'albero decisionale. Gli alberi decisionali mirano a trovare divisioni che massimizzino il guadagno di informazioni o riducano l'impurità. Poiché l'entropia fornisce una misura più dettagliata dell'impurità, consente agli alberi decisionali di effettuare divisioni più informate e accurate.
Utilizzando l'entropia come misura di impurità, gli alberi decisionali sono in grado di catturare relazioni complesse tra caratteristiche e classi. Possono gestire caratteristiche sia continue che categoriche e possono scoprire schemi complessi nei dati.
In sintesi, l'entropia è preferita all'errore di classificazione errata per la crescita degli alberi decisionali perché cattura l'incertezza e il disordine nei dati in modo più efficace. La sua forma concava consente una migliore differenziazione tra le diverse distribuzioni di classe ed è più robusta per set di dati sbilanciati. Usando l'entropia, gli alberi decisionali possono effettuare divisioni più informate e catturare relazioni complesse tra caratteristiche e classi.
6.6 Miglioramenti e gestione dell'overfitting (L06: Decision Trees)
6.6 Miglioramenti e gestione dell'overfitting (L06: Decision Trees)
Nel video precedente, abbiamo discusso i diversi criteri di suddivisione che possono essere utilizzati per far crescere un albero decisionale. Ora, approfondiremo il motivo per cui due dei criteri di scissione, vale a dire l'impurità di Gini e l'entropia, sono preferiti rispetto al terzo criterio, errore di classificazione errata.
Per rinfrescarci la memoria, ricordiamo i tre criteri di suddivisione: entropia, entropia scalata (per il confronto con l'impurità di Gini) ed errore di errata classificazione. La forma di queste misure di impurità può essere visualizzata come segue: l'entropia è una funzione concava, rappresentata da un'alta linea nera; anche l'entropia scalata è concava e si ottiene moltiplicando l'entropia per 0,5; e l'errore di errata classificazione mostra un picco acuto a 0,5 e pendenze lineari.
Ora, sorge la domanda: perché preferiamo usare l'entropia e l'impurità di Gini invece dell'errore di classificazione errata quando creiamo alberi decisionali? Questa domanda si applica sia all'entropia che all'impurità di Gini, ma per semplicità, in questa discussione ci concentreremo sull'entropia.
Ricapitoliamo l'equazione del guadagno di informazioni. Iniziamo con un nodo padre, indicato come D, e dividiamo questo set di dati in base ai valori delle caratteristiche, creando diversi nodi figlio. La funzione di impurità viene utilizzata sia per i nodi padre che per quelli figli e riassumiamo i valori di impurità tenendo conto della dimensione dei set di dati. Se scegliamo l'entropia per il nodo genitore, usiamo anche l'entropia per i nodi figli. Lo stesso principio si applica all'impurità di Gini.
In pratica, preferiremmo non utilizzare l'errore di classificazione errata perché presenta uno svantaggio, che esploreremo in questo video. Per capirlo ulteriormente, esaminiamo brevemente le formule per l'entropia, l'impurità di Gini e l'errore di classificazione errata.
L'entropia viene calcolata inserendo le proporzioni delle etichette di classe e sommandole. Usa i logaritmi ed è rappresentato dalla formula in cui sommiamo le classi e moltiplichiamo la proporzione di ciascuna classe per il logaritmo di quella proporzione.
L'impurità di Gini, invece, eleva al quadrato la proporzione dell'etichetta di classe e la sottrae a uno. Evita di utilizzare i logaritmi ed è indicato come 1 meno la somma delle proporzioni dell'etichetta di classe al quadrato.
L'errore di classificazione errata si basa sulla perdita 0-1, che misura la proporzione di etichette classificate in modo errato. Ad esempio, se abbiamo un nodo con etichette 001111, il voto di maggioranza prevede 0 perché è la classe di maggioranza. Tuttavia, considerando la distribuzione, saremmo corretti solo quattro volte su sei, con una precisione di 4/6 o 66,6%. L'errore sarebbe 2/6 o 33,3%.
Per confrontare l'entropia e l'errore di errata classificazione, osserviamo che l'entropia è concava, mentre l'errore di errata classificazione mostra un picco acuto a 0,5 e pendenze lineari. Questa differenza è cruciale per capire perché l'entropia è preferita all'errore di classificazione errata per la crescita degli alberi decisionali.
Per illustrare ciò, consideriamo un semplice set di dati giocattolo con un nodo padre contenente 40 esempi della classe uno e 80 esempi della classe zero. Supponendo che la caratteristica migliore da dividere sia x1, dividiamo il set di dati in base al fatto che i valori della caratteristica siano uno o zero. Otteniamo due nodi figlio: nodo figlio uno e nodo figlio due. Analizzando la distribuzione delle classi, scopriamo che il nodo figlio due è più puro del genitore, mentre il nodo figlio uno è peggiore.
La domanda chiave è se valga la pena dividersi su questa funzione o meno. Per determinarlo, calcoliamo il guadagno di informazioni utilizzando l'entropia. Calcoliamo i valori di entropia per il genitore, il nodo figlio uno e il nodo figlio due. Confrontando questi valori, osserviamo che il nodo figlio due è migliore, mentre il nodo figlio uno è peggiore del genitore. Applicando la formula del guadagno di informazioni, troviamo che il guadagno di informazioni per questa divisione è positivo, indicando che la divisione migliora la purezza complessiva del set di dati.
Consideriamo ora l'errore di errata classificazione come misura dell'impurità invece che dell'entropia. Calcoliamo l'errore di classificazione errata per il genitore, il nodo figlio uno e il nodo figlio due. Confrontando questi valori, scopriamo che il nodo figlio due ha un errore di errata classificazione inferiore rispetto al genitore, mentre il nodo figlio uno ha un errore di errata classificazione più elevato.
Tuttavia, quando calcoliamo il guadagno di informazioni utilizzando l'errore di classificazione errata, incontriamo un problema. La formula del guadagno di informazioni comporta la sottrazione degli errori di errata classificazione ponderati dei nodi figlio dall'errore di errata classificazione del genitore. Poiché l'errore di errata classificazione è una funzione lineare, il guadagno di informazioni può essere negativo se l'errore di errata classificazione dei nodi figli è superiore a quello del genitore.
Nel nostro esempio, anche se il nodo figlio due ha un errore di errata classificazione inferiore rispetto al genitore, l'errore di errata classificazione del nodo figlio uno è più alto, determinando un guadagno di informazioni negativo. Ciò significa che l'utilizzo dell'errore di classificazione errata come misura dell'impurezza scoraggerebbe la divisione, anche se migliora la purezza di uno dei nodi figli.
D'altra parte, quando usiamo l'entropia o l'impurità di Gini come misure di impurità, il guadagno di informazioni sarà sempre non negativo. Sia l'entropia che l'impurità di Gini sono funzioni concave, il che significa che i valori di impurità dei nodi figli sono sempre minori o uguali al valore di impurità del nodo genitore. Ciò garantisce che il guadagno di informazioni sarà positivo ogni volta che la divisione migliora la purezza di almeno un nodo figlio.
Utilizzando l'entropia o l'impurità di Gini come misure di impurità, gli alberi decisionali possono effettuare divisioni in base all'acquisizione di informazioni, che fornisce un approccio di principio per far crescere l'albero e migliorare il suo potere predittivo. L'errore di classificazione errata, d'altra parte, può portare a divisioni non ottimali e alberi decisionali meno accurati.
In sintesi, la preferenza per l'entropia e l'impurità di Gini rispetto all'errore di classificazione errata negli algoritmi dell'albero decisionale è radicata nelle loro proprietà matematiche. La natura concava dell'entropia e dell'impurità di Gini assicura che il guadagno di informazioni sia positivo per le divisioni che migliorano la purezza dei nodi figli, mentre la natura lineare dell'errore di classificazione errata può comportare guadagni di informazioni negativi e divisioni subottimali.
6.7 Esempio di codice Implementazione di alberi decisionali in Scikit-Learn (L06: Alberi decisionali)
6.7 Esempio di codice Implementazione di alberi decisionali in Scikit-Learn (L06: Alberi decisionali)
Per concludere la sesta lezione, esamineremo ora un esempio di codice utilizzando scikit-learn, concentrandoci in particolare sull'algoritmo dell'albero decisionale. Scikit-learn è consigliato per progetti di machine learning nel mondo reale grazie alla sua velocità, efficienza e solidità. Mentre useremo scikit-learn per questa dimostrazione, vale la pena ricordare che implementerai un albero decisionale da zero per il compito a casa per migliorare la tua comprensione dell'algoritmo.
Per iniziare, importiamo i pacchetti necessari, compreso il pacchetto filigrana, che ci aiuterà a tenere traccia delle versioni del software in uso. Questo può essere utile in caso di problemi durante l'esecuzione del codice a causa di versioni software obsolete. Successivamente, carichiamo il set di dati dell'iride, un set di dati popolare spesso utilizzato per attività di classificazione. Utilizzando un set di dati ben noto come iris, possiamo concentrarci maggiormente sulla comprensione del codice e della sua funzionalità piuttosto che sulla spiegazione dei dati.
Abbiamo suddiviso il set di dati in set di addestramento e test, con il 30% dei dati allocato per i test. È importante notare che non eseguiremo alcuna messa a punto su questo notebook. Sebbene sia possibile ottimizzare gli iperparametri dell'albero decisionale utilizzando tecniche come la ricerca sulla griglia, per il momento manterremo le cose semplici e salteremo l'ottimizzazione. Pertanto, non abbiamo bisogno di un set di convalida separato, poiché addestreremo l'albero delle decisioni esclusivamente sul set di addestramento e ne valuteremo le prestazioni sul set di test.
Passando al tracciato delle regioni decisionali, inizializziamo il classificatore dell'albero decisionale e impostiamo gli iperparametri. In questo caso, scegliamo il criterio dell'entropia per l'acquisizione di informazioni e impostiamo la profondità massima su due per scopi didattici. Inoltre, adattiamo l'albero decisionale ai dati di addestramento e tracciamo le regioni decisionali. Visualizzando le regioni decisionali, possiamo osservare come l'albero decisionale separa i dati in base alle funzionalità selezionate.
Esploriamo diverse opzioni e iperparametri che possono essere impostati per il classificatore dell'albero decisionale. Questi includono lo splitter, che determina come vengono effettuate le divisioni in ogni nodo, e i parametri relativi ai campioni minimi richiesti per la divisione dei nodi e dei nodi foglia. Ci sono anche opzioni per selezionare la misura dell'impurità e controllare la casualità delle divisioni. Questi iperparametri possono essere regolati e ottimizzati in base al problema specifico e al set di dati.
Successivamente, procediamo a visualizzare l'albero decisionale utilizzando la libreria graphviz. Esportiamo l'albero decisionale come un dot file, che rappresenta la struttura ad albero come un grafico. Possiamo personalizzare l'aspetto dei nodi, dei bordi e delle etichette nel grafico. Utilizzando la libreria graphviz in combinazione con la libreria pydotplus, possiamo tracciare direttamente l'albero decisionale senza salvare il file dot separatamente. In questo modo, possiamo visualizzare l'albero decisionale all'interno del notebook stesso.
Per visualizzare il grafico dell'albero decisionale, carichiamo il file PNG generato utilizzando il modulo di visualizzazione ipython. Importiamo la classe immagine da ipython display e la usiamo per caricare il file PNG. Questo ci consente di visualizzare il grafico dell'albero delle decisioni direttamente nel Jupyter Notebook. Il grafico dell'albero delle decisioni mostra le divisioni ei limiti delle decisioni rispettivamente come linee verticali e orizzontali, in base alle caratteristiche selezionate.
In sintesi, questo esempio di codice illustra come implementare e visualizzare un classificatore dell'albero delle decisioni utilizzando scikit-learn. L'algoritmo dell'albero decisionale fornisce un modello interpretabile per le attività di classificazione e può essere ottimizzato utilizzando vari iperparametri per migliorare le prestazioni. Visualizzare l'albero delle decisioni aiuta a capire come l'algoritmo prende le decisioni in base alle caratteristiche di input.
7.1 Introduzione ai metodi d'insieme (L07: Metodi d'insieme)
7.1 Introduzione ai metodi d'insieme (L07: Metodi d'insieme)
Nella conferenza di questa settimana, approfondiremo i metodi di ensemble, che sono un campo cruciale nell'apprendimento automatico. Questi metodi sono ampiamente utilizzati nella ricerca sull'apprendimento automatico applicato per ottenere prestazioni elevate nelle applicazioni del mondo reale. I metodi solidi, noti per la loro efficacia nella pratica, danno spesso i migliori risultati.
La conferenza rivisiterà anche gli alberi decisionali, affrontando alcune domande sollevate su Piazza sulla loro rilevanza. Nonostante sia un algoritmo relativamente vecchio e familiare, gli alberi decisionali rimangono molto rilevanti oggi. Non solo sono interpretabili, ma sono spesso impiegati nei metodi d'insieme, dove esibiscono prestazioni eccezionali. La lezione si propone di approfondire anche questo aspetto.
Prima di approfondire i metodi di ensemble, è importante ricapitolare a che punto siamo nel semestre. Attualmente stiamo concludendo la terza parte, che si concentra sui metodi basati sugli alberi. Tuttavia, vale la pena notare che alcuni di questi metodi si estendono oltre gli alberi decisionali e comprendono altre tecniche, inclusi metodi solidi applicati alle reti neurali profonde. Gli alberi decisionali sono stati classificati nella terza parte a causa della loro stretta associazione con la maggior parte dei metodi di ensemble.
Dopo aver completato questa sezione, approfondiremo la valutazione del modello prima di discutere l'apprendimento non supervisionato e, se il tempo lo consente, l'apprendimento bayesiano. Sebbene il piano iniziale fosse quello di sostenere prima l'esame intermedio e coprire altri metodi, la progressione del corso ha richiesto più tempo del previsto. Tuttavia, il tempo aggiuntivo speso per configurare l'ambiente Python e familiarizzare tutti, in particolare quelli senza un forte background Python, è stato vantaggioso. Garantisce che tutti i partecipanti siano sulla stessa pagina e preparati per i compiti imminenti, che comporteranno l'implementazione di un albero decisionale CART (Alberi di classificazione e regressione) senza fare affidamento su librerie predefinite come scikit-learn.
La conferenza è strutturata in sette parti. La prima parte fornisce un'introduzione e una panoramica dei metodi di ensemble. Successivamente, esploreremo vari metodi interni, a partire dal voto a maggioranza, il tipo più semplice di metodo d'insieme. Approfondiremo quindi il bagging, una tecnica che prevede il campionamento bootstrap dal set di addestramento. Verrà spiegata l'utilità di questo metodo. Verrà trattato anche il potenziamento, che comporta il potenziamento di studenti deboli (come alberi decisionali brevi) in modelli forti. In particolare parleremo del gradient boosting, uno degli algoritmi oggi più popolari, noto per il suo successo nelle competizioni Kaggle. Verranno introdotte foreste casuali, un altro metodo di ensemble ampiamente riconosciuto. Questi modelli sono noti per la loro facilità d'uso, poiché spesso offrono prestazioni eccellenti senza un'estesa messa a punto degli iperparametri. Sono consigliati per le persone che cercano modelli predittivi in vari campi scientifici, soprattutto se non hanno esperienza nell'apprendimento automatico.
Verranno menzionate anche le macchine vettoriali di supporto (SVM), in particolare la loro popolarità in passato grazie alle loro prestazioni, in particolare con i kernel RBF (Radial Basis Function). Tuttavia, le foreste casuali spesso forniscono risultati uguali o migliori senza la necessità di un'ottimizzazione approfondita, il che le rende preferibili per le applicazioni pratiche. Infine, verrà discussa l'impilatura, un'altra tecnica popolare nelle applicazioni.
Per illustrare il significato dei metodi di ensemble, verrà presentata una figura che mostra un esempio che coinvolge foreste casuali. Questo modello non è limitato alle attività di classificazione e può calcolare facilmente l'importanza delle caratteristiche. Ad esempio, nell'esempio citato, gli atomi di zolfo sono stati identificati come le caratteristiche più importanti per prevedere l'attività delle molecole. Tali intuizioni possono essere preziose nella pratica.
Inoltre, i metodi di ensemble, comprese le foreste casuali e il potenziamento del gradiente, sono tra i modelli di machine learning non deep learning più utilizzati. Sebbene il deep learning stia acquisendo importanza, gli ensemble sono ancora molto importanti grazie alle loro eccezionali prestazioni e alla facilità di implementazione. L'articolo menzionava l'ascesa del potenziamento del gradiente estremo (XGBoost) come la "nuova regina" negli algoritmi di apprendimento automatico. Ciò sottolinea l'importanza dei modelli basati su alberi, in particolare il potenziamento del gradiente, in varie applicazioni.
In sintesi, la conferenza di questa settimana fornirà una comprensione completa dei metodi di ensemble. Tratterà diversi tipi di tecniche d'insieme e le loro applicazioni.
7.2 Voto di maggioranza (L07: Metodi d'insieme)
7.2 Voto di maggioranza (L07: Metodi d'insieme)
In questo video esploreremo uno dei casi fondamentali di ensemble modello noto come voto di maggioranza. Attraverso un esempio di giocattolo, esamineremo i vantaggi del voto a maggioranza rispetto all'utilizzo di un singolo classificatore in isolamento.
Per iniziare, consideriamo uno scenario in cui abbiamo un problema di classificazione binaria. Abbiamo un set di dati composto da diverse osservazioni, ciascuna associata a un insieme di caratteristiche e un'etichetta di classe corrispondente. Il nostro obiettivo è creare un classificatore in grado di prevedere con precisione le etichette delle classi per istanze nuove e invisibili.
Per dimostrare il concetto di voto a maggioranza, iniziamo addestrando tre singoli classificatori sul nostro set di dati. Ogni classificatore utilizza un algoritmo o un modello diverso per fare previsioni. Per semplicità, supponiamo che questi classificatori siano alberi decisionali.
Dopo aver addestrato i nostri tre classificatori dell'albero decisionale, ora possiamo fare previsioni su nuove istanze. Tuttavia, invece di fare affidamento sulla previsione di un singolo classificatore, utilizziamo il principio del voto a maggioranza. Nella votazione a maggioranza, ogni classificatore nell'insieme esprime un voto per l'etichetta di classe prevista. L'etichetta di classe che riceve il maggior numero di voti è considerata la previsione finale dell'ensemble.
Vediamo ora perché il voto a maggioranza può essere più efficace rispetto all'utilizzo di un solo classificatore. Considera uno scenario in cui ogni singolo classificatore dell'albero decisionale presenta un certo grado di errore a causa del rumore intrinseco o della variabilità nel set di dati. Questi errori possono portare a previsioni errate, riducendo l'accuratezza complessiva di un singolo classificatore.
Tuttavia, combinando le previsioni di più classificatori attraverso il voto a maggioranza, possiamo potenzialmente mitigare l'impatto dei singoli errori. Anche se uno o due classificatori dell'albero decisionale fanno previsioni errate, il processo di voto a maggioranza può compensare questi errori. È più probabile che l'etichetta di classe che riceve la maggioranza dei voti sia corretta, con conseguente miglioramento della precisione rispetto all'utilizzo di un singolo classificatore.
Per illustrare ciò, immaginiamo una situazione in cui due classificatori dell'albero decisionale prevedono l'etichetta di classe corretta, mentre un classificatore effettua una previsione errata. In questo caso, l'etichetta di classe corretta riceverà due voti, mentre la previsione errata riceverà solo un voto. Di conseguenza, il processo di votazione a maggioranza dell'ensemble identificherà correttamente l'etichetta di classe con il maggior numero di voti come previsione finale, ignorando la previsione errata del singolo classificatore.
Questo esempio dimostra la potenza dei metodi di ensemble, in particolare il voto a maggioranza, nel migliorare l'accuratezza della previsione. Combinando le previsioni di più classificatori, possiamo sfruttare i punti di forza di ciascun classificatore e ridurre al minimo l'impatto dei singoli punti deboli o errori.
In conclusione, questo video evidenzia l'importanza del voto a maggioranza come forma base di ensemble modello. Attraverso un esempio di giocattolo, abbiamo visto come il voto a maggioranza può superare le prestazioni utilizzando un singolo classificatore da solo, in particolare quando i singoli classificatori presentano errori o variabilità. I metodi di ensemble, come il voto a maggioranza, offrono un approccio potente per migliorare l'accuratezza della previsione e sono ampiamente utilizzati nelle applicazioni pratiche di machine learning.