Modelo de sistema de recomendación

Para realizar el modelo del sistema de recomendación, la idea interna es la idea de filtrado colaborativo. Es decir, se utiliza una gran cantidad de datos de preferencias del usuario existentes para estimar la preferencia del usuario por elementos que no se han tocado. Entonces, la idea del filtrado colaborativo consiste en calcular la similitud.
Métodos comunes para calcular la similitud (coeficiente de correlación, coseno del ángulo entre vectores , distancia euclidiana)
Hay dos métodos recomendados para el sistema de recomendación

Recomendaciones basadas en el usuario

El núcleo es calcular la similitud entre usuarios y usuarios. Luego, complete la recomendación.
Para recomendaciones basadas en la similitud del usuario, use una palabra simple, es decir, "afines". El hecho también es cierto.
Por ejemplo, si quiere ver una película, pero no sabe si la película satisface sus gustos, ¿qué debe hacer? Es una buena forma de encontrar presentaciones y ver avances breves en Internet, pero no puede proporcionar información más detallada y precisa sobre si la película realmente se ajusta a sus preferencias. En este momento, la mejor manera puede ser esta:
Xiao Wang: Hombre, quiero ver esta película, ¿no la viste, cómo?
Xiao Zhang: De alguna manera, acompañé a mi novia a verlo. Ella lo miró con entusiasmo. Yo lo miré por un rato y luego fui a jugar en el teléfono. Xiao Wang: ¿Hay buenas películas recientemente?
Xiao Zhang: Ve a ver "Thunder XX", lo vi bien y supongo que a ti también te gusta.
Xiao Wang: Está bien.
Esta es una conversación que ocurre a menudo en la vida diaria, y también es la base de los algoritmos de filtrado colaborativo basados ​​en el usuario.

Xiao Wang y Xiao Zhang son buenos amigos. Como buen amigo, también debería tener los mismos pasatiempos. Entonces es razonable recomendarse mutuamente las cosas favoritas de cada uno sobre esta base. Hay razones para creer que la persona recomendada también puede disfrutar mejor de la felicidad y satisfacción que brinda el artículo recomendado.
La siguiente figura muestra la forma del algoritmo de filtrado colaborativo basado en el usuario.
Inserte la descripción de la imagen aquí
Como puede ver en la figura, si desea recomendar un producto al usuario 3, cómo elegir este producto es un gran problema. En la información existente, el usuario 3 ha seleccionado el artículo 1 y el artículo 5, el usuario 2 está más inclinado a seleccionar el artículo 2 y el artículo 4, y el usuario 1 ha seleccionado el artículo 1, el artículo 4 y el artículo 5.

Según el pensamiento racional del lector, sin más análisis, se puede ver que el usuario 1 y el usuario 3 son más similares en sus preferencias de selección. Entonces, existen muchas razones para creer que tanto el usuario 1 como el usuario 3 han seleccionado el mismo elemento 1 y el mismo elemento 5, por lo que es completamente razonable recomendar el elemento 3 al usuario 3.

Esta es una recomendación basada en el algoritmo de filtrado colaborativo del usuario. Utilice un método de cálculo específico para escanear usuarios existentes con el mismo objetivo que el objetivo especificado, calcule la similitud de los usuarios de acuerdo con la similitud dada, seleccione el usuario con la puntuación más alta y retroalimente al usuario en función de su información existente como resultado de la recomendación. Este algoritmo de recomendación es relativamente simple y fácil de entender en términos de resultados de cálculo, y tiene un alto valor de aplicación práctica.

Recomendaciones basadas en elementos

En los algoritmos de recomendación basados ​​en elementos, también se puede utilizar una palabra para describir el principio de todo el algoritmo. Eso es "las cosas se juntan".

Esta vez Xiao Zhang quería comprar un regalo para su novia.
Xiao Zhang: El día de San Valentín llegará pronto. Quiero comprar un regalo para mi novia, pero no sé qué comprar. Casi me regaña por comprar un modelo de carreras la última vez.
Xiao Wang: ¿Oh? Entonces realmente lo eres, y no compres algo que le guste. ¿Qué le gusta a ella normalmente?
Xiao Zhang: Por lo general, le gusta ver dibujos animados, especialmente Doraemon, y solo mira algunos episodios cuando está bien.
Xiao Wang: Entonces te sugiero que le compres un traje modelo Doraemon, que definitivamente hará que le guste.
Xiao Zhang: Buena idea, déjame intentarlo.
De la conversación, se puede sentir que Xiao Zhang quiere comprar un regalo para que su novia consulte a Xiao Wang.
Para usuarios desconocidos, en ausencia de información específica del usuario, es razonable recomendar un elemento desconocido basado en los datos de preferencias existentes del usuario. Este es un algoritmo de recomendación basado en elementos.


