Scikit-learn: Algorithmes d'apprentissage associatif

Créé le 13 déc. 2013  ·  32Commentaires  ·  Source: scikit-learn/scikit-learn

J'ai remarqué qu'il n'y avait pas d'algorithmes d'apprentissage associatif tels que :

Apiori Alogorithm
Algorithme de classification d'équivalence (Eclat)
PrefixSpan
FP-Croissance

Tous sont utilisés pour détecter une combinaison de modèles dans un ensemble de données.

Certains d'entre eux sont un peu difficiles à mettre en œuvre, je dirais environ 200 lignes de code ?

New Feature

Commentaire le plus utile

Salut,

J'ai une certaine connaissance de l'algorithme de croissance Apriori et FP. J'aimerais travailler sur cette question. Y a-t-il quelqu'un d'autre qui travaille déjà dessus, et si c'est le cas, j'aimerais aussi aider avec ça.

Tous les 32 commentaires

Je ne suis pas sûr que l'extraction d'ensembles d'objets soit dans le cadre de sklearn. Je ne connais que l'algorithme a priori mais je sais qu'il y en a des plus avancés. Je suppose que l'on pourrait les intégrer dans l'API en utilisant des matrices d'indicateurs clairsemées, mais d'une manière ou d'une autre, elles semblent très disjointes du reste de sklearn.

Ils peuvent être utilisés comme précurseur de l'algorithme CBA, un algorithme d'arbre de décision pour les données catégorielles

Il n'y a pas d'arbres de décision (ou tout autre algorithme) pour les données catégorielles sans une transformation à chaud dans sklearn.

Je pense que l'extraction fréquente d'objets devrait être considérée comme OT. Aucun des principaux développeurs ne travaille dans ce domaine, donc tout code soumis est susceptible de devenir orphelin. Nous avons essayé de réduire la portée de la bibliothèque pour cette raison.

Je pense que l'extraction fréquente d'objets devrait être considérée comme OT. Aucun du noyau
développeurs travaillent dans ce domaine, donc tout code soumis est susceptible de devenir
orphelin.

De plus, je pense que le type de modèles de code sera très différent
puis ce que nous avons actuellement.

Je ne dis pas que ce n'est pas intéressant, je dis juste que l'outil doit être un
différent.

Salut,

J'ai une certaine connaissance de l'algorithme de croissance Apriori et FP. J'aimerais travailler sur cette question. Y a-t-il quelqu'un d'autre qui travaille déjà dessus, et si c'est le cas, j'aimerais aussi aider avec ça.

Fermeture de ce sujet. Je pense que l'apprentissage par association devrait être prototypé dans un package séparé; s'il s'avère que le code et les interfaces sont suffisamment similaires aux nôtres, nous pouvons envisager de fusionner le code avec scikit-learn.

Triste décision !

Fermeture de ce sujet. Je pense que l'apprentissage par association devrait être prototypé dans un package séparé; s'il s'avère que le code et les interfaces sont suffisamment similaires aux nôtres, nous pouvons envisager de fusionner le code avec scikit-learn.

Décision très raisonnable :)

:+1 : pour la mise au point
:-1 : pour exclure toute une classe d'algorithmes d'apprentissage non supervisés bien connus

@joernhees pourriez-vous expliquer comment cette formulation d'apprentissage non supervisé s'intègre même dans l'API scikit-learn ? Si ce n'est pas facile, il appartient probablement à un projet différent qui peut établir sa propre API. Je pense que @larsmans l'a clairement indiqué ci-dessus, et cela ne mérite pas une réponse sarcastique.

désolé si c'est apparu comme sarcastique, ce n'était pas mon intention.

Je suis arrivé ici à l'origine à la recherche d'algorithmes d'apprentissage de règles d'association et je m'attendais à les trouver dans sklearn (car c'est une collection assez impressionnante d'algorithmes d'apprentissage automatique et généralement je trouve la plupart des choses dont j'ai besoin (un grand merci pour cela)).

