redes profundo neuronales learning ejemplos convolucionales aprendizaje machine-learning nlp recommendation-engine

machine-learning - profundo - ejemplos de deep learning



¿Cómo entrenar a un clasificador con solo datos positivos y neutrales? (7)

Mi pregunta: ¿cómo entrenar a un clasificador con solo datos positivos y neutrales?

Estoy construyendo un sistema de recomendación de artículos personalizado para fines educativos. La información que uso es de Instapaper.

Conjuntos de datos

Solo tengo datos positivos: - Artículos que he leído y me han gustado, independientemente del estado de lectura / no leído

Y datos neutrales (porque he expresado interés en ello, pero de todos modos puede que no me guste más): - Artículos que no se han leído - Artículos que he leído y marcado como leídos, pero no me gustó.

Los datos que no tengo son datos negativos: - Artículos que no envié a Instapaper para leerlos más tarde (no estoy interesado, aunque he navegado por esa página / artículo) - Artículos en los que quizás no haya hecho clic, pero Podría haberlo archivado o no.

Mi problema

En tal problema, los datos negativos son básicamente faltantes. He pensado en la (s) siguiente (s) solución (es) pero todavía no me resolví:

1) Alimentar una cantidad de datos negativos al clasificador. Pros: datos negativos inmediatos para enseñar al clasificador. Contras: a medida que aumenta el número de artículos que me gustan, el efecto de datos negativos en el clasificador disminuye.

2) Convierta los datos "neutrales" en datos negativos. Pros: ahora tengo todos los datos positivos y (nuevos) negativos que necesito. Contras: a pesar de que los datos neutrales son de poco interés para mí, me gustaría obtener recomendaciones sobre tales artículo, pero tal vez como una clase de menor valor.


Como se explica here , puede usar LibSvm , específicamente la opción SVM de una sola clase.

¡Espero eso ayude!


El algoritmo Spy EM resuelve exactamente este problema.

S-EM es un sistema de aprendizaje o clasificación de texto que aprende de un conjunto de ejemplos positivos y no etiquetados (sin ejemplos negativos). Se basa en una técnica de "espionaje", ingenuo algoritmo Bayes y EM.

La idea básica es combinar tu conjunto positivo con un montón de documentos aleatorios, algunos de los cuales tienes. Inicialmente trata todos los documentos aleatorios como la clase negativa, y aprende un clasificador de bayes ingenuo en ese conjunto. Ahora, algunos de esos documentos rastreados serán realmente positivos, y usted puede volver a etiquetar de manera conservadora cualquier documento que tenga una calificación más alta que la puntuación más baja presentada como verdadero documento positivo. Luego itera este proceso hasta que se estabilice.


Haz dos clasificadores binarios.

1 -> "liked" or not 2 -> "neutral" or not

También tiene la opción de encadenarlos para evitar tener un caso en el que algo sea "querido" y "neutral". Esto te permitirá clasificar el contenido.

Como ha indicado la otra respuesta de @ThierryS, otra opción es hacer una recomendación que le permita sugerir contenido que otros usuarios similares hayan identificado como "me gusta" o "neutral", aprovechando así el aspecto social.


Lo que estás tratando de hacer es más un sistema de recomendación que un clasificador, creo.

El estado del arte es usar el contenido de cada artículo y crear una bolsa de palabras . Desde aquí puede calcular la distancia desde diferentes artículos. Los artículos con similitudes cercanas (usando clustering o similitudes como Pearson, Tanimoto) serán los que probablemente querrá leer. Esta es la forma más fácil de tener algo rápido.

Por supuesto, hay métodos más sofisticados y precisos.



Si desea alejarse de un ejemplo de aprendizaje automático: TF-IDF puede darle una recomendación ponderada de solo-positiva de artículos similares a los artículos que le han gustado (o visto) y es muy común para este caso de uso.

Los métodos más complejos de no aprendizaje incluyen LSA para determinar la similitud de documentos, pero no es trivial de implementar, y la construcción del ''espacio'' de LSA no escala por encima de cientos o miles de documentos sin grandes cantidades de potencia de procesamiento.

Ambos se encuentran en el campo de la Lingüística Computacional.

¡Buena suerte!


Si tiene muchos comentarios positivos de diferentes usuarios, tiene un escenario de filtrado colaborativo bastante típico.

Estas son algunas soluciones de CF:

  • kNN (basado en el usuario o en el elemento), por ejemplo, utilizando la similitud Cosine
  • un enfoque de factorización matricial (ambos documentos tienen ideas similares)
    • Y. Hu, Y. Koren, C. Volinsky: Filtrado colaborativo para conjuntos de datos de comentarios implícitos. ICDM 2008.
    • R. Pan, Y. Zhou, B. Cao, NN Liu, RM Lukose, M. Scholz, Q. Yang: Filtrado colaborativo de una clase, ICDM 2008.
    • ambos trabajos usan algoritmos de aprendizaje similares a ALS; por supuesto, también podría usar SGD donde muestrea de los ejemplos negativos / no observados
  • otro enfoque de factorización matricial (descargo de responsabilidad: soy coautor de este trabajo)
    • Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, Lars Schmidt-Thieme: BPR: Ranking bayesiano personalizado de comentarios implícitos. UAI 2009.

Existen implementaciones disponibles públicamente de esos algoritmos, por ejemplo

Por cierto, si usa un clasificador para tales problemas, eche un vistazo a la literatura sobre aprendizaje solo-positivo, por ejemplo, http://users.csc.tntech.edu/~weberle/Fall2008/CSC6910/Papers/posonly.pdf