machine-learning apache-spark collaborative-filtering matrix-factorization

machine learning - Apache Spark ALS resultados de filtrado colaborativo. No tienen sentido



machine-learning apache-spark (4)

El filtrado colaborativo solo le brinda elementos que a las personas, que tienen el mismo gusto que usted, les gusta. Si califica solo películas para niños, no significa que recibirá películas recomendadas solo para niños. Simplemente significa que las personas que calificaron Toy Story, Jungle Book, Lion King, etc ... como también te gustaron Life of Oharu, More, Who''s Singin ''Over There ?, etc ... Tienes una buena animación en la wikipedia página: CF

No leí el enlace que me diste, pero una cosa que puedes cambiar es la medida de similitud que estás usando si quieres permanecer con el filtrado colaborativo.

Si desea una recomendación basada en su gusto, puede probar el modelo de factor latente como Matrix Factorization. Aquí, el factor latente podría descubrir que la película se puede describir como características que describen las características de los objetos clasificados. Puede ser que una película sea cómica, infantil, horrorosa, etc. (Por cierto, nunca se sabe cuál es el factor latente). Y si solo calificas las películas para niños, es posible que obtengas como recomendación otras películas para niños.

Espero eso ayude.

Quería probar Spark para el filtrado colaborativo usando MLlib como se explica en este tutorial: https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html El algoritmo se basa en el documento "Collaborative Filtering". para conjuntos de datos de comentarios implícitos ", haciendo factorización matricial.

Todo está funcionando con el conjunto de datos de 10 millones de Movielens. El conjunto de datos se dividió en 80% de entrenamiento, 10% de prueba y 10% de validación.

  • Línea base RMSE: 1.060505464225402
  • RMSE (tren) = 0.7697248827452756
  • RMSE (validación) = 0.8057135933012889 para el modelo entrenado con rango = 24, lambda = 0.1 e Iteraciones = 10.
  • El mejor modelo mejora la línea de base en un 23.94%.

Que son valores similares al tutorial, aunque con diferentes parámetros de entrenamiento.

Intenté ejecutar el algoritmo varias veces y siempre obtuve recomendaciones que no tienen ningún sentido para mí. Incluso clasificando solo películas para niños, obtengo los siguientes resultados:

Para clasificaciones:

  • clasificación personal: Toy Story (1995) grado: 4.0
  • Valoración personal: Jungle Book, The (1994) grado: 5.0
  • Valoración personal: Lion King, The (1994) grado: 5.0
  • Valoración personal: Mary Poppins (1964) Calificación: 4.0
  • Valoración personal: Alice in Wonderland (1951) Calificación: 5.0

Resultados:

Películas recomendadas para ti:

  1. La vida de Oharu, El (Saikaku ichidai onna) (1952)
  2. Más (1998)
  3. ¿Quién está cantando allí? (también conocido como Who Sings Over There) (Ko to tamo peva) (1980)
  4. Domingos y Cibeles (Dimanches de Ville d''Avray, Les) (1962)
  5. Blue Light, The (Das Blaue Licht) (1932)
  6. Tiempos de Harvey Milk, The (1984)
  7. Por favor vote por mí (2007)
  8. Hombre que plantó árboles, The (Homme qui plantait des arbres, L '') (1987)
  9. Shawshank Redemption, The (1994)
  10. Solo ayer (Omohide poro poro) (1991)

Que a excepción de Sólo ayer no parece tener ningún sentido.

Si hay alguien por ahí que sepa cómo interpretar esos resultados u obtener mejores, realmente agradecería que compartiera su conocimiento.

Atentamente

EDITAR:

Como se sugirió entrené otro modelo con más factores:

  • Error de base: 1.0587417035872992
  • RMSE (tren) = 0.7679883378412548
  • RMSE (validación) = 0.8070339258049574 para el modelo entrenado con rango = 100, lambda = 0.1 y número = 10.

