Scikit-learn: Algoritmos de aprendizaje asociativo

Creado en 13 dic. 2013  ·  32Comentarios  ·  Fuente: scikit-learn/scikit-learn

Noté que no había algoritmos de aprendizaje asociativo como:

Algoritmo Apiori
Algoritmo de clasificación de equivalencia (Eclat)
PrefijoSpan
FP-Crecimiento

Todos ellos se utilizan para detectar la combinación de patrones en un conjunto de datos.

Algunos de ellos son un poco difíciles de implementar, diría que unas 200 líneas de código.

New Feature

Comentario más útil

Hola,

Tengo algunos conocimientos de algoritmo de crecimiento Apriori y FP. Me gustaría trabajar en este tema. ¿Hay alguien más que ya esté trabajando en ello? Si es así, también me gustaría ayudar con eso.

Todos 32 comentarios

No estoy seguro de que la minería de conjuntos de elementos esté dentro del alcance de sklearn. Solo conozco el algoritmo a priori pero sé que hay otros más avanzados. Supongo que uno podría incluirlos en la API usando matrices de indicadores dispersos, pero de alguna manera parecen muy separados del resto de sklearn.

Se pueden utilizar como precursores del algoritmo CBA, un algoritmo de árbol de decisión para datos categóricos.

No hay árboles de decisión (ni ningún otro algoritmo) para datos categóricos sin una transformación en caliente en sklearn.

Creo que la minería frecuente de artículos debería considerarse OT. Ninguno de los desarrolladores principales trabaja en esa área, por lo que es probable que cualquier código enviado quede huérfano. Hemos estado tratando de reducir el alcance de la biblioteca por esta misma razón.

Creo que la minería frecuente de artículos debería considerarse OT. Nada del núcleo
los desarrolladores trabajan en esa área, por lo que es probable que cualquier código enviado se convierta en
huérfano.

Además, creo que el tipo de patrones de código será muy diferente.
entonces lo que tenemos actualmente.

No digo que no sea interesante, solo digo que la herramienta debería ser una
uno diferente.

Hola,

Tengo algunos conocimientos de algoritmo de crecimiento Apriori y FP. Me gustaría trabajar en este tema. ¿Hay alguien más que ya esté trabajando en ello? Si es así, también me gustaría ayudar con eso.

Cerrando este tema. Creo que el aprendizaje por asociación debería crearse un prototipo en un paquete separado; si resulta que el código y las interfaces son lo suficientemente similares a los nuestros, podemos considerar el código para fusionarlo con scikit-learn.

¡Triste decisión!

Cerrando este tema. Creo que el aprendizaje por asociación debería crearse un prototipo en un paquete separado; si resulta que el código y las interfaces son lo suficientemente similares a los nuestros, podemos considerar el código para fusionarlo con scikit-learn.

Decisión muy razonable :)

:+1: para el enfoque
:-1: por excluir toda una clase de algoritmos de aprendizaje no supervisados ​​bien conocidos

@joernhees , ¿podría explicar cómo esta formulación de aprendizaje no supervisado encaja incluso en la API scikit-learn? Si no es fácil, entonces probablemente pertenezca al alcance de un proyecto diferente que pueda establecer su propia API. Creo que @larsmans lo dejó bastante claro arriba, y no merece una respuesta sarcástica.

Lo siento si esto me pareció sarcástico, esa no era mi intención.

Originalmente llegué aquí buscando algoritmos de aprendizaje de reglas de asociación y solo esperaba encontrarlos en sklearn (ya que es una colección bastante impresionante de algoritmos de aprendizaje automático y generalmente encuentro la mayoría de las cosas que necesito en él (muchas gracias por eso)).

