Creazione di incredibili visualizzazioni ad albero decisionale con dtreeviz.

Create amazing decision tree visualizations with dtreeviz.

Come visualizzare i modelli di albero di decisione con questa libreria utilissima

Immagine dell'autore, creata usando dtreeviz.

Per quanto riguarda la spiegazione dei modelli, gli alberi di decisione sono alcuni dei modelli più intuitivi e spiegabili. Ogni modello di albero di decisione può essere spiegato come un insieme di regole interpretabili dall’essere umano. Essere in grado di visualizzare i modelli di albero di decisione è importante per la spiegazione del modello e può aiutare le parti interessate e i responsabili aziendali a fidarsi di questi modelli.

Felizmente, possiamo facilmente visualizzare e interpretare gli alberi di decisione con la libreria dtreeviz. In questo articolo, dimostrerò come è possibile utilizzare dtreeviz per visualizzare modelli basati su alberi per la regressione e la classificazione.

Installazione di dtreeviz

È possibile installare facilmente dtreeviz con pip utilizzando il seguente comando:

pip install dtreeviz

Per un elenco dettagliato delle dipendenze e delle librerie aggiuntive che possono essere necessarie in base al sistema operativo utilizzato, fare riferimento a questo repository GitHub.

Visualizzazione degli alberi di regressione

In questa sezione, addestreremo un regressore di albero decisionale sul dataset del diabete. Si noti che è possibile trovare tutto il codice per questo tutorial in questo repository GitHub. Tenere presente che sto utilizzando Jupyter come ambiente per eseguire questo codice Python. È possibile trovare tutto il codice che ho scritto per questo tutorial in questo repository Github.

Importazione di librerie

Nel blocco di codice sottostante ho semplicemente importato alcune librerie comuni, inclusi i moduli DecisionTree di scikit-learn e dtreeviz.

import numpy as npimport pandas as pdfrom sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressorimport dtreeviz

Lettura dei dati

Il dataset del diabete è disponibile in scikit-learn, quindi possiamo utilizzare il codice sottostante per importare il dataset e memorizzare le caratteristiche e i valori target in array numpy chiamati X e y.

from sklearn.datasets import load_diabetesdiabetes_data = load_diabetes()X = pd.DataFrame(data = diabetes_data['data'], columns=diabetes_data['feature_names'])y = diabetes_data['target']

Addestramento del modello di albero di decisione

Per rendere l’albero facile da visualizzare, possiamo limitare la massima profondità dell’albero decisionale e addestrarlo sui dati come segue.

dtree_reg = DecisionTreeRegressor(max_depth=3)dtree_reg.fit(X, y)

Visualizzazione dell’albero

Una delle caratteristiche chiave di dtreeviz è la capacità di visualizzare i modelli di albero decisionale. Utilizzando il codice sottostante, possiamo creare una fantastica visualizzazione dell’albero decisionale che rappresenta anche visivamente i confini decisionali in ogni nodo.

viz_model = dtreeviz.model(dtree_reg,                           X_train=X, y_train=y,                           feature_names=list(X.columns),                           target_name='diabete')viz_model.view()
Visualizzazione albero di regressione del diabete. Immagine creata con dtreeviz dall'autore.

Si noti come la visualizzazione sopra ci fornisca anche i confini decisionali e lo spazio delle caratteristiche in ogni nodo, nonché le uscite di regressione e la dimensione del campione in ogni foglia.

Visualizzazione delle distribuzioni foglia

Un’altra funzione utile che dtreeviz fornisce è la possibilità di visualizzare le distribuzioni foglia. I nodi foglia di un albero decisionale contengono i valori effettivi che un albero decisionale predirà a seconda di ogni insieme di condizioni. Utilizzando la funzione rtree_leaf_distributions, possiamo creare questa visualizzazione per il nostro albero di regressione.

import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D%matplotlib inlineviz_model.rtree_leaf_distributions()

In base alla visualizzazione sopra, possiamo vedere che l’albero decisionale può prevedere 268,9, 208,6, 176,9, 137,7, 154,7, 274,0, 83,4 o 108,8 per la variabile target chiamata diabete. I punti sparsi orizzontalmente rappresentano la distribuzione dei valori per la variabile target diabete e la piccola linea nera rappresenta il valore medio che viene utilizzato per le previsioni in quel nodo foglia. Idealmente, le distribuzioni delle foglie dovrebbero avere bassa varianza in modo da poter avere maggiore fiducia nei valori medi utilizzati per le previsioni.

