top of page

Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

Gli alberi decisionali sono un algoritmo ampiamente utilizzato per attività di classificazione, in cui l'obiettivo è prevedere una variabile target in base a un insieme di funzionalità di input. Gli alberi decisionali utilizzano una struttura ad albero per fare previsioni, in cui ogni nodo dell'albero rappresenta una decisione o una divisione basata sul valore di una caratteristica di input e ogni foglia dell'albero rappresenta una classe o un valore previsto.


Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

In questo articolo, spiegheremo in dettaglio l'algoritmo dell'albero decisionale e mostreremo come implementare e addestrare un albero decisionale con Python. Tratteremo due diversi approcci alla costruzione e all'addestramento di alberi decisionali con Python: l'utilizzo della libreria scikit-learn e l'implementazione dell'algoritmo da zero. Discuteremo anche dei vantaggi e dei limiti degli alberi decisionali e forniremo alcuni esempi di come utilizzare gli alberi decisionali nelle applicazioni del mondo reale.


Indice Articolo sull'Algoritmo di machine learning decision tree

  • Definizione e principi dell'algoritmo dell'albero decisionale

  • In che modo gli alberi decisionali effettuano previsioni e suddividono i dati

  • Creare e allenare un albero decisionale con Python e scikit-learn

  • Creare e allenare un albero decisionale con Python senza libreire

  • Misure di accuratezza e performance per alberi decisionali

  • Vantaggi e limiti degli alberi decisionali

  • Esempi di applicazioni dell'albero decisionale in scenari reali

  • Conclusione e direzioni future per la ricerca e lo sviluppo dell'albero decisionale.


Cos'è un Decision tree o Albero Decisionale?

Un albero decisionale è un tipo di algoritmo di apprendimento automatico utilizzato per attività di classificazione e regressione, in cui l'obiettivo è prevedere una variabile di destinazione in base a un set di funzionalità di input. Gli alberi decisionali sono chiamati "alberi" o "tree" perché hanno una struttura ad albero, in cui ogni nodo rappresenta una decisione o una divisione basata sul valore di una caratteristica di input e ogni foglia rappresenta una classe o un valore previsto.


Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

L'algoritmo dell'albero decisionale è un algoritmo di apprendimento supervisionato, il che significa che richiede un set di dati di addestramento etichettato, in cui la variabile target è nota per ogni punto dati. L'obiettivo dell'algoritmo dell'albero decisionale è apprendere un modello dai dati di addestramento che può essere utilizzato per fare previsioni per punti dati nuovi e invisibili.


La matematica dietro al Decision tree

Gli alberi decisionali si basano sul principio del partizionamento ricorsivo, in cui i dati vengono ripetutamente suddivisi in sottoinsiemi sempre più piccoli in base ai valori delle funzionalità di input. Questo processo continua fino a quando i dati non vengono partizionati in sottoinsiemi omogenei, in cui tutti i punti dati all'interno di ogni sottoinsieme hanno la stessa classe o valore previsto.


Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

Il processo di suddivisione dei dati in sottoinsiemi omogenei si basa su una misura di omogeneità o impurità, come l'entropia o l'impurità di Gini. L'algoritmo dell'albero decisionale cerca di trovare la migliore suddivisione in ciascun nodo che massimizza l'omogeneità dei sottoinsiemi risultanti. Questo viene fatto iterando su tutte le possibili suddivisioni per ciascuna caratteristica di input e selezionando la suddivisione che risulta nella minore impurità.


Una volta trovata la suddivisione migliore, i dati vengono partizionati in due sottoinsiemi e il processo viene ripetuto per ogni sottoinsieme fino a quando i dati non sono completamente partizionati in sottoinsiemi omogenei. La struttura ad albero risultante può essere utilizzata per fare previsioni per nuovi punti dati attraversando l'albero dalla radice a una foglia e selezionando la classe o il valore previsto alla foglia.


Gli alberi decisionali hanno diversi vantaggi, come la loro semplicità, interpretabilità e capacità di gestire dati sia numerici che categorici. Tuttavia, gli alberi decisionali hanno anche alcune limitazioni, come la loro sensibilità al rumore e ai valori anomali e la loro tendenza a sovradimensionare i dati. Nonostante queste limitazioni, gli alberi decisionali sono ancora un algoritmo ampiamente utilizzato ed efficace per molte applicazioni pratiche.


Come gli alberi decisionali effettuano previsioni?

Gli alberi decisionali effettuano previsioni attraversando la struttura ad albero dalla radice a una foglia e selezionando la classe o il valore previsto nella foglia. Il processo di attraversare l'albero e fare una previsione è chiamato "inferenza".


