2011-07-26 7 views
6

tengo el problema siguiente:Algoritmo para completar una matriz corrupta de datos

extraje un conjunto de datos, sino que parte de estos datos o bien no están disponibles o no; para diversos artículos identifiqué 10 parámetros:

 param1 param2 ... param10 
Item 1 1220  N/A   1000 
Item 2 1300  200  ... 1000 
..  ...  ... 

item N N/A  1000 ...  200 

N ~ 1500 and half of the values are complete 

hay una lógica implícita en la creación de artículos, así que me gustaría que llenar estos valores con el mayor valor esperado sea posible.

Ejemplo:

Imaginemos que tiene 2 parámetros y 3 artículos.

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  N/A 

Con interpolación lineal se podrían obtener fácilmente param2 para item3 = 50.

Mi idea:

Como tengo 10 parámetros y 1500 los valores, se me ocurrió hacer un PCA en el covariance matrix de los 750 artículos que son completa (la búsqueda de la dirección principal del conjunto de datos).

El PCA me llevará a una dirección principal para mis artículos (mayor valor propio), y subdirección para subgrupos de elementos (valores propios más pequeños).

Quería proyectar los vectores con parámetros faltantes en la dirección principal, por ejemplo. para obtener el valor aproximado de los parámetros faltantes

Desde mi primer ejemplo:

 param1 param2 
item1 400 200 
item2 200 100 
item3 100  X ? 

matriz completa: matriz

param1 param2 
item1 400 200 
item2 200 100 

covarianza:

1 0.5 
    0.5 1 

vectores propios y valores propios:

V1 y L1:

1 
1 associatedd to 1.5 

V2 y L2:

1 
-1 associated to 0.5 

resultado:

Si yo proyecto sobre V1 solo consigo X1=100.

Si proyecto en l1.V1 + l2.V2 obtengo X1=50. Esto es porque hay una correlación perfecta entre los primeros 2 artículos.


Así que mi pregunta:

Hasta el momento es sólo teoría, que no han aplicado todavía, pero antes de empezar me gustaría saber si voy a alguna parte con esto.

¿Puedo hacer algo mejor? (Realmente creo que sí.) ¿Qué puedo hacer si todos los elementos tienen un parámetro que falta? ¿De dónde saco la dirección?

¿Hay buenos algoritmos conocidos para completar las matrices dañadas, o puede ayudarme a completar mi idea (recomendando buenas lecturas o métodos)?

Creo que Netflix utiliza este tipo de algoritmo para completar automáticamente la matriz de puntaje de la película (problema de 1M dólar de Netflix).

Si crees que esto pertenece a otro sitio stackexchange, puedes migrarlo.

Respuesta

1

¿Por qué no utilizar las predicciones numéricas de machine learning? En su primer ejemplo, los parámetros son atributos y los elementos son instancias. Con él puedes probar regresión lineal o redes neuronales o cualquier otra cosa en un par de minutos. Después de la formación que recibirá el próximo ecuación para el primer ejemplo (param2 aquí se marca como una clase):

param2 = 0 + 1/2 * param1 

que es exactamente lo que quiere.

Si no está seguro de que las relaciones entre params sean lineales, siempre puede probar otros tipos de regresión (ANN, SVM, cualquier cosa).

Para un inicio rápido, use Weka. Convierte tus datos a CSV, cárgalo en Weka y comienza a jugar. Para predicciones numéricas mira la pestaña "Clasificación".

+0

Tienes razón, para un problema como el aprendizaje automático puede ser un buen enfoque. Voy a intentar Weka. Gracias –

2

This article por Simon Funk describe su uso de un enfoque como el suyo para el desafío del premio Netflix; quizás esto es en lo que estabas pensando cuando lo mencionaste. A diferencia de su enfoque, maneja los datos faltantes. La esencia es reemplazar el uso directo de los métodos de la matriz para determinar la descomposición del valor singular de la matriz de datos con un problema de optimización aproximadamente equivalente que representa de manera más natural los datos faltantes.

+0

thx por su respuesta. No voy a mirarlo detenidamente. Supongo que si entiendo cómo puedes resolver el netflix, eso sería suficiente para lo que tengo que hacer. –

1

Pruebe el algoritmo NIPALS. Es el método estándar del campo de "Quimiometría". Es un método de PCA diseñado específicamente para datos faltantes. A continuación, puede volver a proyectar sus puntajes y cargar (t * p ') para llenar los huecos de acuerdo con el modelo de los datos. La belleza de este enfoque es que no sesga los datos por imputación, solo usa los datos que tiene. Intente buscar documentos de Herman o Svante Wold, o hay implementaciones en R y Matlab. Obviamente, cuanto más datos falta, menos fiables son los resultados, pero si faltan al azar, puede tener cantidades bastante grandes de datos faltantes.

La leyenda es que Herman inventó el algoritmo para clasificar a los caballos de carreras en los EE. UU.: Un gran problema de datos faltantes (si lo piensas, no todos los caballos se encuentran).

Cuestiones relacionadas