Ir al contenido

Laboratorio de Python en el navegador

Cada celda es Python real que corre en tu navegador gracias a Pyodide (no hace falta instalar nada). La primera ejecución descarga el intérprete y las librerías (≈ 10–30 MB); después todo es instantáneo y las celdas comparten la misma sesión.

Construye la matriz de diseño, resuelve X⊤Xw=X⊤y\mathbf{X}^\top\mathbf{X}\mathbf{w}=\mathbf{X}^\top\mathbf{y} y comprueba que el residual es ortogonal a las columnas. Ver teoría →

🐍 Ecuaciones normales con NumPy

numpy

Qué observar: Fíjate en que X⊤r\mathbf{X}^\top\mathbf{r} sale (0,0)(0,0) (salvo redondeo): esa es la condición de las ecuaciones normales.

2. Descenso de gradiente y la tasa de aprendizaje

Sección titulada «2. Descenso de gradiente y la tasa de aprendizaje»

El mismo problema resuelto iterando, con cuatro valores de η\eta. Ver teoría →

🐍 Descenso de gradiente y la tasa de aprendizaje

numpy

Qué observar: Con η=0.01\eta = 0.01 todavía no llegó; con 0.1 y 0.5 coincide con la solución exacta; con 1.1 diverge (números gigantes).

3. Grado del polinomio, train vs validación

Sección titulada «3. Grado del polinomio, train vs validación»

Ajusta polinomios de grado creciente a sin⁡(2πx)\sin(2\pi x) + ruido y compara el error de entrenamiento con el de validación. Ver teoría →

🐍 Grado del polinomio, train vs validación

numpy · scikit-learn

Qué observar: El RMSE de train baja casi siempre; el de validación hace la U (mínimo cerca del grado 5). Ridge rescata al grado 12.

El ejemplo de la slide: OLS, ridge y lasso con λ elegido por validación cruzada. Ver teoría →

🐍 Ridge y lasso en el dataset diabetes

numpy · scikit-learn

Qué observar: Los tres tienen RMSE de test ≈ 56 (como en la slide), pero el lasso pone exactamente en cero age, s4 y s6.

5. Regresión logística desde cero y el umbral

Sección titulada «5. Regresión logística desde cero y el umbral»

Entrena la logística con el gradiente X⊤(p−y)/n\mathbf{X}^\top(\mathbf{p}-\mathbf{y})/n, compárala con scikit-learn y mueve el umbral. Ver teoría →

🐍 Regresión logística desde cero y el umbral

numpy · scikit-learn

Qué observar: Tu implementación y la de scikit-learn llegan al mismo AUC (≈ 0.995). Bajar el umbral a 0.2 sube el recall de malignos a costa de más falsos positivos.

Un mini corpus de 10 correos, bolsa de palabras y Naive Bayes multinomial con dos valores de suavizado. Ver teoría →

🐍 Naive Bayes para spam

numpy · scikit-learn

Qué observar: Con α\alpha pequeño las probabilidades se vuelven extremas (0.999, 0.0): sin suavizado, una palabra nunca vista en una clase la anula.

Una clase compacta rodeada por otra ancha e inclinada: covarianzas muy distintas. Ver teoría →

🐍 LDA vs QDA vs Naive Bayes vs logística

numpy · scikit-learn

Qué observar: Los modelos con frontera lineal (LDA, logística) se quedan en ≈ 0.69; QDA y Naive Bayes, que permiten covarianzas propias, llegan a ≈ 0.87.

El ejemplo de tres puntos de la clase y un barrido de C en cáncer de mama. Ver teoría →

🐍 Dentro del SVM: vectores de soporte y C

numpy · scikit-learn

Qué observar: El punto (3,3) no es vector de soporte; αy=(−1,0.5,0.5)\alpha y = (-1, 0.5, 0.5) y w=(1,1)\mathbf{w}=(1,1), b=−1b=-1. Al subir C bajan los vectores de soporte (margen más angosto).

Verifica ϕ(x)⊤ϕ(z)=(1+x⊤z)2\phi(\mathbf{x})^\top\phi(\mathbf{z}) = (1+\mathbf{x}^\top\mathbf{z})^2, la semidefinitud de una Gram RBF y el efecto del kernel sobre anillos. Ver teoría →

🐍 Kernels: identidad, validez y γ

numpy · scikit-learn

Qué observar: El lineal no sirve en anillos (≈ 0.56); el polinómico de grado 2 y el RBF con γ = 1 aciertan todo. Con γ = 2000: train 1.0 pero CV ≈ 0.72, sobreajuste.

10. El árbol de 10 puntos y su ruta de poda

Sección titulada «10. El árbol de 10 puntos y su ruta de poda»

Reproduce el árbol de la clase, sus importancias y la ruta de costo-complejidad. Ver teoría →

🐍 El árbol de 10 puntos y su ruta de poda

numpy · scikit-learn

Qué observar: Mismo árbol que en las slides, importancias 3/7 y 4/7, y la ruta α=0, 2/15, 16/105, 3/14\alpha = 0,\ 2/15,\ 16/105,\ 3/14 con 4 → 3 → 2 → 1 hojas.