Capítulo 6

Teoría de la Información

6.1 Entropía

La entropía mide la incertidumbre de una variable aleatoria:

H(X)=i=1kp(xi)log2p(xi)H(X) = -\sum_{i=1}^k p(x_i) \log_2 p(x_i)

Es el número promedio de bits necesarios para codificar una muestra de X. Máxima cuando la distribución es uniforme; mínima (0) cuando es determinista.

Moneda justa

p=0.5p=0.5H=1H = 1 bit

Moneda sesgada

p=0.9p=0.9H0.47H \approx 0.47 bits

Dado justo

6 resultados → H=log262.58H = \log_2 6 \approx 2.58 bits

6.2 Entropía Cruzada

Mide cuántos bits se necesitan en promedio si usamos una distribución estimada Q para codificar eventos de la distribución real P:

H(P,Q)=ip(xi)logq(xi)H(P, Q) = -\sum_i p(x_i) \log q(x_i)

Esta es la función de pérdida estándar para clasificación(categorical cross-entropy). Minimizar la entropía cruzada equivale a maximizar la verosimilitud.

python
import numpy as np

def cross_entropy(p, q):
    return -np.sum(p * np.log(q + 1e-15))

# Clasificación: p = one-hot, q = softmax
p = np.array([0, 0, 1, 0])  # clase verdadera = 2
q = np.array([0.1, 0.05, 0.8, 0.05])
print(f"Cross-entropy: {cross_entropy(p, q):.4f}")

# Predicción perfecta
q_perfect = np.array([0, 0, 1, 0])
print(f"Perfecta: {cross_entropy(p, q_perfect):.4f}")

6.3 Divergencia KL

La divergencia KL (o entropía relativa) mide qué tan diferentes son dos distribuciones:

DKL(PQ)=ip(xi)logp(xi)q(xi)=H(P,Q)H(P)D_{KL}(P \parallel Q) = \sum_i p(x_i) \log \frac{p(x_i)}{q(x_i)} = H(P, Q) - H(P)

Siempre 0\geq 0 (desigualdad de Gibbs), y es 0 solo si P = Q. No es simétrica: DKL(PQ)DKL(QP)D_{KL}(P\|Q) \neq D_{KL}(Q\|P).

Forward KL

DKL(PQ)D_{KL}(P\|Q). Promedia sobre P. Usada en máxima verosimilitud (MLE).

Reverse KL

DKL(QP)D_{KL}(Q\|P). Promedia sobre Q. Usada en variational inference (VI).

python
def kl_divergence(p, q):
    return np.sum(p * np.log((p + 1e-15) / (q + 1e-15)))

p = np.array([0.5, 0.5])
q = np.array([0.9, 0.1])
print(f"KL(P||Q): {kl_divergence(p, q):.4f}")
print(f"KL(Q||P): {kl_divergence(q, p):.4f}")

6.4 Información Mutua

Mide cuánto reduce la incertidumbre de X conocer Y:

I(X;Y)=DKL(P(X,Y)PXPY)=H(X)H(XY)I(X; Y) = D_{KL}(P_{(X,Y)} \parallel P_X P_Y) = H(X) - H(X \mid Y)

Es cero si X e Y son independientes. Se usa en selección de features(elegir features con mayor información mutua con la variable target).

python
from sklearn.feature_selection import mutual_info_classif
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=500, n_features=10,
                           n_informative=3, random_state=42)

mi = mutual_info_classif(X, y)
print("Información mutua por feature:")
for i, v in enumerate(mi):
    print(f"  Feature {i}: {v:.4f}")

6.5 Aplicaciones en ML

Clasificación

Cross-entropy como loss function. Equivale a MLE con softmax.

Decision Trees

Information gain = reducción de entropía al dividir. Criterio ID3/C4.5.

VAEs

Variational autoencoders minimizan KL entre la posterior aproximada y el prior.

python
from sklearn.tree import DecisionTreeClassifier

# Information gain = reducción de entropía
tree = DecisionTreeClassifier(criterion='entropy', max_depth=3)
tree.fit(X, y)
print(f"Features importances (information gain):")
for i, imp in enumerate(tree.feature_importances_):
    if imp > 0:
        print(f"  Feature {i}: {imp:.4f}")