¿KNN es valioso si la mayoría de las calificaciones son 5/recomendaciones de filtrado pasivo?

StackOverflow https://stackoverflow.com/questions/1675972

Pregunta

He estado buscando construir un sistema de recomendación de tipo 'personas a las que les gusta x, también les gusta y', y estaba considerando usar Vogoo, pero después de revisar su código parece que hay muchos vecinos más cercanos según las calificaciones.

En las últimas semanas he visto algunos artículos que afirman que la mayoría de las personas no califican en absoluto o califican con un 5. http://youtube-global.blogspot.com/2009/09/five-stars-dominate-ratings.html

Actualmente no tengo implementado un sistema de calificaciones y realmente no veo la necesidad de implementarlo si todas las calificaciones aplicables no fluctúan.

¿Significa esto que KNN no es realmente valioso?

¿Alguien tiene alguna recomendación para desarrollar un sistema que obtenga recomendaciones similares basadas en el historial de visualización anterior (filtrado pasivo)?

Los datos con los que estoy trabajando se basan en eventos, por lo que si ha analizado el tenis de dobles masculino, el béisbol de los Blue Jays, el baloncesto universitario femenino, etc.Recomendaría otros eventos que se encuentran actualmente en su área y que también han visto otras personas que vieron eventos similares en todo el sistema.

Trabajo principalmente con PHP, pero he comenzado a aprender Python (y probablemente necesite aprender Java, si eso ayuda).

¿Fue útil?

Solución

Bueno, la respuesta cortante a su primera pregunta sería no. Si usted no tiene ninguna variación en sus datos (estrellas de YouTube), es difícil hacer una recomendación.

Lo que podría sugerir es tratar de ampliar la cantidad de datos que tiene. Para el ejemplo de YouTube, en lugar de sólo mirar a los grados de la estrella, también considerar el porcentaje del video que se observaba. Las porciones de pausa, buscando, rebobinado podría significar que el usuario le gusta el video y quería ver partes más a menudo, por lo que debe recibir un impulso de eso.

La forma estándar de hacer la recomendación, al menos en el mundo de la música, es para llegar a una distancia métrica que se puede utilizar, lo que le da una distancia entre dos piezas de música. Luego, cuando se entera del tipo de música le gusta a un usuario, se puede escoger uno que sea similar a sus gustos escogiendo las canciones que están "cerca" de acuerdo con la distancia métrica. También se llaman matrices de similitud, en el que dos elementos con alta distancia tendrían baja similitud.

Así que la pregunta se reduce a cómo se generan estas similitudes. Una forma que podría hacer sería para contar el número de personas que observaban también muestran un espectáculo visto B. Si hace esto para cada par de eventos, usted será capaz de hacer recomendaciones a partir del corpus se ha analizado. Por desgracia, esto no se extiende también a la formulación de recomendaciones para los eventos en los que no lo sabe ya cuántas personas les observaban (eventos en vivo en lugar de los registrados).

Esto es, al menos, un comienzo sin embargo.

Otros consejos

Después de la gran respuesta de Andrews, decidí explicar lo que hice y espero que pueda ayudar a otros (aunque puede ser específico de mi implementación).

Teniendo en cuenta que tengo datos sobre MUCHOS eventos y dónde tienen lugar esos eventos.

El script que utilicé para crear recomendaciones fue este.http://www.codeiesel.com/php/item-based-collaborative-filtering-php/

Sin embargo, sin tener ninguna calificación en el sistema, y ​​debido al valor "cuestionable" de las calificaciones basadas en los usuarios, creé calificaciones basadas en las similitudes que ya tenía en el conjunto de datos.

Básicamente lo estructuré así.

1) User one goes to mens tennis matches. 
2) Get all other users who go to mens tennis matches. 
3) For each user who goes to mens tennis matches, what other sports do those users go to?
4) For each  of the other sports, how many users attended those events as a count.
I used that count as the score, for the sports on the first user. 
5) Then, for each user who went to tennis, I built a 'similarity to first user' based on how many other sports they went to, and the score of those sports to the first user. 
6) This created a distance score for each user, and I applied that distance score as a score on each of the sports the secondary user went to. 
7) All of this was put into an array and passed to the recommendation linked to above

En realidad, esto funcionó sorprendentemente mejor de lo que esperaba según el tamaño de la muestra con el que estaba trabajando.

Sin embargo, su ejecución es tremendamente lenta.No estoy seguro de cómo progresaré desde aquí.

Es cierto que sólo cosas mayoría de la gente tasa que realmente les gusta. Estás de suerte con sus datos de tiempo debido a que obtiene una, basada en la toma de utilidad "calificación" honesta de forma gratuita, con base en el tiempo que el usuario ha visto el deporte.

Me gustaría tener el registro del tiempo que observaban el programa como "Nota" del usuario. Su caso es especialmente fácil debido a que obtiene cifras decimales de precisión!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top