Esercitazione Python

Python HOME Introduzione di Python Python per iniziare Sintassi Python Commenti Python Variabili Python Tipi di dati Python Numeri Python Fusione in pitone Stringhe Python Python booleani Operatori Python Elenchi Python Tuple di Python Insiemi Python Dizionari Python Python Se... Altro Python While Loops Python per loop Funzioni Python Python Lambda Matrici Python Classi/oggetti Python Ereditarietà Python Iteratori Python Ambito Python Moduli Python Date Python Python matematica Python JSON Python RegEx PIP Python Python Prova... Tranne Input utente Python Formattazione di stringhe Python

Gestione dei file

Gestione dei file Python File di lettura Python Python Scrivi/Crea file Python Elimina file

Moduli Python

Tutorial NumPy Procedura dettagliata di Panda Tutorial Scipy

Python Matplotlib

Introduzione a Matplotlib Matplotlib Inizia Plottaggio Matplotlib Tracciatura Matplotlib Marcatori Matplotlib Linea Matplotlib Etichette Matplotlib Griglia Matplotlib Sottotrame Matplotlib Dispersione Matplotlib Barre Matplotlib Istogrammi Matplotlib Grafici a torta Matplotlib

Apprendimento automatico

Iniziare Modalità mediana media Deviazione standard percentile Distribuzione dei dati Distribuzione normale dei dati Trama a dispersione Regressione lineare Regressione polinomiale Regressione multipla Scala Treno/prova Albero decisionale

Python MySQL

MySQL per iniziare MySQL crea database MySQL Crea tabella Inserimento MySQL MySQL Seleziona MySQL dove MySQL Ordina per Elimina MySQL MySQL Drop Table Aggiornamento MySQL Limite MySQL Unisciti a MySQL

Python MongoDB

MongoDB Inizia MongoDB Crea database MongoDB Crea raccolta Inserisci MongoDB MongoDB Trova Interrogazione MongoDB Ordinamento MongoDB Elimina MongoDB Collezione Drop MongoDB Aggiornamento MongoDB Limite MongoDB

Riferimento Python

Panoramica di Python Funzioni integrate in Python Metodi di stringa Python Metodi dell'elenco Python Metodi del dizionario Python Metodi della tupla Python Metodi di impostazione Python Metodi di file Python Parole chiave Python Eccezioni Python Glossario Python

Riferimento del modulo

Modulo casuale Modulo Richieste Modulo Statistiche Modulo di matematica Modulo cMath

Python come fare per

Rimuovi i duplicati dell'elenco Invertire una stringa Aggiungi due numeri

Esempi Python

Esempi Python Compilatore Python Esercizi di Python Python Quiz Certificato Python

Apprendimento automatico - Albero decisionale



Albero decisionale

In questo capitolo ti mostreremo come creare un "albero decisionale". Un albero decisionale è un diagramma di flusso e può aiutarti a prendere decisioni basate sull'esperienza precedente.

Nell'esempio, una persona proverà a decidere se andare a uno spettacolo comico o meno.

Fortunatamente la nostra persona di esempio si è registrata ogni volta che c'era uno spettacolo comico in città, ha registrato alcune informazioni sul comico e si è registrata anche se ci andava o meno.

Età Esperienza Rango Nazionalità andare
36 10 9 UK NO
42 12 4 Stati Uniti d'America NO
23 4 6 n NO
52 4 4 Stati Uniti d'America NO
43 21 8 Stati Uniti d'America
44 14 5 UK NO
66 3 7 n
35 14 9 UK
52 13 7 n
35 5 9 n
24 3 5 Stati Uniti d'America NO
18 3 7 UK
45 9 9 UK

Ora, sulla base di questo set di dati, Python può creare un albero decisionale che può essere utilizzato per decidere se vale la pena assistere a nuovi spettacoli.



Come funziona?

Innanzitutto, importa i moduli di cui hai bisogno e leggi il set di dati con i panda:

Esempio

Leggi e stampa 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 fare un albero decisionale, tutti i dati devono essere numerici.

Dobbiamo convertire le colonne non numeriche 'Nazionalità' e 'Vai' in valori numerici.

Pandas ha un map()metodo che prende un dizionario con informazioni su come convertire i valori.

{'UK': 0, 'USA': 1, 'N': 2}

Significa convertire i valori 'UK' in 0, 'USA' in 1 e 'N' in 2.

Esempio

Cambia i valori delle stringhe in valori numerici:

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)

Quindi dobbiamo separare le colonne delle funzionalità dalla colonna di destinazione .

Le colonne delle caratteristiche sono le colonne da cui proviamo a prevedere e la colonna di destinazione è la colonna con i valori che proviamo a prevedere.

Esempio

Xè le colonne delle caratteristiche, yè la colonna di destinazione:

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

Ora possiamo creare l'albero decisionale vero e proprio, adattarlo ai nostri dettagli e salvare un file .png sul computer:

Esempio

Crea un albero decisionale, salvalo come immagine e mostra l'immagine:

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()


Risultato spiegato

L'albero decisionale utilizza le tue decisioni precedenti per calcolare le probabilità che tu voglia vedere un comico o meno.

Leggiamo i diversi aspetti dell'albero decisionale:

Rango

Rank <= 6.5significa che ogni comico con un grado di 6,5 o inferiore seguirà la Truefreccia (a sinistra) e il resto seguirà la Falsefreccia (a destra).