Après avoir lu ce fil, j'étais à la fois : satisfait et déçu, et je voulais exprimer les deux :

  • Heureux de voir que vous prenez la bonne décision en matière d'ingénierie logicielle pour vous concentrer (ce qui est difficile).
  • Déçu que l'extraction de règles d'association n'en fasse pas partie et qu'il y ait une autre personne qui en manque. Comme je l'ai dit, cela peut être considéré comme une classe propre d'algorithmes d'apprentissage non supervisé et c'est assez réussi (amazon). C'est peut-être un peu trop d'exploration de données et un peu trop peu d'apprentissage automatique pour sklearn, mais il suffit de le tordre un peu et vous obtenez un apprentissage des règles qui est très utile pour la prédiction explicable de la prochaine action qu'un acteur pourrait prendre par exemple.

Vous avez raison de dire que l'exploration de règles d'association ne s'intègre pas entièrement dans l'API actuelle. Conceptuellement, je le vois quelque part entre les techniques de réduction de la dimensionnalité et le clustering hiérarchique. En ce qui concerne l'API, c'est probablement le plus proche du clustering hiérarchique.

Comme deux lignes étaient probablement trop courtes pour exprimer cela de manière amicale, veuillez accepter mes excuses.

aucun problème. Il existe certainement des implémentations Python d'apriori.
Construire une bonne bibliothèque qui rassemble des alternatives et leur donne
une API cohérente (scikit-learn-like) semble être un beau projet ... je pense
les classificateurs basés sur l'extraction de règles d'association pourraient bien être à la portée de
scikit-learn, mais à moins qu'ils ne soient suffisamment populaires et standardisés
déjà, il court le risque de devenir du code sans responsable.

Le 24 septembre 2014 à 07h52, Jörn Hees [email protected] a écrit :

désolé si c'est apparu comme sarcastique, ce n'était pas mon intention.

Je suis arrivé ici à l'origine à la recherche d'apprentissage des règles d'association
algorithmes et je m'attendais à les trouver dans sklearn (car c'est un joli
collection impressionnante d'algorithmes d'apprentissage automatique et généralement je trouve la plupart
choses dont j'ai besoin (un grand merci pour cela)).

Après avoir lu ce fil, j'étais à la fois : satisfait et déçu, et je voulais
exprimer à la fois :

  • Heureux de voir que vous prenez la bonne décision en matière d'ingénierie logicielle
    se concentrer (ce qui est difficile).
  • Déçu que l'extraction de règles d'association n'en fasse pas partie et
    il y a une autre personne là-bas à qui ça manque. Comme je l'ai dit, cela peut être considéré comme
    une propre classe d'algorithmes d'apprentissage non supervisé et c'est assez réussi
    (amazone). Peut-être que c'est un peu trop d'exploration de données et un peu trop peu
    apprentissage automatique pour sklearn, mais il suffit de le tordre un peu et vous obtenez la règle
    apprentissage qui est très utile pour la prédiction explicable de la prochaine
    action qu'un acteur pourrait prendre par exemple.

Vous avez raison de dire que l'extraction de règles d'association ne s'intègre pas entièrement dans le
API actuelle. Conceptuellement, je le vois quelque part entre la dimensionnalité
techniques de réduction et clustering hiérarchique. API sage, c'est probablement
le plus proche du clustering hiérarchique.

Comme deux lignes étaient probablement trop courtes pour exprimer cela de manière amicale,
Veuillez accepter mes excuses.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment -56595906
.

Je pense que cela vaudrait la peine, cet article : Comparaison des règles d'association et des arbres de décisionfor Disease Prediction démontre des avantages évidents par rapport aux arbres de décision.

Ce billet de blog inclut du code Python pour A-Priori, il pourrait être intéressant d'essayer de mettre en œuvre ces algorithmes de temps en temps. Y a-t-il du travail sur un package de prototypage séparé ?

Aucun jusqu'à présent. Peut-être pouvez-vous essayer de recueillir du soutien pour cela sur la liste de diffusion ?

Je suis, pour ma part, déçu que ces algorithmes ne soient pas implémentés dans sklearn. Mon conseiller est Jiawei Han, l'auteur de FP-growth et PrefixSpan, et le nombre de citations pour ces deux articles ("Mining frequent patterns without candidate generation" et "Mining sequential patterns by pattern-growth") est la preuve que les deux ces algorithmes ont leur place dans sklearn.

