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


Criteri di suddivisione: Gini ed Entropy

Quando un albero decisionale decide come suddividere i dati, ha bisogno di un "criterio" per capire qual è la scelta migliore. I due metodi più usati sono Gini e Entropy.

● Gini (Impurità di Gini)

Il criterio Gini misura quanto sono "mischiate" le classi all’interno di un gruppo. Se tutte le osservazioni in un gruppo appartengono alla stessa classe, il valore Gini è 0 (quindi perfetto). Più le classi sono mescolate, più alto sarà il valore. Questo metodo è veloce ed efficace, e per questo spesso viene scelto come impostazione predefinita.

● Entropy e Information Gain

L’Entropy viene dalla teoria dell’informazione e indica quanto "disordine" c’è nei dati. Più l’entropia è alta, più le classi sono distribuite in modo casuale. L’Information Gain misura quanto migliora (cioè quanto si riduce l’entropia) quando i dati vengono suddivisi in base a una variabile. In altre parole, ci dice quanto "informazione utile" abbiamo guadagnato con quella scelta.

▸ In pratica

Entrambi i metodi cercano la suddivisione più utile per classificare meglio i dati:

  • Gini: più rapido da calcolare, buono per set di dati grandi.
  • Entropy: più preciso nella scelta delle variabili, ma più lento da eseguire.
In molti casi reali, le differenze nei risultati sono minime.