gini = 0.497si riferisce alla qualità della divisione ed è sempre un numero compreso tra 0,0 e 0,5, dove 0,0 significherebbe che tutti i campioni hanno ottenuto lo stesso risultato e 0,5 significherebbe che la divisione viene eseguita esattamente nel mezzo.

samples = 13significa che ci sono 13 comici rimasti a questo punto nella decisione, che sono tutti perché questo è il primo passo.

value = [6, 7]significa che di questi 13 comici, 6 riceveranno un "NO" e 7 riceveranno un "GO".

Gini

Esistono molti modi per dividere i campioni, in questo tutorial utilizziamo il metodo GINI.

Il metodo Gini utilizza questa formula:

Gini = 1 - (x/n)2 - (y/n)2

Dove xè il numero di risposte positive ("GO"), nè il numero di campioni ed yè il numero di risposte negative ("NO"), che ci dà questo calcolo:

1 - (7 / 13)2 - (6 / 13)2 = 0.497

Il passaggio successivo contiene due caselle, una casella per i comici con un "Rank" di 6,5 o inferiore e una casella con il resto.

Vero - 5 comici finiscono qui:

gini = 0.0 significa che tutti i campioni hanno ottenuto lo stesso risultato.

samples = 5 significa che ci sono 5 comici rimasti in questo ramo (5 comici con un grado di 6,5 o inferiore).

value = [5, 0] significa che 5 riceverà un "NO" e 0 riceverà un "GO".

Falso - Continuano gli 8 comici:

Nazionalità

Nationality <= 0.5 significa che i comici con un valore di nazionalità inferiore a 0,5 seguiranno la freccia a sinistra (il che significa tutti dal Regno Unito, ), e il resto seguirà la freccia a destra.

gini = 0.219 significa che circa il 22% dei campioni andrebbe in una direzione.

samples = 8 significa che ci sono 8 comici rimasti in questo ramo (8 comici con un grado superiore a 6,5).

value = [1, 7] significa che di questi 8 comici, 1 riceverà un "NO" e 7 riceverà un "GO".




Vero - 4 Comici Continuano:

Età

Age <= 35.5 significa che i comici di età pari o inferiore a 35,5 anni seguiranno la freccia a sinistra e il resto seguirà la freccia a destra.

gini = 0.375 significa che circa il 37,5% dei campioni andrebbe in una direzione.

samples = 4 significa che ci sono 4 comici rimasti in questo ramo (4 comici dal Regno Unito).

value = [1, 3] significa che di questi 4 comici, 1 riceverà un "NO" e 3 riceverà un "GO".

Falso - 4 comici finiscono qui:

gini = 0.0 significa che tutti i campioni hanno ottenuto lo stesso risultato.

samples = 4 significa che ci sono 4 comici rimasti in questo ramo (4 comici non dal Regno Unito).

value = [0, 4] significa che di questi 4 comici, 0 riceverà un "NO" e 4 riceverà un "GO".




Vero - 2 comici finiscono qui:

gini = 0.0 significa che tutti i campioni hanno ottenuto lo stesso risultato.

samples = 2 significa che sono rimasti 2 comici in questo ramo (2 comici di età pari o inferiore a 35,5 anni).

value = [0, 2]significa che di questi 2 comici, 0 riceverà un "NO" e 2 riceverà un "GO".

Falso - 2 comici continuano:

Esperienza

Experience <= 9.5significa che i comici con 9,5 anni di esperienza, o meno, seguiranno la freccia a sinistra e il resto seguirà la freccia a destra.

gini = 0.5significa che il 50% dei campioni andrebbe in una direzione.

samples = 2significa che sono rimasti 2 comici in questo ramo (2 comici di età superiore a 35,5).

value = [1, 1]significa che di questi 2 comici, 1 riceverà un "NO" e 1 riceverà un "GO".




Vero - 1 Comico finisce qui:

gini = 0.0 significa che tutti i campioni hanno ottenuto lo stesso risultato.

samples = 1significa che è rimasto 1 comico in questo ramo (1 comico con 9,5 anni di esperienza o meno).

value = [0, 1]significa che 0 riceverà un "NO" e 1 riceverà un "GO".

Falso - 1 comico finisce qui:

gini = 0.0 significa che tutti i campioni hanno ottenuto lo stesso risultato.

samples = 1 significa che è rimasto 1 comico in questo ramo (1 comico con più di 9,5 anni di esperienza).

value = [1, 0] significa che 1 riceverà un "NO" e 0 riceverà un "GO".


Prevedere i valori

Possiamo usare l'albero decisionale per prevedere nuovi valori.

Esempio: dovrei andare a vedere uno spettacolo interpretato da un comico americano di 40 anni, con 10 anni di esperienza e una classifica comica di 7?

Esempio

Usa il metodo predict() per prevedere nuovi valori:

print(dtree.predict([[40, 10, 7, 1]]))

Esempio

Quale sarebbe la risposta se il grado della commedia fosse 6?

print(dtree.predict([[40, 10, 6, 1]]))


Risultati diversi

Vedrai che l'albero decisionale ti dà risultati diversi se lo esegui abbastanza volte, anche se lo alimenta con gli stessi dati.

Questo perché l'albero delle decisioni non ci dà una risposta certa al 100%. Si basa sulla probabilità di un risultato e la risposta varierà.