Cómo realizar SVD para imputar valores perdidos, un ejemplo concreto


8

He leído los excelentes comentarios sobre cómo lidiar con los valores perdidos antes de aplicar SVD, pero me gustaría saber cómo funciona con un ejemplo simple:

        Movie1 Movie2 Movie3
User1     5             4
User2     2      5      5
User3            3      4
User4     1             5
User5     5      1      5

Dada la matriz anterior, si elimino los valores de NA, terminaré teniendo solo Usuario2 y Usuario5. Esto significa que mi U será 2 × k. Pero si puedo predecir los valores perdidos, T debe ser de 5 × k, que pueden multiplicarse con valores singulares y V .

¿Alguien de ustedes completaría los valores faltantes en la matriz anterior eliminando primero a los usuarios con valores faltantes y luego aplicando SVD? Proporcione una explicación muy simple del procedimiento que aplicó y haga su respuesta práctica (es decir, el número multiplicado por otro número da una respuesta) en lugar de usar demasiados símbolos matemáticos.

He leído los siguientes enlaces:

stats.stackexchange.com/q/33142

stats.stackexchange.com/q/31096

stats.stackexchange.com/q/33103


Todos no vieron al menos una película, ¿verdad? Por lo tanto, eliminar a todos los usuarios que tienen datos faltantes dará como resultado cero usuarios y cero filas en su matriz de utilidad (calificación). Por lo tanto, no puede eliminar las filas a las que les faltan algunos datos, ¿verdad? SVD no es útil para conjuntos de datos con valores faltantes. Sin embargo, existen otras técnicas de factorización matricial que pueden imputarlas. Mire, SVD necesitaría que impute los datos faltantes de antemano, de alguna otra manera. Puede imputar de manera tonta simplemente usando cualquier constante anterior, pero ¿cuál es el punto de usar esos datos basura? ¿Quieres que se genere basura?
Geoffrey Anderson

Respuestas:


5

SVD solo se define para matrices completas. Entonces, si se adhiere a SVD simple, debe completar estos valores faltantes antes (SVD no es un algoritmo de imputación per se). Con suerte, los errores que introduzca serán cancelados por su enfoque de factorización matricial (suposición general: los datos son generados por un modelo de bajo rango).

Eliminar filas completas como quieres hacer es simplemente malo. Incluso establecer los valores faltantes en cero sería mejor.

Hay muchas estrategias de imputación, pero en este caso, imputaría la media de la columna (o tal vez la media de la fila). Esta es básicamente la estrategia recomendada en su segundo enlace.

        Movie1 Movie2 Movie3
User1   5             4
User2   2      5      5
User3          3      4
User4   1             5
User5   5      1      5

se convierte (media de columna; puntaje promedio de la película)

        Movie1 Movie2 Movie3
User1   5      3      4
User2   2      5      5
User3   3      3      4
User4   1      3      5
User5   5      1      5

Y una observación más: debe preprocesar los datos. ¡Al menos reste la media de todos los valores!

Echa un vistazo a esta introducción . Menciona el enfoque impute + SVD y también habla de un modelado más directo de los valores perdidos. Pero en este caso, se utilizan otros algoritmos.


Gracias por su respuesta. Por favor mira este enlace del blog . Parece que Simon solo usó calificaciones no faltantes, es decir, ignoró las calificaciones faltantes. ¿No es esto lo que estoy proponiendo? Por favor avise.
Boro Dega

2
Tómese su tiempo y lea mi enlace. Cubre exactamente la estrategia que describe su enlace de blog. No está imputando nada y no está usando SVD . ¡Solo usa alguna formulación de descenso de gradiente estocástico del enfoque motivado por SVD (que ofrece la posibilidad de ignorar todas las entradas faltantes)! Para obtener más información, solo google para factorización matricial + gradiente estocástico . ¡Hay mucho trabajo!
Sascha

2

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.


Gran reflejo Realmente me gusta tu respuesta y es acertada. ¿Sería capaz de ampliar su respuesta con un script que muestra sus soluciones? Entonces esa será la respuesta a la pregunta. Gracias
Boro Dega

2

Este documento cubre lo que está buscando con detalles muy elegantes (usando SVD de umbral suave). Como señaló Geoffrey, hacen esto escribiendo su propia función de costo que excluye del costo, cualquier predicción hecha contra los valores faltantes.

Resumen: Mazumdar et al utilizan técnicas de relajación convexa para proporcionar una secuencia de soluciones regulares de bajo rango para problemas de terminación de matrices a gran escala. Algoritmo SOFT-IMPUTE reemplaza iterativamente los elementos que faltan con los obtenidos de un SVD de umbral suave. Explotando la estructura del problema, muestran que la tarea se puede realizar con una complejidad de orden lineal en las dimensiones de la matriz. El algoritmo es fácilmente escalable a matrices grandes; por ejemplo, se ajusta a una aproximación de rango 95 al conjunto completo de entrenamiento de Netflix en 3.3 horas. Los métodos logran un buen entrenamiento y errores de prueba y tienen tiempos superiores en comparación con otras técnicas competitivas de vanguardia.

@article {mazumder2010spectral, title = {Algoritmos de regularización espectral para aprender matrices incompletas grandes}, autor = {Mazumder, Rahul y Hastie, Trevor y Tibshirani, Robert}, journal = {Journal of machine learning research}, volume = {11}, número = {agosto}, páginas = {2287--2322}, año = {2010}}

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.