Moneda justa
→ bit
Capítulo 6
La entropía mide la incertidumbre de una variable aleatoria:
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.
→ bit
→ bits
6 resultados → bits
Mide cuántos bits se necesitan en promedio si usamos una distribución estimada Q para codificar eventos de la distribución real P:
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.
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}")La divergencia KL (o entropía relativa) mide qué tan diferentes son dos distribuciones:
Siempre (desigualdad de Gibbs), y es 0 solo si P = Q. No es simétrica: .
. Promedia sobre P. Usada en máxima verosimilitud (MLE).
. Promedia sobre Q. Usada en variational inference (VI).
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}")Mide cuánto reduce la incertidumbre de X conocer 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).
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}")Cross-entropy como loss function. Equivale a MLE con softmax.
Information gain = reducción de entropía al dividir. Criterio ID3/C4.5.
Variational autoencoders minimizan KL entre la posterior aproximada y el prior.
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}")