Alberi Decisionali
Una sequenza di test per una decisione o a una previsione.
Purezza con il metodo Gini.
alberi decisionali
Un albero decisionale è una struttura ad albero che rappresenta una sequenza di domande (test) che ci conducono a una decisione o a una previsione.Ogni nodo dell'albero rappresenta un test su un attributo, e i rami corrispondono alle possibili risposte a quel test. Alla fine, raggiungiamo un nodo foglia che contiene il risultato finale.
Metodi di misura dell'impurità dei nodi
Entropia
- L'entropia misura l'incertezza o la disordine nei dati.
- Un nodo con entropia bassa ha una maggiore purezza (tutte le etichette sono uguali).
- La formula per l'entropia è: $$H(T) = -\sum_{i=1}^{c} p_i \log_2(p_i)$$ dove $$p_i$$ è la proporzione di campioni di classe $$i$$ nel nodo.
- Valori di entropia più vicini a zero indicano una migliore separazione delle classi.
Indice di Gini
- L'indice di Gini misura quanto spesso un elemento scelto casualmente dal set di dati verrà etichettato in modo errato se viene etichettato casualmente secondo la distribuzione delle etichette nel nodo.- La formula per l'indice di Gini è: $$G(T) = 1 - \sum_{i=1}^{c} p_i^2$$ dove $$p_i$$ è la proporzione di campioni di classe $$i$$ nel nodo.
- Valori di Gini più vicini a zero indicano una migliore separazione delle classi.
Esempio di albero decisionale con metodo Gini (previsione di malattie): Supponiamo di avere un database di pazienti con sintomi e diagnosi di malattie. Creeremo un albero decisionale per prevedere se un paziente ha una malattia o meno.
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# Creiamo un dataframe di esempio (immaginario)
data = {
'Febbre': [1, 0, 1, 0, 1, 1],
'Dolore_gola': [1, 1, 0, 0, 1, 0],
'Mal_di_testa': [1, 0, 1, 1, 0, 1],
'Malattia': ['Influenza', 'Raffreddore', 'Influenza', 'Raffreddore', 'Influenza', 'Raffreddore']
}
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Carica il dataset di esempio (sostituisci con il tuo dataset)
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
# Crea il modello dell'albero decisionale con indice di Gini come criterio
model = DecisionTreeClassifier(criterion='gini', random_state=42)
model.fit(X_train, y_train)
# Esegui la previsione
predictions = model.predict(X_test)
# Valuta l'accuratezza del modello
accuracy = accuracy_score(y_test, predictions)
print(f'Accuratezza del modello: {accuracy:.2f}')