Y diferentes calificaciones personales:

  • Valoración personal: Star Wars: Episodio VI - El retorno del Jedi (1983) Nota: 5.0
  • Valoración personal: Misión: Imposible (1996) Nota: 4.0
  • clasificación personal: Die Hard: With a Vengeance (1995) grado: 4.0
  • Valoración personal: Batman Forever (1995) Calificación: 5.0
  • clasificación personal: Men in Black (1997) grado: 4.0
  • clasificación personal: Terminator 2: Judgment Day (1991) grado: 4.0
  • clasificación personal: Top Gun (1986) grado: 4.0
  • Valoración personal: Star Wars: Episodio V - The Empire Strikes Back (1980) grado: 3.0
  • clasificación personal: Alien (1979) grado: 4.0

Las películas recomendadas son:

Películas recomendadas para ti:

  1. Carmen (1983)
  2. Luz silenciosa (Stellet licht) (2007)
  3. Jesús (1979)
  4. La vida de Oharu, El (Saikaku ichidai onna) (1952)
  5. Corazón de América (2003)
  6. Para la Biblia me dice así (2007)
  7. Más (1998)
  8. Leyenda de Leigh Bowery, The (2002)
  9. Funeral, The (Ososhiki) (1984)
  10. Longshots, The (2008)

No es un resultado útil.

EDIT2: ¡Con el uso del método de retroalimentación implícito, obtengo mejores resultados! Con las mismas películas de acción que las anteriores, las recomendaciones son:

Películas recomendadas para ti:

  1. Star Wars: Episodio IV - Una nueva esperanza (también conocida como Star Wars) (1977)
  2. Terminator, The (1984)
  3. En busca del arca perdida (Indiana Jones y los incursores del arca perdida) (1981)
  4. Die Hard (1988)
  5. Padrino, El (1972)
  6. Aliens (1986)
  7. Rock, The (1996)
  8. Día de la Independencia (también conocido como ID4) (1996)
  9. Star Trek II: La ira de Khan (1982)
  10. GoldenEye (1995)

¡Eso es más de lo que esperaba! La pregunta es por qué la versión explícita es tan-tan-mala


He intentado utilizar el mismo conjunto de datos y, siguiendo este tutorial de Spark, obtengo los mismos resultados (subjetivamente malos).

Sin embargo, usando un método más simple, por ejemplo, basado en la Correlación de Pearson como una medida de similitud, en lugar de la factorización de la matriz, obtengo resultados mucho mejores. Esto significa que principalmente obtendría películas para niños con sus preferencias de entrada y el mismo archivo de calificaciones de entrada.

A menos que realmente necesite la factorización (que tiene muchas ventajas), le sugiero usar otro método de recomendación.


Segundo, lo que dijo Vlad, prueba la correlación o Jaccard. Es decir, ignorar los números de clasificación y simplemente mirar el binario "son estas dos películas juntas en la lista de preferencias de un usuario o no". Esto fue un cambio de juego para mí cuando estaba construyendo mi primer recomendador: http://tdunning.blogspot.com/2008/03/surprise-and-coincidence.html

Buena suerte


Tenga en cuenta que el código que está ejecutando no usa comentarios implícitos, y no es exactamente el algoritmo al que se refiere. Solo asegúrate de no estar usando ALS.trainImplicit . Es posible que necesite una lambda diferente y rango. RMSE de 0.88 es "OK" para este conjunto de datos; No estoy seguro de que los valores del ejemplo sean óptimos o solo el que produjo la prueba de juguete. Usas un valor diferente todavía aquí. Tal vez aún no es óptimo.

Incluso podría ser algo así como errores en la implementación de ALS corregidos desde entonces. Intente comparar con otra implementación de ALS si puede.

Siempre trato de resistirme a racionalizar las recomendaciones ya que nuestros cerebros inevitablemente encuentran alguna explicación incluso para recomendaciones aleatorias. Pero, oye, puedo decir que no obtuviste acción, terror, drama criminal, novelas de suspenso aquí. Encuentro que las películas para niños van de la mano con gusto por las películas artísticas, ya que el tipo de persona que llenó sus gustos para MovieLens hace mucho tiempo cuando las películas para niños no eran en realidad niños, sino padres y tal vez ingenieros de software lo suficientemente mayores. tener hijos tienden a mirar este tipo de películas extranjeras que ves.