Apprendimento automatico - Albero di decisione
- Pagina precedente Addestramento/Prova
- Pagina successiva Iniziare con MySQL

Albero decisionale (Decision Tree)
In questa sezione, vi mostreremo come creare un "albero decisionale". Un albero decisionale è un diagramma che può aiutarti a prendere decisioni basate su esperienze precedenti.
In questo esempio, una persona cercherà di decidere se dovrebbe partecipare al programma di commedia.
Fortunatamente, i personaggi del nostro esempio si iscrivono ogni volta che si tiene un programma di commedia nel paese, e si iscrivono anche alcune informazioni sugli attori di commedia, e si registra anche se sono stati lì.
Età | Esperienza | Rank | Nationality | Go |
---|---|---|---|---|
36 | 10 | 9 | UK | NO |
42 | 12 | 4 | USA | NO |
23 | 4 | 6 | N | NO |
52 | 4 | 4 | USA | NO |
43 | 21 | 8 | USA | YES |
44 | 14 | 5 | UK | NO |
66 | 3 | 7 | N | YES |
35 | 14 | 9 | UK | YES |
52 | 13 | 7 | N | YES |
35 | 5 | 9 | N | YES |
24 | 3 | 5 | USA | NO |
18 | 3 | 7 | UK | YES |
45 | 9 | 9 | UK | YES |
Ora, basandosi su questo set di dati, Python può creare un albero decisionale, che può essere utilizzato per determinare se è utile partecipare a qualsiasi nuovo spettacolo.
Funzionamento
Prima di tutto, importare i moduli necessari e leggere il set di dati utilizzando pandas:
Esempio
Leggere e stampare il set di dati:
import pandas from sklearn import tree import pydotplus from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt import matplotlib.image as pltimg df = pandas.read_csv("shows.csv") print(df)
Per creare un albero decisionale, tutti i dati devono essere numerici.
Dobbiamo convertire le colonne non numeriche 'Nationality' e 'Go' in numeri.
Pandas ha un map()
Metodo, questo metodo accetta un dizionario che contiene informazioni su come convertire i valori.
{'UK': 0, 'USA': 1, 'N': 2}
Questo significa convertire il valore 'UK' in 0, il valore 'USA' in 1 e il valore 'N' in 2.
Esempio
Convertire i valori di stringa in numeri:
d = {'UK': 0, 'USA': 1, 'N': 2} df['Nationality'] = df['Nationality'].map(d) d = {'YES': 1, 'NO': 0} df['Go'] = df['Go'].map(d) print(df)
Poi, dobbiamo separare le colonne delle caratteristiche dalla colonna del obiettivo.
Le colonne delle caratteristiche sono le colonne da cui cerchiamo di fare previsioni, la colonna del obiettivo è la colonna che contiene i valori che cerchiamo di prevedere.
Esempio
X è la colonna delle caratteristiche, y è la colonna del obiettivo:
features = ['Age', 'Experience', 'Rank', 'Nationality'] X = df[features] y = df['Go'] print(X) print(y)
Ora, possiamo creare un albero decisionale reale, adattarlo ai nostri dettagli e salvare un file .png sul computer:
Esempio
Crea un decision tree, salvalo come immagine e visualizzalo:
dtree = DecisionTreeClassifier() dtree = dtree.fit(X, y) data = tree.export_graphviz(dtree, out_file=None, feature_names=features) graph = pydotplus.graph_from_dot_data(data) graph.write_png('mydecisiontree.png') img=pltimg.imread('mydecisiontree.png') imgplot = plt.imshow(img) plt.show()
Spiegazione dei risultati
Il decision tree utilizza le tue decisioni precedenti per calcolare la probabilità di voler vedere un attore comico.
Lettura delle diverse parti del decision tree:

Rank
Rank <= 6.5
Rappresenta che gli attori comici con ranking inferiore a 6.5 seguiranno True
Freccia (a sinistra), il resto segue False
Freccia (a destra).
gini = 0.497
Rappresenta la qualità della divisione e sempre un numero tra 0.0 e 0.5, dove 0.0 rappresenta che tutti i campioni hanno ottenuto lo stesso risultato, mentre 0.5 rappresenta una divisione completa nel mezzo.
samples = 13
Rappresenta che a questo punto della decisione ci sono ancora 13 attori comici, perché è il primo passo, quindi tutti sono attori comici.
value = [6, 7]
Rappresenta che tra questi 13 attori comici, 6 riceveranno 'NO' e 7 riceveranno 'GO'.
Gini
Ci sono molti modi per dividere i campioni, e in questo tutorial utilizziamo il metodo GINI.
Il metodo Gini utilizza la seguente formula:
Gini = 1 - (x/n)2 - (y/n)2
Dove, x è il numero di risposte affermative ('GO'), n è il numero di campioni, e y è il numero di risposte negative ('NO'), calcolato con la seguente formula:
1 - (7 / 13)2 - (6 / 13)2 = 0.497