En un entorno de producción, para establecer un modelo de sistema de recomendación, primero necesita: datos de la matriz de elementos del usuario.
Sin embargo, la matriz de preferencias del usuario en un entorno de producción suele ser escasa.
Si modela directamente la matriz dispersa, el resultado es definitivamente inexacto. Para los datos vacantes, no puede simplemente establecerlo en 0. Necesitamos usar algún algoritmo para predecir los datos vacantes. Luego calcula la similitud

  • Para un ejemplo simple, suponga que tenemos los siguientes datos de calificaciones de usuarios para películas:
    Tom, Star Wars, 5
    Jane, Titanic, 4
    Bill, Batman, 3
    Jane, Star Wars, 2
    Bill, Titanic, 3
    Se pueden convertir a las siguientes calificaciones Matriz:
    Inserte la descripción de la imagen aquí
    para implementar mejor el sistema de recomendación, necesitamos modelar esta matriz dispersa. Generalmente, se puede utilizar la descomposición de la matriz (o la compleción de la matriz).

Específicamente, encuentre dos matrices de baja dimensión para que su producto sea la matriz original. Entonces, esta es también una técnica de reducción de dimensionalidad. Suponiendo que los números de nuestros usuarios y elementos son U e I respectivamente, la dimensión de la correspondiente matriz "usuario-elemento" es U × I, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
para encontrar la k-dimensional (orden inferior) similar a la matriz "usuario-elemento" ) Matriz, y finalmente se requieren las siguientes dos matrices: una matriz U × k-dimensional para representar a los usuarios, y una matriz k × I-dimensional para representar elementos. Estas dos matrices también se denominan matrices factoriales . Su producto es una aproximación de la matriz de calificación original. Vale la pena señalar que la matriz de calificación original suele ser muy escasa, pero la matriz de factores es densa (rango completo), como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Este tipo de modelo intenta encontrar las características ocultas correspondientes a la estructura de comportamiento interno de la matriz "usuario-ítem" ( Estos se expresan como matrices de factores), por lo que también se denominan modelos de características ocultas. Las características o factores implícitos no se pueden explicar directamente, pero pueden indicar ciertos significados , como la preferencia por cierto director, tipo, estilo o ciertos actores de la película.

Dado que es un modelado directo de la matriz "usuario-elemento", la predicción con estos modelos es relativamente sencilla: para calcular la calificación esperada de un usuario determinado para un elemento, seleccione las filas correspondientes de la matriz de factores de usuario y la matriz de factores de elementos ( Vector de factor de usuario) y columna (vector de factor de artículo), y luego calcule el producto escalar de los dos. Como se muestra en la figura siguiente:
Inserte la descripción de la imagen aquí
Para calcular la similitud entre elementos, se puede utilizar el método de medición de similitud utilizado en el modelo de vecino más cercano. La diferencia es que el vector de factor de elemento se puede utilizar directamente aquí para convertir el cálculo de similitud en el cálculo de la similitud entre los dos vectores de factor de elemento, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
La ventaja del modelo de factorización es que una vez establecido el modelo, la recomendación La solución es relativamente sencilla. Por lo que el rendimiento de este tipo de modelos suele ser muy bueno. Pero la desventaja puede ser que la selección de la cantidad de factores es difícil y, a menudo, se determina combinando negocios específicos y volumen de datos. En términos generales, el rango de valores del factor está entre 10 y 200.

Descripción general del principio del algoritmo ALS

Inserte la descripción de la imagen aquí
El concepto de sobreajuste:
al entrenar un modelo, el objetivo es minimizar el error del modelo, es decir, cuanto menor sea el error, mejor se ajustará el modelo. Pero a veces, si el ajuste es demasiado bueno, provocará un ajuste excesivo. El resultado de un ajuste excesivo: el modelo es preciso en el entorno experimental, pero no es exacto una vez que se coloca en el entorno de producción. Esta situación es un ajuste excesivo.

ALS es la abreviatura de mínimos cuadrados alternos. En el aprendizaje automático, ALS se refiere específicamente a un algoritmo de recomendación colaborativa que utiliza mínimos cuadrados alternos. Infiere las preferencias de cada usuario y recomienda productos adecuados a los usuarios a través de la puntuación de los productos por parte de todos los usuarios observados. Por ejemplo, la siguiente figura:
Inserte la descripción de la imagen aquí
cada fila de esta matriz representa un usuario (u1, u2, u3), cada columna representa un producto (v1, v2, v3) y la calificación del usuario es de 1 a 5 puntos. Esta matriz solo muestra los puntajes observados, necesitamos especular sobre los puntajes que no se observaron. Por ejemplo (u1, v3) ¿cuánto es la puntuación? Si usa Sudoku para resolver este problema, puede obtener el único resultado. Debido a que las reglas del Sudoku son muy fuertes, cada vez que se agrega una regla, el grado de libertad de todo el sistema disminuye en un orden de magnitud. Cuando cumplimos todas las reglas, el grado de libertad de todo el sistema cae a 1 y se obtiene el único resultado. Para la matriz de puntuación anterior, si no agregamos ninguna condición, es decir, las puntuaciones son independientes entre sí, no podemos obtener la puntuación de (u1, v3). Por lo tanto, con base en esta matriz de puntuación del usuario, necesitamos proponer una hipótesis razonable que limite su grado de libertad, de modo que podamos adivinar la puntuación desconocida observando la puntuación existente.