Tout simplement parce que scikit-learn a un critère de popularité pour inclus
algorithmes, cela ne signifie pas que tous les algorithmes populaires doivent être inclus.
Scikit-learn doit avoir une portée limitée, et c'est tout simplement trop loin de
problèmes de classification et de régression (bien que je serais intéressé à
voir un classificateur réussi basé sur les associations implémenté).

N'hésitez pas à être déçu, mais je doute fortement que les techniques ARL
être directement inclus dans scikit-learn dans un avenir prévisible (bien que
un autre projet peut leur fournir une API de type scikit-learn). Il y a
d'autres projets où ces algorithmes sont plus appropriés, mais si vous êtes
déçu par eux aussi, allez faire le vôtre.

Le 25 mars 2015 à 09h11, Henry [email protected] a écrit :

Je suis, pour ma part, déçu que ces algorithmes ne soient pas implémentés dans
sklearn. Mon conseiller est Jiawei Han, l'auteur de FP-growth et PrefixSpan,
et le nombre de citations pour ces deux articles (
« Mining des modèles fréquents sans génération de candidats » et « Mining
motifs séquentiels par motif de croissance") est la preuve que ces deux
les algorithmes ont leur place dans sklearn.


Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment -85713120
.

Les algorithmes d'apprentissage par association sont tout simplement trop éloignés des problèmes de classification et de régression. Bien que nous puissions considérer l'algorithme Frequent Itemset/pattern mining comme un algorithme de génération de caractéristiques comme countvectorizer et tfidfvectorizer. Ces modèles fréquents peuvent être utilisés dans n'importe quel algorithme de classification en tant que caractéristiques d'entrée, et seront beaucoup plus intuitifs et quelque peu différents de l'application d'un apprentissage par arbre de décision basé sur le gain d'informations.

C'est une option. Kudo et Matsumoto montrent comment échantillonner un sous-ensemble du polykernel avec PrefixSpan.

Je peux rechercher et vérifier la documentation scikit-learn, mais je vais vous demander directement si cette option (Kudo et Matsumoto) est disponible dans scikit-learn.

Non. Je dis juste que ça pourrait l'être.

+1 pour l'algorithme Apiori

Notez qu'il existe des algorithmes ML qui dépendent des listes d'éléments fréquents en entrée. Par exemple, voir les listes de règles bayésiennes de Cynthia Rudin (cf, http://www.stat.washington.edu/research/reports/2012/tr609%20-%20old.pdf).

Considérons un ensemble de données avec une variable de réponse à prédire pour laquelle toutes les caractéristiques sont des indicateurs binaires (peut-être à la suite d'un codage à chaud). Nous pouvons considérer une ligne d'ensemble d'entraînement comme un « panier » et la présence d'une fonctionnalité pour cette ligne d'ensemble d'entraînement comme un « élément » dans le panier. Ainsi, des ensembles de données assez génériques pourraient être exploités par apriori, FP-croissance et d'autres techniques fréquentes d'extraction d'itemset.

Dans l'algorithme Bayesian Rule List, les itemsets fréquents sont évalués et éventuellement une structure if-then-else est créée à partir d'eux. Voir le document référencé pour plus de détails.

Le fait est que la disponibilité d'approches fréquentes d'exploration d'ensembles d'éléments pourrait prendre en charge les classificateurs et les régresseurs --- déjà dans le cadre de sklearn --- pas seulement l'analyse du panier de consommation.

C'est peut-être la motivation pour que de tels algorithmes soient disponibles dans scipy. De
cours, si un classificateur ou similaire qui répond à l'inclusion de scikit-learn
des directives ont été mises en œuvre avec l'extraction d'éléments, il y a de bonnes chances de
inclusion, a priori et tout.

Le 19 avril 2016 à 01h14, rmenich [email protected] a écrit :

Notez qu'il existe des algorithmes ML qui dépendent des listes d'éléments fréquents comme
saisir. Par exemple, voir les listes de règles bayésiennes de Cynthia Rudin (cf,
http://www.stat.washington.edu/research/reports/2012/tr609%20-%20old.pdf).

Considérons un ensemble de données avec une variable de réponse à prédire pour laquelle toutes
les caractéristiques sont des indicateurs binaires (peut-être en raison de
encodage à chaud). Nous pouvons considérer une ligne d'ensemble d'entraînement comme un "panier" et
la présence d'une fonctionnalité pour que cette ligne d'ensemble de formation soit un "élément" dans
le panier. Ainsi, des ensembles de données assez génériques pourraient être exploités par
apriori, FP-croissance et autres techniques fréquentes d'extraction d'itemset.

Dans l'algorithme Bayesian Rule List, les itemsets fréquents sont évalués
et finalement une structure if-then-else est créée à partir d'eux. Voir le
document référencé pour plus de détails.

Le fait est que la disponibilité d'approches fréquentes d'exploration d'ensembles d'éléments
pourrait prendre en charge les classificateurs et les régresseurs --- déjà dans le cadre de
sklearn --- pas seulement une analyse du panier de la ménagère.


Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment -211424583

Je ne sais pas à quel point sklearn a changé depuis le début de cette conversation, mais il existe un package "cluster" complet qui n'est pas non plus une régression/classification. Je pense qu'une bonne implémentation des derniers algorithmes pour les règles d'association et les ensembles d'éléments fréquents serait la bienvenue pour beaucoup dans sklearn.

Le clustering ressemble beaucoup à la classification, mais non supervisé, et fait depuis longtemps partie de scikit-learn. L'exploration de règles d'association reste en dehors des tâches principales sur lesquelles scikit-learn se concentre et ne correspond pas parfaitement à son API, mais peut être pertinente dans le contexte d'un classificateur basé sur des associations.

"derniers algorithmes" n'est pas l'objet de scikit-learn. Consultez notre foire aux questions.

Ce serait bien de ne pas avoir à me répéter.

@actsasgeek si vous souhaitez implémenter l'extraction de règles d'association d'une manière compatible avec scikit-learn, nous serions heureux de l'inclure dans scikit-learn-contrib : https://github.com/scikit-learn-contrib/scikit-learn -contrib/blob/master/README.md

J'espère que ma question répétitive ne vous dérange pas, car je vois un sentiment opposé à l'ajout de l'extraction de règles d'association dans une bibliothèque aussi géniale que scikit learn. Je veux juste être mis à jour, y a-t-il un ensemble d'éléments fréquents implémenté dans scikit learn après trois ans de création de ce fil ?.

L'extraction de règles d'association n'entre pas dans le cadre de l'apprentissage automatique, et
certainement hors de la portée de scikit-learn.

La classification basée sur des règles d'association est le seul contexte dans lequel nous
l'envisagerait, et il faudrait encore qu'il soit difficile à vendre.

Le 17 août 2017 à 15h59, saria85 [email protected] a écrit :

J'espère que ma question répétitive ne vous dérange pas, car je perçois un sentiment de
opposé à l'ajout de l'extraction de règles d'association dans une si grande bibliothèque comme
scikit apprendre. Je veux juste être mis à jour s'il y a un ensemble d'éléments fréquents
implémenté dans scikit learn trois ans après la création de ce
fil?.


Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/scikit-learn/scikit-learn/issues/2662#issuecomment-322976532 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AAEz67fCICLgV-3OpYiV3ErpJSW0mobgks5sY9a4gaJpZM4BT5PS
.

Pour ceux qui sont intéressés,

Une bibliothèque appelée mlxtend implémente l'algorithme a priori :
http://rasbt.github.io/mlxtend/api_subpackages/mlxtend.frequent_patterns/

oui tout le monde en a besoin, donc ce sera génial d'avoir dans scikit-learn.
un lien de plus pour l'utiliser en ML
http://www2.cs.uh.edu/~ordonez/pdfwww/w-2006-HIKM-ardtmed.pdf
Comparaison des règles d'association et des arbres de décision
pour la prédiction des maladies

C'est l'extraction de modèles et non le ML

Cette page vous a été utile?
0 / 5 - 0 notes