Visualizzando le Dimensioni delle Foglie

Possiamo anche visualizzare le dimensioni delle foglie, o il numero di campioni in ogni nodo foglia, come mostrato nella funzione seguente.

viz_model.leaf_sizes()

In base al grafico sopra, possiamo vedere il numero di campioni in ogni foglia. Questa visualizzazione è uno strumento utile per valutare quanto possiamo essere sicuri nelle previsioni dell’albero di regressione.

Visualizzazione degli Alberi di Classificazione

Possiamo anche visualizzare gli alberi di classificazione con dtreeviz e le visualizzazioni appaiono leggermente diverse rispetto a quelle create per gli alberi di regressione. Per questa sezione, addestreremo e visualizzeremo un modello decisionale utilizzando il dataset del Cancro al Seno del Wisconsin.

Lettura dei Dati

Il dataset del Cancro al Seno del Wisconsin è disponibile in scikit-learn, quindi possiamo caricarlo utilizzando il codice qui sotto.

from sklearn.datasets import load_breast_cancercancer_data = load_breast_cancer()X = pd.DataFrame(data = cancer_data['data'], columns=cancer_data['feature_names'])y = cancer_data['target']

Addestramento di un Modello di Albero di Decisione

Come al solito, addestrare un modello di albero decisionale con scikit-learn è semplice. Possiamo anche impostare un vincolo sulla profondità massima dell’albero per renderlo più facile da visualizzare.

dtree_clf = DecisionTreeClassifier(max_depth=4)dtree_clf.fit(X, y)

Visualizzazione dell’Albero di Decisione

Possiamo utilizzare la stessa funzione dell’albero di regressione dalla sezione precedente per visualizzare l’albero di classificazione. Tuttavia, la visualizzazione apparirà leggermente diversa.

viz_model = dtreeviz.model(dtree_clf,                           X_train=X, y_train=y,                           feature_names=list(X.columns),                           target_name='cancro')viz_model.view()
Albero di decisione per la classificazione del cancro.

Notare come la visualizzazione dell’albero di classificazione sopra sia diversa dalla visualizzazione dell’albero di regressione nella sezione precedente. Invece di vedere un grafico a dispersione in ogni nodo con la caratteristica selezionata e il target, vediamo istogrammi colorati che mostrano la distribuzione delle classi in ogni nodo.

Visualizzazione delle Distribuzioni delle Foglie

Possiamo anche visualizzare le distribuzioni delle classi per le foglie utilizzando la stessa funzione per visualizzare le distribuzioni delle foglie per l’albero di regressione.

viz_model.ctree_leaf_distributions()
Grafico della distribuzione delle foglie per l'albero di classificazione. Immagine creata dall'autore utilizzando dtreeviz.

Ogni foglia ha un grafico a barre impilate associato ad essa che presenta la distribuzione delle etichette di classe per i campioni in quella foglia. La maggior parte delle foglie ha campioni che appartengono in modo schiacciante a una classe, il che è un buon segno e ci aiuta ad avere fiducia nelle previsioni del modello.

Visualizzazione dello spazio delle caratteristiche

Possiamo anche visualizzare lo spazio delle caratteristiche del classificatore utilizzando la seguente funzione.

viz_model.ctree_feature_space()

Il grafico dello spazio delle caratteristiche sopra ci fornisce l’accuratezza di addestramento dell’albero di classificazione, nonché un diagramma a dispersione di due caratteristiche e un confine decisionale lineare che può essere utilizzato per separare le due classi.

Sommario

Per quanto riguarda la visualizzazione dei modelli basati su alberi, dtreeviz è una potente libreria che fornisce diverse utili funzioni di visualizzazione. Ho coperto solo alcune delle funzioni fornite in questa libreria e ci sono molte altre caratteristiche aggiuntive che puoi leggere nel repository di GitHub di dtreeviz. Come al solito, puoi trovare tutto il codice di questo articolo sul mio GitHub.

Iscriviti alla mia mailing list

Iscriviti alla mia mailing list per ricevere aggiornamenti sul mio contenuto di data science. Riceverai anche la mia guida gratuita Step-By-Step Guide to Solving Machine Learning Problems quando ti iscrivi! Puoi anche seguirmi su Twitter per gli aggiornamenti sul contenuto.

E mentre ci sei, considera di unirti alla comunità di Nisoo per leggere articoli di migliaia di altri scrittori.

Fonti

  1. Terence Parr, dtreeviz: Decision Tree Visualization , (2023), GitHub.