Error: la energía es la suma de los valores singulares
«Los valores singulares son [5, 3, 1]. Conservar los dos primeros conserva 8/9 de la energía, cerca del 89 %: menos del 95 %.»
spectrum_example = np.array([5., 3., 1.])
wrong_retention = spectrum_example[:2].sum() / spectrum_example.sum()
correct_retention = (spectrum_example[:2]**2).sum() / (spectrum_example**2).sum()
assert wrong_retention < 0.95 <= correct_retention
La energía es amplitud al cuadrado. Los cuadrados son 25, 9 y 1, así que la razón correcta es 34/35 — cerca del 97 %, por encima de la línea del 95 % — y no 8/9.
Sumar los valores singulares sin elevar al cuadrado subestima cuánto conservan las primeras componentes y elige un rango mayor del necesario.