Per fare una previsione per un nuovo punto dati, l'algoritmo dell'albero decisionale controlla prima il valore della caratteristica di input nel nodo radice. Se il valore della funzione è minore o uguale alla soglia di suddivisione, l'algoritmo segue il ramo sinistro e si sposta sul nodo figlio sinistro. Se il valore della funzione è maggiore della soglia di suddivisione, l'algoritmo segue il ramo destro e si sposta sul nodo figlio destro. (in linea teorica poi è possibile trovare tantissime varianti)


Questo processo viene ripetuto in ogni nodo, fino a quando l'algoritmo raggiunge un nodo foglia, dove è memorizzata la classe o il valore previsto. Ad esempio, se l'albero decisionale viene utilizzato per la classificazione, il nodo foglia può contenere una distribuzione di probabilità sulle classi o un'etichetta di classe maggioritaria. Se l'albero decisionale viene utilizzato per la regressione, il nodo foglia può contenere il valore medio o mediano della variabile di destinazione per i punti dati nella foglia.


Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

Il processo di creazione di una previsione con un albero decisionale è simile al processo di costruzione dell'albero, tranne per il fatto che l'albero è già stato creato e le divisioni e le soglie sono fisse. L'algoritmo dell'albero decisionale utilizza la stessa strategia di partizionamento ricorsivo per fare previsioni, seguendo le divisioni e le decisioni prese durante la fase di addestramento.


In sintesi, gli alberi decisionali effettuano previsioni suddividendo in modo iterativo i dati in base ai valori delle caratteristiche di input e selezionando la classe o il valore previsto nei nodi foglia dell'albero. Ciò consente agli alberi delle decisioni di catturare la struttura e i modelli sottostanti dei dati e di fare previsioni accurate e interpretabili.



Creare e allenare un albero decisionale con Python e scikit-learn

Per costruire e addestrare un albero decisionale con Python, possiamo usare la libreria scikit-learn, che è una libreria di apprendimento automatico ampiamente utilizzata per Python. Scikit-learn fornisce una classe DecisionTreeClassifier per le attività di classificazione e una classe DecisionTreeRegressor per le attività di regressione.


Nell'esempio seguente, utilizzeremo la classe DecisionTreeClassifier per creare e addestrare un albero decisionale per una semplice attività di classificazione. Useremo il set di dati Iris, che è un noto set di dati che contiene le misurazioni di 150 fiori di iris, insieme alle specie di ciascun fiore. L'obiettivo è prevedere la specie di un fiore in base alle sue misurazioni.

Innanzitutto, dobbiamo importare i moduli e le classi necessari da scikit-learn:


from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier

Successivamente, dobbiamo caricare il set di dati Iris e suddividerlo in set di addestramento e test:



iris = datasets.load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

Ora possiamo creare un'istanza della classe DecisionTreeClassifier e addestrarla sui dati di addestramento:


clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)


Una volta addestrato il modello, possiamo valutare le sue prestazioni sul set di test chiamando il metodo score, che restituisce l'accuratezza del modello sul set di test:



accuracy = clf.score(X_test, y_test)
print("Accuracy:", accuracy)

Ecco fatto hai appena creato il tuo primo Albero decisionale


Per fare previsioni con un modello di albero decisionale addestrato, possiamo usare il metodo predict della classe DecisionTreeClassifier. Questo metodo accetta come input i dati del test e restituisce le classi previste per ogni punto dati.


Ecco un esempio di come utilizzare il metodo predict per effettuare previsioni con un modello di albero decisionale:


# Previsioni suli dati di test
predictions = clf.predict(X_test)

# Stampiamo le previsioni
print("Predictions:", predictions)

In alternativa, possiamo usare il metodo predict_proba per ottenere le probabilità previste per ogni classe per ogni punto dati nel set di test. Questo metodo restituisce una matrice di forma (n_samples, n_classes), dove n_samples è il numero di punti dati nel set di test e n_classes è il numero di classi nel set di dati.


Ecco un esempio di come utilizzare il metodo predict_proba per ottenere le probabilità previste per ogni classe:



#Previsione probabilità suli dati di test
probabilities = clf.predict_proba(X_test)

# Stampiamo le previsioni
print("Probabilities:", probabilities)

In sintesi, per fare previsioni con un modello di albero decisionale addestrato, possiamo utilizzare il metodo predict o predict_proba, a seconda che desideriamo le classi o le probabilità previste per ogni punto dati nel set di test. Questi metodi ci consentono di applicare il modello dell'albero decisionale a dati nuovi e sconosciuti e di fare previsioni accurate e interpretabili.