Il passo successivo include due caselle, una per gli attori comici con 'Rank' di 6.5 o inferiore, e l'altra per il resto.
True - 5 attori comici finiscono qui:
gini = 0.0
Rappresenta che tutti i campioni hanno ottenuto lo stesso risultato.
samples = 5
Rappresenta che in questa branca rimangono ancora 5 attori comici (5 attori di livello 6.5 o inferiore).
value = [5, 0]
Cio significa che 5 riceveranno "NO" e 0 riceveranno "GO".
False - 8 attori teatrali continuano:
Nationality (nazionalità)
Nationality <= 0.5
Cio significa che gli attori comici con valore di nazionalità inferiore a 0.5 seguiranno la freccia di sinistra (ciò significa tutti coloro che provengono dal Regno Unito), mentre gli altri seguiranno quella di destra.
gini = 0.219
Questo significa che circa il 22% dei campioni si muoveranno in una direzione.
samples = 8
Cio significa che in questa ramificazione rimangono 8 attori comici (8 attori comici con valutazione superiore a 6.5).
value = [1, 7]
Cio significa che di questi 8 attori comici, 1 riceverà "NO" e 7 riceveranno "GO".

True - 4 attori teatrali continuano:
Age (età)
Age <= 35.5
Cio significa che gli attori comici di 35.5 anni o più giovani seguiranno la freccia di sinistra, mentre gli altri seguiranno quella di destra.
gini = 0.375
Questo significa che circa il 37.5% dei campioni si muoveranno in una direzione.
samples = 4
Cio significa che in questa ramificazione rimangono 4 attori comici (4 attori comici britannici).
value = [1, 3]
Cio significa che di questi 4 attori comici, 1 riceverà "NO" e 3 riceveranno "GO".
False - 4 attori comici qui si concludono:
gini = 0.0
Rappresenta che tutti i campioni ottengono lo stesso risultato.
samples = 4
Cio significa che in questa ramificazione rimangono 4 attori comici (4 attori comici britannici).
value = [0, 4]
Cio significa che di questi 4 attori comici, 0 riceverà "NO" e 4 riceveranno "GO".

True - 2 attori comici qui si concludono:
gini = 0.0
Rappresenta che tutti i campioni ottengono lo stesso risultato.
samples = 2
Cio significa che in questa ramificazione rimangono 2 attori comici (2 attori comici di 35.5 anni o più giovani).
value = [0, 2]
Cio significa che di questi due attori comici, 0 riceverà "NO" e 2 riceveranno "GO".
False - 2 attori teatrali continuano:
Experience (esperienza)
Experience <= 9.5
Cio significa che gli attori comici con più di 9.5 anni di esperienza seguiranno la freccia di sinistra, mentre gli altri seguiranno quella di destra.
gini = 0.5
Cio significa che il 50% dei campioni si muoveranno in una direzione.
samples = 2
Cio significa che in questa ramificazione rimangono 2 attori comici (2 attori comici con età superiore a 35.5 anni).
value = [1, 1]
Cio significa che uno dei due attori comici riceverà "NO" e l'altro "GO".

True - 1 attore comico qui si conclude:
gini = 0.0
Rappresenta che tutti i campioni ottengono lo stesso risultato.
samples = 1
Rappresenta che in questa branca rimane un attore comico (uno ha 9,5 anni o meno di esperienza comica).
value = [0, 1]
Rappresenta che 0 rappresenta "NO", 1 rappresenta "GO".
False - 1 attore comico fino a questo punto:
gini = 0.0
Rappresenta che tutti i campioni ottengono lo stesso risultato.
samples = 1
Rappresenta che in questa branca rimane un attore comico (uno ha più di 9,5 anni di esperienza comica).
value = [1, 0]
1 rappresenta "NO", 0 rappresenta "GO".
Valore predetto
Possiamo usare l'albero di decisione per prevedere nuovi valori.
Ad esempio: dovrei guardare un programma interpretato da un attore comico americano di 40 anni con 10 anni di esperienza e un punteggio comico di 7?
Esempio
Usare predict()
Metodi per prevedere nuovi valori:
print(dtree.predict([[40, 10, 7, 1]]))
Esempio
Qual è la risposta se il livello comico è 6?
print(dtree.predict([[40, 10, 6, 1]]))
Risultati diversi
Se eseguito abbastanza volte, anche se inserisci dati identici, l'albero di decisione ti fornirà risultati diversi.
Questo è perché l'albero di decisione non può fornirci una risposta certa del 100%. Si basa sulla probabilità dei risultati e le risposte possono variare.
- Pagina precedente Addestramento/Prova
- Pagina successiva Iniziare con MySQL