El núcleo de ALS es tal suposición: la matriz de puntuación es aproximadamente de rango bajo. En otras palabras, una matriz de puntuación U I se puede aproximar mediante el producto de las dos pequeñas matrices U (U k) e I (k * I) descompuestas . Este es el método de factorización matricial de ALS.

Idea de realización del principio del algoritmo ALS

La
forma de ser considerado como un factor en la matriz factorial es el algoritmo numérico ALS para resolver el problema, que requiere unos objetivos claros y cuantificables, ALS y la reconstrucción del error cuadrático con cada elemento a cuantificar.

Debido a que hay una gran cantidad de incógnitas en la matriz de calificación original que queremos inferir, este error de reconstrucción contiene incógnitas. La solución del algoritmo ALS es muy sencilla: solo calcula el error de reconstrucción de la puntuación conocida.

El principio de realización de ALS es resolver iterativamente una serie de problemas de regresión por mínimos cuadrados. En cada iteración, una de la matriz de factores de usuario o la matriz de factores del artículo es fija, y luego la matriz fija y los datos de calificación se utilizan para actualizar la otra matriz. Después de eso, la matriz actualizada se fija y luego se actualiza otra matriz. Itere de esta manera hasta que el modelo converja (o el número preestablecido de iteraciones).

Por lo tanto, en el algoritmo ALS de MLlib, la matriz U o I se genera aleatoriamente. En cada iteración, una de la matriz de factor de usuario o la matriz de factor de elemento es fija, y luego la matriz fija y los datos de calificación se utilizan para actualizar la otra. Matrix, y luego use el objeto de matriz obtenido para encontrar la matriz aleatoria. Los dos últimos objetos se calculan de forma iterativa entre sí hasta que el modelo converge.

Derivación del algoritmo ASL

La función de pérdida de ASL para la factorización de matriz explícita:
El filtrado colaborativo en Spark's Mlib cita los artículos principales del algoritmo ALS. Para obtener más información, consulte:
http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html

Filtrado colaborativo - API basada en RDD
• Filtrado colaborativo
• Retroalimentación explícita vs. implícita
• Escalado del parámetro de regularización
• Ejemplos
• Tutorial
Filtrado
colaborativo El filtrado colaborativo se usa comúnmente para sistemas de recomendación. Estas técnicas tienen como objetivo completar las entradas que faltan en una matriz de asociación de usuario-elemento. spark.mllib actualmente admite el filtrado colaborativo basado en modelos, en el que los usuarios y los productos se describen mediante un pequeño conjunto de factores latentes que se pueden utilizar para predecir las entradas que faltan. spark.mllib usa el algoritmo de mínimos cuadrados alternos (ALS) para aprender estos factores latentes. La implementación en spark.mllib tiene los siguientes parámetros:
• numBlocks es el número de bloques utilizados para paralelizar el cálculo (establecido en -1 para autoconfigurar).
• rango es el número de funciones que se utilizarán (también denominado número de factores latentes).
• iteraciones es el número o alfa es un parámetro aplicable a la variante de retroalimentación implícita de ALS que gobierna la confianza de referencia en las observaciones de preferencias.

Sobreajuste

Después de recopilar los datos de la muestra, estableceremos una ecuación objetivo que se ajuste a los datos de la muestra. Generalmente, esperamos que el modelo se ajuste a las muestras tanto como sea posible. Pero si el ajuste es demasiado bueno, se producirá un sobreajuste.
Si se produce un ajuste excesivo, conducirá a: el modelo funciona bien en el entorno experimental, pero el modelo funciona mal en el entorno de producción y pierde valor práctico.

Inserte la descripción de la imagen aquí
Puede verse que aunque los datos de la muestra están completamente ajustados en a, la precisión de clasificación de los datos de prueba en b es muy pobre. Aunque c no se ajusta completamente a los datos de la muestra, la precisión de clasificación de los datos de prueba en d es muy alta. El problema de sobreajuste suele deberse a la falta de datos de entrenamiento.

Medios para solucionar el sobreajuste

  • Introducir parámetros de regularización
  • Cambiar modelo, como modo integrado (por ejemplo)

