Site icon Meccanismo Complesso

L’entropia e l’information gain nel Machine Learning

Machine Learning with Python - Entropy and Information Gain h

In machine learning, l’entropia e l’information gain sono concetti fondamentali utilizzati nell’ambito degli alberi decisionali e dell’apprendimento supervisionato per prendere decisioni sulla divisione dei dati durante il processo di addestramento di un modello. Questi concetti sono spesso associati all’algoritmo ID3 (Iterative Dichotomiser 3) e alle sue varianti, come il C4.5 e il CART.

Entropia ed Information Gain

Entropia: L’entropia è una misura della disorganizzazione o dell’incertezza in un insieme di dati. In un contesto di machine learning, l’entropia viene utilizzata per valutare la “purezza” di un insieme di dati, cioè quanto sono omogenei o eterogenei. L’entropia di un set di dati è calcolata come:

Dove E(S) è l’entropia del set di dati, e pi​ rappresenta la probabilità di appartenenza a una classe specifica i nel set di dati. Quando l’entropia è alta, significa che il set di dati è molto eterogeneo, mentre quando è bassa, il set è più omogeneo.

Information Gain: L’information gain (guadagno d’informazione) è un concetto utilizzato per misurare quanto una determinata feature (caratteristica) contribuisce a ridurre l’entropia o l’incertezza nei dati. In altre parole, l’information gain ci dice quanto una feature sia informativa nella divisione dei dati in classi più omogenee. L’information gain per una feature A rispetto a un set di dati S è calcolato come:

Dove IG(S,A) è il guadagno d’informazione, E(S) è l’entropia del set di dati S, values(A) sono i valori distinti della feature A, ∣Sv​∣ rappresenta la dimensione del sottoinsieme di dati in cui la feature A ha il valore v, e E(Sv​) è l’entropia del sottoinsieme Sv​.

L’obiettivo nella costruzione di un albero decisionale è selezionare la feature che massimizza l’information gain, in quanto questa feature contribuisce maggiormente a dividere i dati in classi più omogenee. Questo processo viene eseguito ricorsivamente per creare un albero decisionale che possa essere utilizzato per prendere decisioni di classificazione o regressione sui dati di test.

In sintesi, l’entropia misura l’incertezza nei dati, mentre l’information gain misura quanto una feature sia informativa nella divisione dei dati. Questi concetti sono importanti per l’apprendimento supervisionato e sono spesso utilizzati per costruire alberi decisionali efficaci.

Un esempio in Python

Ecco degli esempi pratici in Python per calcolare l’entropia e l’information gain utilizzando un dataset di esempio. Useremo la libreria Python numpy per i calcoli matematici.

Supponiamo di avere un dataset con due classi, “Sì” e “No”, e una feature chiamata “Outlook” con tre possibili valori: “Soleggiato”, “Nuvoloso” e “Piovoso”. Calcoleremo l’entropia e l’information gain rispetto a questa feature.


import numpy as np

# Funzione per calcolare l'entropia
def entropy(probabilities):
    return -np.sum(probabilities * np.log2(probabilities))

# Calcoliamo l'entropia iniziale del dataset
total_samples = 14  # Totale delle istanze nel dataset
yes_samples = 9    # Numero di istanze con classe "Sì"
no_samples = 5     # Numero di istanze con classe "No"

p_yes = yes_samples / total_samples  # Probabilità della classe "Sì"
p_no = no_samples / total_samples    # Probabilità della classe "No"

initial_entropy = entropy([p_yes, p_no])
print("Entropia iniziale:", initial_entropy)

# Ora supponiamo di dividere i dati in base alla feature "Outlook"
# e calcoliamo l'information gain.

# Dati per la divisione "Soleggiato"
samples_sunny = 5
p_sunny_yes = 3 / samples_sunny
p_sunny_no = 2 / samples_sunny
entropy_sunny = entropy([p_sunny_yes, p_sunny_no])

# Dati per la divisione "Nuvoloso"
samples_overcast = 5
p_overcast_yes = 4 / samples_overcast
p_overcast_no = 1 / samples_overcast  # Non ci sono casi "No"
entropy_overcast = entropy([p_overcast_yes, p_overcast_no])

# Dati per la divisione "Piovoso"
samples_rainy = 4
p_rainy_yes = 2 / samples_rainy
p_rainy_no = 2 / samples_rainy
entropy_rainy = entropy([p_rainy_yes, p_rainy_no])

# Calcoliamo l'information gain
weighted_entropy = (samples_sunny / total_samples) * entropy_sunny + \
                   (samples_overcast / total_samples) * entropy_overcast + \
                   (samples_rainy / total_samples) * entropy_rainy

print("Weighted Entropy:", weighted_entropy)
information_gain = initial_entropy - weighted_entropy
print("Information Gain:", information_gain)

In questo esempio, abbiamo calcolato l’entropia iniziale del dataset e l’information gain per la feature “Outlook” dividendo i dati in base ai suoi valori (“Soleggiato”, “Nuvoloso” e “Piovoso”).

Eseguendo il codice sopra, si ottiene il seguente risultato:

Initial Entropy: 0.9402859586706311
Weighted Entropy: 0.8903138176221539
Information Gain: 0.04997214104847725

L’information gain ci dice quanto la feature “Outlook” sia informativa nella divisione dei dati in classi più omogenee. Maggiore è l’information gain, maggiore è l’importanza di questa feature nella costruzione di un albero decisionale.

Exit mobile version