Me gustaría ofrecer una opinión disidente:
Falta, en los Bordes de los Valores perdidos
En el filtrado colaborativo problema, las conexiones que no existen (usuario $i$ no ha valorado el elemento $j$ persona $x$ no ha friended persona $y$) generalmente son tratados como valores perdidos para ser predicho, en lugar de como ceros. Es decir, si el usuario $i$ no ha valorado el elemento $j$, queremos adivinar lo que podría tasa de él si se había clasificado. Si la persona $x$ no ha friended $y$, queremos adivinar cómo es la probabilidad de que iba a querer a un amigo de él. Las recomendaciones se basan en la reconstrucción de los valores.
Cuando usted toma el SVD del grafo social (por ejemplo, la conecte a través de svd()
), que son, básicamente, la imputación de los ceros en todos los puestos vacantes. Que esto es problemático, es más evidente en el usuario-objeto-calificación de la instalación de filtrado colaborativo. Si yo tuviera una forma confiable de relleno en las entradas que faltan, yo no sería necesario el uso de SVD. Me acababa de dar recomendaciones basadas en el llenado de los datos. Si no tengo una manera de hacer eso, entonces yo no debería llenar antes de hacer la enfermedad vesicular porcina.*
SVD con los Valores que Faltan
Por supuesto, el svd()
función no saben cómo lidiar con los valores que faltan. Así que, ¿qué se supone que debes hacer? Bueno, hay una manera de reformular el problema como
"Encontrar la matriz de rango $k$ que es la más cercana a la matriz original"
Ese es realmente el problema que estamos tratando de resolver, y no vas a usar svd()
a resolverlo. Una forma en que ha funcionado para mí (en el premio de Netflix de datos) fue esta:
Tratar de encajar las entradas con un modelo simple, por ejemplo, $\hat{X}_{i,j} = \mu + \alpha_i + \beta_j$. Esto realmente hace un buen trabajo.
Asignar a cada usuario $i$ $k$- vector $u_i$ y cada elemento de a $j$ $k$- vector $v_j$. (En su caso, cada persona se una a la derecha y a la izquierda $k$-vector). Usted va a ser en última instancia la predicción de los residuos como productos de puntos: $\sum u_{im}v_{jm}$
El uso de algún algoritmo para encontrar los vectores que minimizar la distancia a la matriz original. Por ejemplo, el uso de este papel
La mejor de las suertes!
* : ¿Qué Tenali está recomendando es básicamente vecinos más cercanos. Intenta encontrar los usuarios que son similares y hacer recomendaciones sobre eso. Por desgracia, la dispersión problema (~99% de la matriz es la falta de valores) hace que sea difícil encontrar la más cercana a los vecinos el uso de coseno de distancia o similitud de jaccard o lo que sea. Por tanto, era recomiende hacer un SVD de la matriz (con ceros atribuido a la falta de valores) a la primera comprimir los usuarios en un menor espacio de características y, a continuación, hacer comparaciones allí. Haciendo SVD, más cercano a los vecinos es buena, pero aun así, recomendaría hacer el SVD de la manera correcta (me refiero a... a mi manera). No hay necesidad de hacer sentido de valor de la imputación!