Creare e allenare un albero decisionale con Python senza librerie

Per creare e addestrare un albero decisionale con Python senza utilizzare alcuna libreria, possiamo implementare l'algoritmo dell'albero decisionale da zero utilizzando solo i moduli Python integrati. Questo approccio può essere utile per comprendere il funzionamento interno dell'algoritmo o per implementare varianti personalizzate dell'algoritmo che non sono supportate dalle librerie esistenti.


Ecco una semplice implementazione dell'algoritmo dell'albero decisionale in Python, utilizzando un semplice set di dati e i moduli NumPy e pandas:


Innanzitutto, dobbiamo importare i moduli e le classi necessari:


import numpy as np
import pandas as pd

Successivamente, dobbiamo caricare il set di dati e suddividerlo in set di addestramento e test. Per semplicità, possiamo utilizzare un piccolo set di dati che contiene solo quattro punti dati e due funzionalità:

X = np.array([
    [0, 1],
    [1, 0],
    [1, 1],
    [0, 0]
])
y = np.array([0, 1, 1, 0])

X_train = X
y_train = y
X_test = X
y_test = y

Ora possiamo definire una funzione chiamata fit_decision_tree che addestra un modello di albero decisionale sui dati di addestramento. Questa funzione accetta come input i dati di addestramento e la variabile di destinazione e restituisce un modello di albero decisionale addestrato:


def fit_decision_tree(X, y):
    pass

Per addestrare il modello dell'albero decisionale, dobbiamo implementare la funzione fit_decision_tree. Questa funzione prende come input i dati di addestramento e la variabile di destinazione e addestra il modello dell'albero delle decisioni trovando la suddivisione migliore in ogni nodo.


Ecco una possibile implementazione della funzione fit_decision_tree, usando l'entropia come misura dell'impurità:



def fit_decision_tree(X, y):
    # Calcola l'entropia della variabile target
    classes, counts = np.unique(y, return_counts=True)
    total_count = counts.sum()
    entropy = 0
    for c in classes:
        p = counts[c] / total_count
        entropy += -p * np.log2(p)

    # Itera su ogni feature e trova la migliore divisione
    best_split = None
    best_gain = 0
    for i in range(X.shape[1]):
        values = X[:, i]
        unique_values = np.unique(values)
        for value in unique_values:
            mask = values == value
            left_X = X[mask]
            left_y = y[mask]
            right_X = X[~mask]
            right_y = y[~mask]

            left_classes, left_counts = np.unique(left_y, return_counts=True)
            left_total_count = left_counts.sum()
            left_entropy = 0
            for c in left_classes:
                p = left_counts[c] / left_total_count
                left_entropy += -p * np.log2(p)
            right_classes, right_counts = np.unique(right_y, return_counts=True)
            right_total_count = right_counts.sum()
            right_entropy = 0
            for c in right_classes:
                p = right_counts[c] / right_total_count
                right_entropy += -p * np.log2(p)
            gain = entropy - (left_entropy * (len(left_X) / len(X)) + right_entropy * (len(right_X) / len(X)))
            if gain > best_gain:
                best_gain = gain
                best_split = {
                    'feature': i,
                    'value': value,
                    'left_X': left_X,
                    'left_y': left_y,
                    'right_X': right_X,
                    'right_y': right_y
                }

    return best_split

Per testare questa funzione, possiamo usare il seguente codice:

X = np.array([
    [0, 1],
    [1, 0],
    [1, 1],
    [0, 0]
])
y = np.array([0, 1, 1, 0])

best_split = fit_decision_tree(X, y)
print(best_split)

Questo dovrebbe produrre la migliore suddivisione trovata dalla funzione fit_decision_tree, che dovrebbe assomigliare a questa:


{
    'feature': 0,
    'value': 1,
    'left_X': array([[1, 0], [1, 1]]),
    'left_y': array([1, 1]),
    'right_X': array([[0, 1], [0, 0]]),
    'right_y': array([0, 0])
}

Ciò indica che la migliore suddivisione trovata dalla funzione consiste nel suddividere i dati sulla prima caratteristica (con indice 0) .



Misure di accuratezza e performance per alberi decisionali

Quando si valutano le prestazioni di un modello di albero decisionale, è possibile utilizzare diverse misurazioni dell'accuratezza e delle prestazioni. Queste misurazioni possono aiutarci a capire quanto bene il modello è in grado di fare previsioni su dati sconosciuti e possono guidarci nella scelta del modello migliore per un dato problema.


Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python

