Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

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}')