Almacenamiento y carga de modelos

Almacenamiento de modelos

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.mllib.recommendation.Rating
import org.apache.spark.mllib.recommendation.ALS

object Driver2 {
  
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("movie")
    val sc=new SparkContext(conf)
    
    val data=sc.textFile("d://ml/u.data")

    val movieData=sc.textFile("d://ml/u.item")
    
    val ratings=data.map { line =>{
      
      val infos=line.split("\t")
      val userId=infos(0).toInt
      val movieId=infos(1).toInt
      val score=infos(2).toDouble
      Rating(userId,movieId,score)
    } }
    
    val model=ALS.train(ratings,50,10,0.01)
    
    model.save(sc, "d://ml/")
  }
}

Carga del modelo

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.sql.SQLContext
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel


object Driver3 {
  
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setMaster("local").setAppName("movie")
    val sc=new SparkContext(conf)
    
    val model=MatrixFactorizationModel.load(sc,"d://ml/")
    
    val result=model.recommendProducts(789,10)
    
    result.foreach{println}
  }
}

Darse cuenta de la recomendación de artículos

Hay dos métodos recomendados para el sistema de recomendación

  • Recomendaciones basadas en el usuario: el modelo ALS de Spark solo proporciona recomendaciones basadas en el usuario
  • Recomendación basada en elementos: por ejemplo, un usuario ha visto la película número 123 y luego solicita recomendar películas relacionadas con la película 123.
    Este método basado en elementos para recomendar elementos requiere que el programador lo implemente (no se proporciona el modelo ALS de Spark)
    . Ideas
//1. 核心的需求 要计算出物品和物品的相似度。由此引出:需要获取物品因子矩阵
//获取用户的因子矩阵
val userFactors=model.userFeatures
//获取物品的因子矩阵(主要用这个)
//RDD[(itemId,item的因子数组)]
val itemFactors=model.productFeatures
//2比如我们想基于123号这部电影做推荐
//所以先获取123号这部电影的因子值
//下面的代码表示以电影id属性为key,具体找123号的数据
val movie123Factor=itemFactors.keyBy{x=> x._1}.lookup(123).head._2
//基于123号电影推荐10部电影
//计算出其它电影和123号电影的相似度(向量之间的夹角余弦来计算)
//然后按相似度做降序排序,取出前10部推荐。
val result=itemFactors.map{case(movieId,factor)=>
	//factor和movie123Factor的余弦距离
	val cos=cosArray(movie123Factor,factor)
	//返回(当前电影id,与123号电影的夹角余弦)
	(movieId,cos)
}
val movie123Top10=result.sortBy{x=>x._2}.take(11).drop(1)
def cosArray(a1:Array[Double],a2:Array[Double])={
	val a1a2=a1 zip a2
	val a1a2Fenzi=a1a2.map{x=>x._1*x._2}.sum
	val a1Fenmu=Math.sqrt(a1.map{x=>x*x}.sum)
	val a2Fenmu=Math.sqrt(a2.map{x=>x*x}.sum)
	val a1a2Cos=a1a2Fen/(a1Fenmu*a2Fenmu)
	a1a2Cos
}

Problema de arranque en frío del sistema recomendado

Se refiere a la falta de datos de preferencia del usuario cuando se establece el sistema de recomendación, o para un nuevo usuario (los datos de preferencia del usuario no están en segundo plano en este momento), el problema que ocurre se denomina arranque en frío del sistema de recomendación.
¿Cómo resolver?

  • Solución 1 Cuando se
    registran nuevos usuarios, recomiendan contenido relevante de acuerdo con la dirección de interés elegida
  • Solución 2
    Hacer recomendaciones basadas en la información de registro del usuario
  • Solución 3
    recomendada según las clasificaciones de búsqueda más populares
  • Solución 4
    De acuerdo con los productos que navega el usuario, se recomiendan los productos agregados al carrito de compras y los productos comprados para los artículos.

Arranque en frío del artículo

Cuando un nuevo producto está en los estantes, el producto generalmente se recomendará en la página de inicio. El propósito es permitir que más usuarios naveguen y compren el producto, para acumular los datos de puntuación del producto.
Además, para un producto nuevo, inicialmente puede puntuarse artificialmente. El inicial fue inexacto. Pero a medida que aumenta el número de puntuación (uso), la puntuación se acercará al valor real.

Arranque en frío del sistema

Primero resuelva el problema de la fuente de datos

  • Rastrear datos a través de la tecnología de rastreo
  • Comprar datos a través de sitios de datos
  • Acumulación de operación de plataforma propia

Supongo que te gusta

Origin blog.csdn.net/yasuofenglei/article/details/100889423
Recomendado
Clasificación