Complessità dei costi di potatura negli alberi decisionali

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati.

Comprendere il problema dell'overfitting negli alberi decisionali e risolverlo eliminando la complessità e il costo minimo utilizzando Scikit-Learn in Python

Decision Tree è uno degli strumenti più intuitivi ed efficaci nel toolkit di un data scientist.. Ha una struttura ad albero invertita che una volta veniva utilizzata solo nell'analisi delle decisioni, ma ora è anche un brillante algoritmo di apprendimento automatico, soprattutto quando abbiamo un problema di smistamento tra le mani.

Questi alberi decisionali sono ben noti per la loro capacità di acquisire modelli nei dati.. Ma, l'eccesso di qualsiasi cosa è dannoso, verità? Gli alberi decisionali sono famigerati perché possono aggrapparsi troppo ai dati su cui sono addestrati.

Perciò, il nostro albero fornisce scarsi risultati di implementazione perché non può gestire un nuovo insieme di valori.

immagine-in primo piano-8347301

Ma non preoccuparti! Come un abile meccanico, nella sua cassetta degli attrezzi ha a disposizione chiavi inglesi di tutte le dimensioni, un abile data scientist ha anche il suo set di tecniche per affrontare qualsiasi tipo di problema. Ed è quello che esploreremo in questo articolo..

Il ruolo della potatura negli alberi decisionali

La potatura è una delle tecniche utilizzate per superare il nostro problema di sovradattamento. Potatura, nel suo senso letterale, è una pratica che prevede la rimozione selettiva di alcune parti di un albero (la pianta), come rami, germogli o radici, per migliorare la struttura dell'albero e promuovere una crescita sana. Questo è esattamente ciò che fa anche la potatura con i nostri alberi decisionali. Lo rende versatile in modo che possa adattarsi se gli diamo qualche tipo di nuova informazione, risolvendo così il problema del sovradattamento.

Ridurre le dimensioni di un albero decisionale, lo que puede aumentar ligeramente el error de addestramento, ma diminuisci drasticamente l'errore di test, cosa lo rende più adattabile.

Potatura di minimo costo e complessità è uno dei tipi di potatura degli alberi decisionali.

Questo algoritmo è parametrizzato da α (≥0) noto come parametro di complessità.

Il parametro complessità viene utilizzato per definire la misura della complessità dei costi, Run(T) di un dato albero T: Run(T) = R (T) + un | T |

dove | T | è il numero di nodi terminali in T e R (T) è tradizionalmente definito come il tasso di misclassificazione totale dei nodi terminali.

Nella sua versione 0.22, Scikit-learn ha introdotto questo parametro chiamato ccp_alpha (sì! È l'abbreviazione di Potatura della complessità dei costi – Alfa) ad alberi decisionali che possono essere utilizzati per fare lo stesso.

Costruire l'albero decisionale in Python

Useremo il set di dati Iris per adattarlo all'albero decisionale. Puoi scaricare il set di dati qui.

Primo, importiamo le librerie di base e il set di dati richiesti:

256341_tdqxh0n70ie6d19gh0hziw-1198314

Il set di dati è simile a questo:

immagine-1-4122232

Il nostro obiettivo è prevedere la specie di un fiore in base alla lunghezza e alla larghezza del suo sepalo.

Divideremo il set di dati in due parti: allenati e prova. Lo stiamo facendo in modo da poter vedere come funziona il nostro modello anche su dati invisibili. Useremo il train_test_split funzione di sklearn.model_selection dividere il set di dati.

immagine-2-8128487

Ora, adattiamo un albero decisionale alla parte del treno e prevediamo sia nel test che nell'allenamento. noi useremo Classificatore albero decisionale a partire dal sklearn.tree per questo scopo.

immagine-3-3076137

Per impostazione predefinita, la funzione albero decisionale non esegue alcuna potatura e consente all'albero di crescere il più possibile. Otteniamo un punteggio di precisione di 0,95 e 0,63 sul treno e sul provino, rispettivamente, come mostrato di seguito. Possiamo dire che il nostro modello è overfitted, vale a dire, memorizzare la parte del treno, ma potrebbe non funzionare altrettanto bene nella parte di prova.

immagine-4-1641353

Albero decisionale in sklearn ha una funzione chiamata cost_complexity_pruning_path, che fornisce gli alfa effettivi dei sottoalberi durante la potatura e anche le corrispondenti impurità. In altre parole, possiamo usare questi valori alfa per sfoltire il nostro albero decisionale:

immagine-5-3967849

Imposteremo questi valori alfa e li passeremo a ccp_alpha parametro del nostro Classificatore albero decisionale. In loop su di esso alfas Sede centrale, troveremo la precisione nelle parti di addestramento e test del nostro set di dati.

immagine-6-7729865

immagine-7-5156829

Nel grafico sopra, possiamo vedere che tra alfa = 0.01 e 0.02, otteniamo la massima precisione di prova. Anche se la precisione del nostro treno è diminuita a 0,8, il nostro modello è ora più generalizzato e funzionerà meglio con dati invisibili.

immagine-8-3359046

Note finali

Se vuoi capire la matematica dietro la potatura dei costi e della complessità, clicca su qui. Consulta la documentazione di scikit-learn per gli alberi decisionali facendo clic su qui.

Puoi trovare il taccuino in mi GitHub e dai un'occhiata più da vicino a quello che ho fatto. Cosa c'è di più, connettiti con me su LinkedIne parliamo dei dati.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.

Altoparlante dati