Hay muchas formas de predecir valores perdidos, pero la SVD clásica no es una de ellas. Lo bueno es que el aprendizaje automático ahora ofrece muchas formas de hacer esto, algunas de las cuales se basan en la factorización matricial, otras completamente diferentes a la factorización matricial. Puede elegir y hacer un modelo completamente personalizado, y esto se hace comúnmente ahora porque las herramientas son lo suficientemente potentes hoy en día. La factorización matricial sigue siendo una buena forma de predecir valores perdidos en datos dispersos, pero la SVD en sí misma no lo es.
La respuesta aceptada aquí, aparentemente aconsejó al interlocutor que simplemente elija cualquier valor constante como 0 o 99 o -3 o lo que sea, para asignar los valores faltantes por adelantado, y luego ejecutar SVD en eso. Esta es una mala respuesta si el objetivo es predecir en conjuntos de datos dispersos. Pero si, en cambio, el objetivo del OP es simplemente ejecutar SVD, la preasignación de cualquier valor constante funcionará bien, así que elija cualquier valor y luego ejecute SVD si los resultados no son importantes para el OP. Dije que SVD es una mala solución para la predicción de valores perdidos porque asumir un valor constante en todas las ubicaciones dispersas podría terminar siendo que está introduciendo literalmente más puntos de ruido que los puntos de datos buenos conocidos.
¿Cuál es el punto de aprender ruido? ¿Y por qué sugeriría incluso que los valores faltantes son en realidad el mismo valor constante, cuando el objetivo del ejercicio es predecir cuáles son? No esperas que los valores faltantes sean todos iguales, ¿verdad? Eso subestimará la cantidad de componentes principales que resultan si hay datos constantes tan penetrantes en su conjunto de datos, por un lado. Además, ese es un problema de predicción muy fácil. No necesita un algoritmo de aprendizaje o incluso un algoritmo de factorización. Acaba de decir que los valores faltantes son una constante conocida. ¡No hay necesidad de imputar! Ya lo hiciste, manualmente, simplemente adivinando la forma antigua.
Puede ser más elegante con SVD y preimputar los valores faltantes utilizando una distribución aleatoria que se deriva empíricamente utilizando la media y la desviación estándar de los datos conocidos (no faltantes). Pero luego hay aleatoriedad en lugar de patrones en los datos y presumiblemente esperaba la factorización de la matriz y la reducción de la dimensionalidad inherentes a esa técnica para encontrar los patrones que espera que estén allí. Sin embargo, no descubrirá muchos patrones de ningún uso en el ruido aleatorio, por lo que tampoco es útil usarlo de esta manera.
La conclusión es que la salida de SVD, o cualquier otro algoritmo, será en gran medida basura cuando haya una cantidad abrumadora de datos basura proporcionados por el investigador. Ningún algoritmo puede aprender un buen modelo a partir de datos basura mayoritarios. Simplemente diga no a todo ese "enfoque".
Parece probable que el objetivo del OP es predecir y utilizar un diseño de factorización matricial como parte del algoritmo de aprendizaje. En este caso, lo bueno es que puede escribir de manera factible su propia función de costo que omite de manera crucial del costo, cualquier predicción hecha contra los valores faltantes. De esta manera no se envían datos basura al algoritmo de aprendizaje.Use un buen optimizador basado en gradiente de descenso, como Adam (hay otros). Puede obtener una solución que sea mediblemente precisa en cualquier grado en entrenamiento, desarrollo y conjunto de datos de prueba, siempre que siga una buena metodología de proyecto de aprendizaje automático. Siéntase libre de agregar términos y complejidad a su modelo, como sesgo de usuario, sesgo de elemento, sesgo global, regularización o cualquier otra cosa que necesite para controlar el error de sesgo y el error de varianza a los requisitos de su proyecto y los conjuntos de datos disponibles.
Un paquete moderno de desarrollo de aprendizaje automático hace que este sea un enfoque práctico ahora. TensorFlow, por ejemplo (o Microsoft CNTK et al) puede ayudarlo a hacer exactamente lo que describí en un conjunto de datos disperso utilizando un modelo de factorización matricial.