Después de leer este hilo estaba a la vez: complacido y decepcionado, y quería expresar ambos:

  • Me complace ver que toma la buena decisión de ingeniería de software para enfocarse (lo cual es difícil).
  • Decepcionado porque la minería de reglas de asociación no es parte de esto y hay otra persona que lo extraña. Como dije, puede verse como una clase propia de algoritmos de aprendizaje no supervisados ​​y es bastante exitoso (amazon). Tal vez sea demasiada extracción de datos y demasiado poco aprendizaje automático para sklearn, pero solo gírelo un poco y obtendrá el aprendizaje de reglas, que es bastante útil para la predicción explicable de la próxima acción que un actor podría tomar, por ejemplo.

Tiene razón en que la minería de reglas de asociación no encaja completamente en la API actual. Conceptualmente, lo veo en algún lugar entre las técnicas de reducción de dimensionalidad y la agrupación jerárquica. En cuanto a la API, probablemente sea lo más cercano a la agrupación jerárquica.

Como dos líneas probablemente fueron demasiado cortas para expresar eso de una manera amistosa, acepte mis disculpas.

No hay problema. Definitivamente hay implementaciones de Python a priori.
Construir una buena biblioteca que recopile alternativas y les dé
una API consistente (similar a scikit-learn) parece un buen proyecto... creo
los clasificadores basados ​​en la minería de reglas de asociación bien pueden estar en el ámbito de
scikit-learn, pero a menos que sean lo suficientemente populares y estandarizados
ya, corre el riesgo de convertirse en código sin mantenedor.

El 24 de septiembre de 2014 a las 07:52, Jörn Hees [email protected] escribió:

Lo siento si esto me pareció sarcástico, esa no era mi intención.

Originalmente llegué aquí buscando el aprendizaje de reglas de asociación
algoritmos y esperaba encontrarlos en sklearn (ya que es un
increíble colección de algoritmos de aprendizaje automático y, por lo general, encuentro la mayoría
cosas que necesito en él (muchas gracias por eso)).

Después de leer este hilo estaba a la vez: complacido y decepcionado, y quería
para expresar ambos:

  • Me complace ver que toma la buena decisión de ingeniería de software.
    para enfocar (que es difícil).
  • Decepcionado de que la minería de reglas de asociación no sea parte de esto y
    hay otra persona por ahí que lo extraña. Como dije, se puede ver como
    una clase propia de algoritmos de aprendizaje no supervisados ​​y es bastante exitoso
    (Amazonas). Tal vez sea demasiada minería de datos y demasiado poca
    aprendizaje automático para sklearn, pero solo gírelo un poco y obtendrá la regla
    aprendizaje que es bastante útil para la predicción explicable del próximo
    acción que un actor podría tomar, por ejemplo.

Tiene razón en que la minería de reglas de asociación no encaja completamente en el
API actual. Conceptualmente lo veo en algún lugar entre la dimensionalidad
técnicas de reducción y agrupamiento jerárquico. En cuanto a la API, es probable que
más cercano a la agrupación jerárquica.

Como dos líneas probablemente eran demasiado cortas para expresar eso de una manera amistosa,
Por favor, acepte mis disculpas.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment-56595906
.

Creo que esto valdría la pena, este artículo: Comparación de reglas de asociación y árboles de decisiónpara la predicción de enfermedades demuestra claras ventajas en comparación con los árboles de decisión.

Esta publicación de blog incluye el código de Python para A-Priori, podría ser interesante intentar implementar estos algoritmos en algún momento. ¿Hay algún trabajo en un paquete de creación de prototipos por separado?

Ninguno hasta ahora. ¿Tal vez puedas intentar reunir apoyo para esto en la lista de correo?

Por mi parte, estoy decepcionado de que estos algoritmos no estén implementados en sklearn. Mi asesor es Jiawei Han, el autor de FP-growth y PrefixSpan, y la cantidad de citas de ambos artículos ("Extracción de patrones frecuentes sin generación de candidatos" y "Extracción de patrones secuenciales por crecimiento de patrones") es prueba de que ambos esos algoritmos tienen un lugar en sklearn.

