La estimación de máxima verosimilitud encuentra los parámetros de distribución "más probables"
Dado un conjunto de datos, busca la media y la varianza que maximizan la función de verosimilitud y compara si los resultados coinciden con np.mean / np.std.
Al completar este caso, comprenderás:Los parámetros que "maximizan la probabilidad de que aparezcan los datos" son precisamente la media muestral y la desviación estándar muestral.
Introducción desde la vida cotidiana
Adivinar el peso medio de los peces en un estanque
No sabes el peso medio de todos los peces del estanque. Pero atrapaste 200 peces y los pesaste. Naturalmente pensarás: ¿qué "peso medio" haría que el evento de "pesar exactamente estos pesos de los 200 peces" sea lo más probable?
Tu intuición te dice que el peso medio de los 200 peces es una buena estimación. La estimación de máxima verosimilitud (MLE) formaliza matemáticamente esta intuición: encontrar el valor del parámetro que maximiza la probabilidad de observar este conjunto de datos.
Definición matemática
Log-verosimilitud de la distribución gaussiana
\[ \log L(\mu, \sigma) = -\frac{n}{2}\log(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum_{i=1}^{n}(x_i - \mu)^2 \]Solución analítica del MLE
\[ \hat{\mu}_{\text{MLE}} = \frac{1}{n}\sum_{i=1}^{n} x_i = \bar{x}, \quad \hat{\sigma}_{\text{MLE}} = \sqrt{\frac{1}{n}\sum (x_i - \bar{x})^2} \]Esto no es una coincidencia. La solución analítica del MLE para la distribución gaussiana es exactamente la media muestral y la desviación estándar muestral.
Práctica con Python
Ejemplo
np.random.seed(3)
true_mu, true_sigma = 5.0, 2.0
data = np.random.normal(true_mu, true_sigma, size=200)
# Función de log-verosimilitud gaussiana
def log_likelihood(mu, sigma, data):
n = len(data)
return (-n/2) * np.log(2 * np.pi * sigma**2) \
- np.sum((data - mu)**2) / (2 * sigma**2)
# Búsqueda exhaustiva en cuadrícula para MLE
mu_grid = np.linspace(3, 7, 100)
sigma_grid = np.linspace(0.5, 4, 100)
best_ll = -np.inf
best_mu, best_sigma = None, None
for mu in mu_grid:
for sigma in sigma_grid:
ll = log_likelihood(mu, sigma, data)
if ll > best_ll:
best_ll = ll
best_mu, best_sigma = mu, sigma
print("=" * 55)
print("Resultado de MLE (estimación de máxima verosimilitud) de EJEMPLO")
print("=" * 55)
print(f"Búsqueda en cuadrícula MLE: mu={best_mu:.4f}, sigma={best_sigma:.4f}")
print(f"Cálculo directo con fórmula: mu={data.mean():.4f}, sigma={data.std():.4f}")
print(f"Parámetros reales de generación: mu={true_mu}, sigma={true_sigma}")
print(f"\n"Conclusión: MLE = np.mean/np.std — no es coincidencia, es un teorema matemático")
======================================================= EJEMPLO 最大似然估计 (MLE) 结果 ======================================================= 网格搜索 MLE: mu=4.9394, sigma=2.0480 公式直接算: mu=4.9394, sigma=2.0480 真实生成参数: mu=5.0, sigma=2.0 结论: MLE = np.mean/np.std —— 不是巧合,是数学定理
Escenarios de aplicación en IA
| Escenario | Relación con MLE |
|---|---|
| Pérdida de entropía cruzada | Minimizar la entropía cruzada en tareas de clasificación = MLE para la distribución de clases |
| Pérdida MSE | Minimizar el MSE en tareas de regresión = MLE asumiendo que los errores siguen una distribución gaussiana |
| Inicialización de parámetros | Inicializar los parámetros del modelo con estadísticos de los datos — en esencia, es la intuición del MLE |