10 · SVD truncado
La idea original del Netflix Prize: centra la matriz en su media, calcula su SVD, guarda solo los k tripletes singulares principales y reconstruye para rellenar los huecos. Una k pequeña elimina ruido.
Si R ≈ P Qᵀ es de bajo rango, la Descomposición en Valores Singulares R = U Σ Vᵀ encuentra la MEJOR aproximación de rango k gratis: guarda los k tripletes singulares principales y la reconstrucción predice las entradas faltantes. Una k pequeña descarta ruido; una k grande sobreajusta.
Sin esto:
El SVD es el puente de 'los factores existen' a 'aquí hay una forma concreta de obtenerlos'. También revela la tensión central de todo modelo MF: k es una perilla que negocia fidelidad a los datos contra generalización.
La Lección 9 dijo que existen buenos P y Q. El SVD truncado es la receta clásica para encontrarlos — la jugada que inició la era del Netflix Prize en los recomendadores.
La Descomposición en Valores Singulares factoriza cualquier matriz como R = U Σ Vᵀ, donde U y V son ortonormales y Σ es una diagonal de valores singulares no negativos ordenados de mayor a menor. Cada valor singular es la fuerza de una dimensión latente. El teorema de Eckart–Young garantiza que guardar solo los k principales tripletes da la mejor aproximación de rango k posible de R (en error cuadrático). Así que:
- Guarda
U[:, :k],Σ[:k],V[:, :k]. - Reconstruye
R_hat = U_k Σ_k V_kᵀ. - Los valores reconstruidos en las celdas vacías son tus predicciones.
Dos arrugas prácticas. Primera, el SVD plano necesita una matriz completamente llena, pero R está casi vacía — el arreglo clásico es imputar con la media: rellena los huecos con la media de cada ítem (o usuario, o global) antes de descomponer. Segunda, centra en la media primero (resta medias de fila/columna/globales), para que los factores modelen desviaciones del promedio, y luego suma la media de vuelta al final.
La perilla mágica es k:
- Demasiado grande → reconstruyes la matriz imputada casi perfectamente, incluyendo su ruido → sobreajuste.
- Demasiado pequeña → guardas solo los patrones más fuertes → eliminas ruido, y las predicciones para celdas ocultas a menudo mejoran.
Abajo ocultamos unas celdas, imputamos con la media, ejecutamos np.linalg.svd, truncamos a k y comparamos predicho vs real en las celdas ocultas — y vemos cómo una k más pequeña elimina ruido.
Python (in browser)
Imputar con la media → SVD → truncar a k → reconstruir. El RMSE oculto es mejor en el rango verdadero; una k demasiado grande reajusta ruido (sobreajusta la imputación).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Cómo se ve con TruncatedSVD de scikit-learn sobre una matriz dispersa (lectura guiada; no se ejecuta aquí).
Tras ejecutar SVD sobre una matriz de valoraciones imputada con la media, ¿por qué guardar un número PEQUEÑO de factores k a menudo mejora las predicciones en celdas ocultas?
- El SVD R = U Σ Vᵀ + Eckart–Young da la mejor aproximación de rango k; la reconstrucción en celdas vacías es tu predicción.
- El SVD plano necesita una matriz completa → imputa con la media y centra primero, luego suma la media de vuelta tras reconstruir.
- k negocia ajuste vs ruido: una k pequeña elimina ruido y generaliza; una k grande reajusta los valores imputados y sobreajusta.
El SVD truncado es el núcleo histórico del Netflix Prize, y el mismo truco de bajo rango impulsa el LSA en NLP y la reducción de dimensionalidad en todo el ML.
Si lo quitas: Sin la visión de bajo rango/SVD no tendrías una forma fundamentada de comprimir una matriz dispersa en factores reutilizables de usuario/ítem.