Una misura comune dell'accuratezza per gli alberi decisionali è l'accuratezza della classificazione. Questa è la percentuale di previsioni corrette effettuate dal modello sul set di test e viene calcolata dividendo il numero di previsioni corrette per il numero totale di previsioni. Ad esempio, se il modello esegue 100 previsioni sul set di test e 75 di esse sono corrette, l'accuratezza della classificazione è del 75%.


Un'altra importante misura dell'accuratezza per gli alberi decisionali è la matrice di confusione. Questa è una tabella che mostra il numero di previsioni vere positive, vere negative, false positive e false negative fatte dal modello sul set di test.


Ad esempio, se il modello prevede la probabilità che una persona abbia una determinata malattia sulla base di una serie di sintomi, la matrice di confusione mostrerà il numero di veri positivi (persone con la malattia identificate correttamente dal modello), veri negativi (persone senza la malattia che sono state correttamente identificate dal modello), false positive (persone senza la malattia che sono state erroneamente identificate come affette dalla malattia) e false negative (persone con la malattia che sono state erroneamente identificate come non affette dalla malattia) previsioni realizzato dal modello.


Un'altra misura importante delle prestazioni per gli alberi decisionali è il tempo di addestramento e il tempo di previsione. Il tempo di addestramento è il tempo impiegato dal modello per apprendere dai dati di addestramento e costruire l'albero decisionale. Il tempo di previsione è il tempo serve al modello per fare previsioni su nuovi dati Queste misurazioni sono importanti perché possono indicare quanto sia efficiente e scalabile il modello dell'albero decisionale. Ad esempio, se il tempo di addestramento e il tempo di previsione sono entrambi molto bassi, il modello può essere addestrato su set di dati di grandi dimensioni e utilizzato per previsioni in tempo reale senza influire sulle prestazioni del sistema.


Oltre a queste misurazioni dell'accuratezza e delle prestazioni, esistono anche diverse metriche che possono essere utilizzate per valutare la qualità di un modello di albero decisionale. Alcune delle metriche più comuni per gli alberi decisionali includono l'indice di Gini, il guadagno di informazioni e il punteggio F1. L'indice di Gini è una misura di impurità che indica la probabilità che un elemento scelto a caso dall'insieme venga classificato in modo errato. Il guadagno di informazioni è una misura della diminuzione dell'entropia dopo che i dati sono stati suddivisi su una determinata caratteristica. Il punteggio F1 è la media armonica di precisione e richiamo e viene utilizzato per bilanciare il compromesso tra falsi positivi e falsi negativi.


Per scegliere il miglior modello di albero decisionale per un dato problema, possiamo confrontare l'accuratezza e le misurazioni delle prestazioni di diversi modelli utilizzando queste metriche. Ad esempio, se stiamo cercando di prevedere la probabilità che una persona abbia una determinata malattia sulla base di una serie di sintomi, potremmo addestrare più modelli di alberi decisionali utilizzando metriche diverse e confrontare la loro accuratezza di classificazione, matrice di confusione, tempo di addestramento e tempo di previsione . Sulla base di queste misurazioni, possiamo scegliere il modello che offre le prestazioni migliori sul set di test e ha il tempo di addestramento e previsione più basso.


Vantaggi e limiti degli alberi decisionali

Uno dei principali vantaggi degli alberi decisionali è la loro interpretabilità. A differenza di molti altri algoritmi di apprendimento automatico, gli alberi decisionali sono facili da capire e spiegare. La struttura ad albero del modello fornisce una rappresentazione chiara e intuitiva delle relazioni tra le caratteristiche e la variabile target, e le regole decisionali in ogni nodo possono essere facilmente comprese dagli esseri umani. Ciò rende gli alberi decisionali una buona scelta per le applicazioni in cui il modello deve essere spiegato alle parti interessate o utilizzato da utenti non tecnici.


Un altro vantaggio degli alberi decisionali è la loro capacità di gestire dati sia numerici che categorici. A differenza di altri algoritmi che richiedono che i dati siano pre-elaborati o trasformati, gli alberi decisionali possono gestire i dati nella loro forma grezza. Ciò li rende una buona scelta per le applicazioni in cui i dati sono rumorosi o presentano valori mancanti.


Inoltre, gli alberi decisionali sono abbastanza facili da addestrare e fare previsioni. Il tempo di addestramento per gli alberi decisionali è in genere molto basso e anche il tempo di previsione è rapido perché il modello può essere applicato a nuovi dati utilizzando un algoritmo semplice ed efficiente. Ciò rende gli alberi decisionali una buona scelta per le applicazioni in cui il modello deve essere addestrato e utilizzato in tempo reale.


