¿Qué sucede cuando aplicas SVD a un problema de filtrado colaborativo? ¿Cuál es la diferencia entre los dos?

21

En el filtrado colaborativo, tenemos valores que no se completan. Supongamos que un usuario no vio una película, entonces tenemos que poner una 'na' allí.

Si voy a tomar un SVD de esta matriz, entonces tengo que poner algún número allí, digamos 0. Ahora, si factorizo ​​la matriz, tengo un método para encontrar usuarios similares (descubriendo qué usuarios están más cerca en El espacio dimensional reducido). Pero la preferencia predicha en sí misma: para un usuario a un elemento será cero. (porque eso es lo que ingresamos en las columnas desconocidas).

Así que estoy atrapado con el problema del filtrado colaborativo vs SVD. Parecen ser casi lo mismo, pero no del todo.

¿Cuál es la diferencia entre ellos y qué sucede cuando aplico una SVD a un problema de filtrado colaborativo? Lo hice, y los resultados parecen aceptables en términos de encontrar usuarios cercanos, lo cual es genial, pero ¿cómo?

Jason
fuente

Respuestas:

25

Ok, cuando dices SVD, presumiblemente estás hablando de SVD truncada (donde solo mantienes los valores singulares más grandes). Hay dos formas diferentes de ver la SVD truncada de una matriz. Una es la definición estándar:k

Xnorte×metro=Unorte×norteΣnorte×metroVTmetro×metroUVΣkkXX~=U~norte×kΣ~k×kV~Tk×metro

kk

X~=unarsolmetroyonortesi:runanortek(si)=kyo,j(Xyoj-siyoj)2

kk

kXyojX~yoj

Stumpy Joe Pete
fuente
3

Parece que hay muchos enfoques sobre cómo lidiar con los valores perdidos. El siguiente documento con revisión en la Sección 1.3 puede ser un buen punto de partida.

d_ijk_stra
fuente
0

Necesito más reputación para comentar la respuesta de Stumpy Joe Pete, por lo tanto, publico esto como respuesta.

Stumpy gracias por la respuesta, aunque creo que necesita un poco de aclaración. Particularmente me refiero a esta oración:

Básicamente, está buscando una matriz de rango k que minimice el error cuadrático medio por elementos en las entradas conocidas de la matriz original.

Primero: ¿el rango más alto no minimizaría esto o reconstruiría la matriz X original? En segundo lugar, ¿por qué solo tomaría las entradas conocidas ? Intuitivamente tiene sentido, pero el procedimiento en realidad también se ajusta a los lugares vacíos que fueron reemplazados por algunos números razonables.

Mi enfoque sería llevar a cabo algo así como una validación cruzada:

  1. Complete los lugares vacíos con 0s o medios u otro número razonable.
  2. Reemplace uno de los n elementos conocidos con 0 o un número razonable
  3. Realizar reconstrucción SVD de rango k
  4. Verifique el valor del elemento reconstruido conocido .
  5. repita para todos los elementos conocidos posibles y calcule MSE
  6. repita para todos los k posibles y elija el que tenga el MSE más bajo.
Karol Przybylak
fuente
1. Desea elegir una k baja para evitar el sobreajuste (mucho más bajo que las dimensiones de X). Esto se debe básicamente a la misma razón por la que la regresión lineal es una mejor opción que una quintica para ajustar un conjunto de datos de 6 puntos. 2. No sabe cuáles se supone que son las entradas desconocidas, por lo que no puede medir "el elemento MSE inteligente" en ellas. Mi procedimiento llena los valores faltantes con números que se derivaron al minimizar el error contra los valores conocidos (y restringir que la matriz debe ser de bajo rango).
Stumpy Joe Pete