Mínimos cuadrados alternos
Ajustar CP es elegir A, B, C que minimicen ‖T − Σᵣ aᵣ ∘ bᵣ ∘ cᵣ‖², y eso no es convexo en los tres a la vez: el modelo multiplica incógnitas entre sí. No hay receta tipo SVD, y a diferencia de Tucker no se puede ir modo a modo.
Fija B y C, y el modelo es lineal en A. Desplegar por el modo 0 da T₍₀₎ ≈ A (B ⊙ C)ᵀ, un problema de mínimos cuadrados corriente que resuelve la pseudoinversa de la sección 07:
A = unfold(T, 0) @ khatri_rao(B, C) @ np.linalg.pinv((B.T @ B) * (C.T @ C))
ALS hace eso para A, luego B, luego C, barrido tras barrido. Cada paso es una solución convexa exacta, así que el error nunca sube. No garantiza llegar al mínimo global: la no convexidad se mudó a la elección del punto de partida, y con rangos altos semillas distintas se detienen en errores distintos.