Tuttavia, gli alberi decisionali hanno anche alcune limitazioni che dovrebbero essere considerate quando li si utilizza. Una limitazione è che sono inclini all'overfitting, in particolare quando i dati sono rumorosi o hanno un gran numero di funzioni. L'overfitting può verificarsi quando il modello apprende il rumore nei dati di addestramento e non è in grado di generalizzare a dati invisibili, il che può portare a prestazioni scadenti sul set di test.



Decision tree e Alberi Decisionali , cosa sono e come implementarli con python
Decision tree e Alberi Decisionali , cosa sono e come implementarli con python


Esempi di applicazioni del Decision tree :

Alcuni esempi di applicazioni degli alberi decisionali includono:

  1. Rilevamento delle frodi: gli alberi decisionali possono essere utilizzati per identificare le transazioni fraudolente imparando i modelli e le caratteristiche delle transazioni fraudolente e non fraudolente. Il modello dell'albero decisionale può essere addestrato su un set di dati di transazioni etichettate e utilizzato per fare previsioni su nuove transazioni.

  2. Diagnosi medica: gli alberi decisionali possono essere utilizzati per diagnosticare condizioni mediche in base a sintomi, risultati di test medici e altri fattori. Il modello dell'albero decisionale può essere addestrato su un set di dati di cartelle cliniche etichettate e utilizzato per fare previsioni su nuovi pazienti.

  3. Segmentazione dei clienti: gli alberi decisionali possono essere utilizzati per segmentare i clienti in diversi gruppi in base alle loro caratteristiche, preferenze e comportamento. Il modello dell'albero decisionale può essere addestrato su un set di dati di dati dei clienti e utilizzato per fare previsioni sui nuovi clienti.

  4. Punteggio di credito: gli alberi decisionali possono essere utilizzati per prevedere la probabilità che un cliente sia inadempiente rispetto a un prestito in base alla storia creditizia, al reddito e ad altri fattori. Il modello dell'albero decisionale può essere addestrato su un set di dati di domande di prestito etichettate e utilizzato per fare previsioni sui nuovi richiedenti.

  5. Previsione dell'abbandono: gli alberi decisionali possono essere utilizzati per prevedere la probabilità che un cliente abbandoni (ovvero, annulli il proprio servizio o passi a un concorrente) in base al suo comportamento, ai modelli di utilizzo e ad altri fattori. Il modello dell'albero delle decisioni può essere addestrato su un set di dati di dati dei clienti etichettati e utilizzato per fare previsioni sui nuovi clienti.

Nel complesso, gli alberi decisionali sono un algoritmo di apprendimento automatico potente e ampiamente utilizzato che può essere applicato a molti scenari del mondo reale in cui è richiesta la classificazione o la regressione.


Conclusione e direzioni future per la ricerca e lo sviluppo dell'albero decisionale

Nonostante i loro numerosi punti di forza, gli alberi decisionali presentano anche alcuni limiti, come la tendenza a sovradimensionarsi su dati rumorosi o complessi. Per affrontare queste limitazioni e migliorare le prestazioni degli alberi decisionali, ci sono diverse direzioni per la ricerca e lo sviluppo futuri.


Un'area di ricerca è lo sviluppo di algoritmi e tecniche per prevenire l'overfitting negli alberi decisionali. Ciò può includere metodi per regolarizzare la struttura ad albero, potare l'albero per rimuovere nodi ridondanti o irrilevanti e combinare più alberi decisionali in un insieme per migliorare la generalizzabilità del modello.


Un'altra area di ricerca è lo sviluppo di nuove metriche e tecniche per valutare le prestazioni degli alberi decisionali. Ciò può includere l'uso di metriche più sofisticate per misurare l'accuratezza, come il punteggio F1, e l'uso di tecniche per confrontare le prestazioni di diversi alberi decisionali, come la convalida incrociata e il bootstrap.


Infine, ci sono anche opportunità per migliorare l'interpretabilità degli alberi decisionali. Ciò può includere lo sviluppo di nuove tecniche di visualizzazione per visualizzare la struttura ad albero e le regole decisionali, nonché l'uso di algoritmi di generazione del linguaggio naturale per generare spiegazioni del modello in forma leggibile dall'uomo.


Nel complesso, gli alberi decisionali sono un algoritmo di apprendimento automatico prezioso e ampiamente utilizzato che ha molte applicazioni in scenari reali. Con la continua ricerca e sviluppo, gli alberi decisionali hanno il potenziale per diventare ancora più potenti e ampiamente utilizzati in futuro.



Comments

Rated 0 out of 5 stars.
No ratings yet

Add a rating
PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page