Solo porque scikit-learn tiene un criterio de popularidad para incluir
algoritmos, eso no significa que se deban incluir todos los algoritmos populares.
Scikit-learn debe tener un alcance limitado, y esto simplemente está demasiado lejos de
problemas de clasificación y de regresión (aunque me interesaría
ver un clasificador basado en asociaciones exitoso implementado).

Siéntase libre de sentirse decepcionado, pero dudo mucho que las técnicas ARL
incluirse directamente en scikit-learn en un futuro previsible (aunque
otro proyecto puede proporcionarles una API similar a scikit-learn). Existen
otros proyectos donde estos algoritmos son más apropiados, pero si estás
decepcionado con ellos también, ve a hacer el tuyo propio.

El 25 de marzo de 2015 a las 09:11, Henry [email protected] escribió:

Por mi parte, estoy decepcionado de que estos algoritmos no estén implementados en
aprender Mi asesor es Jiawei Han, el autor de FP-growth y PrefixSpan,
y el número de citas para ambos documentos (
"Minería de patrones frecuentes sin generación de candidatos" y "Minería
patrones secuenciales por patrón de crecimiento") es una prueba de que ambos
los algoritmos tienen un lugar en sklearn.


Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment-85713120
.

Los algoritmos de aprendizaje de asociación están simplemente demasiado lejos de los problemas de clasificación y regresión. Aunque podemos considerar el algoritmo de minería de patrón/conjunto de elementos frecuentes como un algoritmo de generación de características como countvectorizer y tfidfvectorizer. Esos patrones frecuentes pueden usarse en cualquier algoritmo clasificador como características de entrada, y serán mucho más intuitivos y algo diferentes que aplicar el aprendizaje del árbol de decisión basado en la ganancia de información.

Esa es una opción. Kudo y Matsumoto muestran cómo probar un subconjunto del polykernel con PrefixSpan.

Puedo buscar y verificar la documentación de scikit-learn, pero le preguntaré directamente si esta opción (Kudo y Matsumoto) está disponible en scikit-learn.

No. Solo digo que podría ser.

+1 para el algoritmo Apiori

Tenga en cuenta que hay algoritmos de ML que dependen de listas de elementos frecuentes como entrada. Por ejemplo, consulte las listas de reglas bayesianas de Cynthia Rudin (cf, http://www.stat.washington.edu/research/reports/2012/tr609%20-%20old.pdf).

Considere un conjunto de datos con una variable de respuesta a predecir para la cual todas las características son indicadores binarios (quizás como resultado de una codificación en caliente). Podemos considerar una fila de conjunto de entrenamiento como una "canasta" y la presencia de una función para esa fila de conjunto de entrenamiento como un "elemento" dentro de la canasta. Por lo tanto, los conjuntos de datos bastante genéricos podrían operarse mediante apriori, FP-growth y otras técnicas frecuentes de minería de conjuntos de elementos.

En el algoritmo de lista de reglas bayesianas, los conjuntos de elementos frecuentes se evalúan y, finalmente, se crea una estructura if-then-else a partir de ellos. Consulte el documento de referencia para obtener más detalles.

El punto es que tener enfoques de minería de conjuntos de elementos disponibles podría admitir clasificadores y regresores, ya dentro del alcance de sklearn, no solo el análisis de la canasta de mercado.

Esa es la motivación para que tales algoritmos estén disponibles en scipy, tal vez. De
Por supuesto, si un clasificador o similar que cumple con la inclusión de scikit-learn
se implementaron directrices con la minería de conjuntos de elementos, tiene buenas posibilidades de
inclusión, a priori y todo.

El 19 de abril de 2016 a las 01:14, rmenich [email protected] escribió:

Tenga en cuenta que hay algoritmos ML que dependen de listas de elementos frecuentes como
aporte. Por ejemplo, véase Listas de reglas bayesianas de Cynthia Rudin (cf.
http://www.stat.washington.edu/research/reports/2012/tr609%20-%20old.pdf).

Considere un conjunto de datos con una variable de respuesta a predecir para la cual todos
las características son indicadores binarios (quizás como resultado de
codificación en caliente). Podemos considerar una fila de conjuntos de entrenamiento como una "canasta" y
la presencia de una característica para que la fila del conjunto de entrenamiento sea un 'elemento' dentro
la cesta. Por lo tanto, los conjuntos de datos bastante genéricos podrían ser operados por
a priori, FP-growth y otras técnicas frecuentes de minería de elementos.

En el algoritmo de lista de reglas bayesianas, los conjuntos de elementos frecuentes se evalúan
y eventualmente se crea una estructura if-then-else a partir de ellos. Ver el
documento de referencia para más detalles.

El punto es que tener enfoques de minería de elementos frecuentes disponibles
podría admitir clasificadores y regresores --- ya dentro del alcance de
sklearn --- no solo análisis de canasta de mercado.


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment-211424583

No sé cuánto ha cambiado sklearn desde que comenzó esta conversación, pero hay un paquete completo de "clúster" que tampoco es regresión/clasificación. Creo que muchos en sklearn agradecerían una buena implementación de los últimos algoritmos para reglas de asociación y conjuntos de elementos frecuentes.

La agrupación en clústeres es muy similar a la clasificación, pero sin supervisión, y ha sido durante mucho tiempo parte de scikit-learn. La minería de reglas de asociación permanece fuera de las tareas principales en las que se enfoca scikit-learn y no se ajusta perfectamente a su API, pero podría ser relevante en el contexto de un clasificador basado en asociaciones.

"últimos algoritmos" no es de lo que se trata scikit-learn. Consulte nuestras preguntas frecuentes .

Sería bueno no tener que repetirme.

@actsasgeek si desea implementar la minería de reglas de asociación de una manera compatible con scikit-learn, estaremos encantados de incluirlo en scikit-learn-contrib: https://github.com/scikit-learn-contrib/scikit-learn -contrib/blob/master/README.md

Espero que mi pregunta repetitiva no le moleste, ya que veo un sentimiento opuesto a la adición de minería de reglas de asociación en una librería tan buena como scikit learn. Solo quiero actualizarme, ¿hay algún conjunto de elementos frecuentes implementado en scikit learn después de tres años de la creación de este subproceso?

La minería de reglas de asociación está fuera del alcance del aprendizaje automático, y
ciertamente fuera del alcance de scikit-learn.

La clasificación basada en reglas de asociación es el único contexto en el que
lo consideraría, y entonces todavía tendría que ser una venta difícil.

El 17 de agosto de 2017 a las 15:59, saria85 [email protected] escribió:

Espero que mi pregunta repetitiva no te moleste, ya que veo un sentimiento de
opuesto a la adición de minería de reglas de asociación en una librería tan buena como
scikit aprender. Solo quiero que me actualicen, ¿hay algún conjunto de elementos frecuentes?
implementado en scikit learn después de tres años de la creación de este
hilo?.


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment-322976532 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAEz67fCICLgV-3OpYiV3ErpJSW0mobgks5sY9a4gaJpZM4BT5PS
.

Para aquellos que estén interesados,

Una biblioteca llamada mlxtend implementa el algoritmo a priori:
http://rasbt.github.io/mlxtend/api_subpackages/mlxtend.frequent_patterns/

sí, todos lo necesitan, por lo que será genial tenerlo en scikit-learn.
un enlace más para usarlo en ML
http://www2.cs.uh.edu/~ordonez/pdfwww/w-2006-HIKM-ardtmed.pdf
Comparación de reglas de asociación y árboles de decisión
para la predicción de enfermedades

Eso es minería de patrones, no ML

¿Fue útil esta página
0 / 5 - 0 calificaciones