Apprentissage automatique en Python


53

J'envisage d'utiliser des bibliothèques Python pour mes expériences d'apprentissage automatique. Jusqu'ici, je m'appuyais sur WEKA, mais dans l'ensemble, j'étais plutôt mécontent. C’est principalement parce que j’ai trouvé que WEKA n’était pas très bien pris en charge (très peu d’exemples, la documentation est rare et le soutien de la communauté n’est pas souhaitable, selon mon expérience), et je me suis retrouvé dans des situations délicates sans aucune aide. Une autre raison pour laquelle je pense à cette initiative est que j'aime vraiment Python (je suis nouveau dans Python) et que je ne veux pas revenir au codage en Java.

Donc ma question est, quels sont les plus

  1. complet
  2. évolutif (fonctionnalités 100k, exemples 10k) et
  3. bibliothèques bien supportées pour faire ML en Python?

Je suis particulièrement intéressé par la classification de texte. Par conséquent, j'aimerais utiliser une bibliothèque qui contient une bonne collection de classificateurs, de méthodes de sélection de caractéristiques (Information Gain, Chi-Sqaured, etc.) et de capacités de traitement préliminaire de texte (remplacement, suppression des mots vides). , tf-idf, etc.).

Sur la base des anciens fils de discussion ici et ailleurs, je me suis jusqu'à présent intéressé à PyML, à scikits-learn et à Orange. Comment les gens ont-ils vécu les 3 mesures mentionnées ci-dessus?

D'autres suggestions?


Merci beaucoup à tous pour vos commentaires. Je pense que pour l'instant je vais utiliser NLTK + scikit-learn et voir où vont les choses.
Andy

1
Je ne peux m'empêcher de vous proposer de regarder R , qui possède une bibliothèque ML beaucoup plus grande et (spécialement conçu pour ce travail) fournit un environnement beaucoup plus homogène. Le package de text mining de R est présenté ici .

@mbq: Oui, je connais très bien R, mais comme je dois faire beaucoup de programmation "non statistique" avant de faire l'exploration de texte, je pense que je vais m'en tenir à Python pour le moment.
Andy

1
Vous pouvez utiliser à la fois Python et R. Une option consiste à utiliser une méthode de stockage neutre, telle qu'une base de données, pour conserver les résultats entre les étapes de traitement des données.
Faheem Mitha

Vous pouvez utiliser Weka depuis votre code Python: dimitri-christodoulou.blogspot.com/2012/03/…

Réponses:


40

À propos de l'option scikit-learn: les fonctionnalités de 100 ko (rares) et les échantillons de 10 ko sont suffisamment petits pour tenir en mémoire, donc parfaitement réalisables avec scikit-learn (même taille que le jeu de données de 20 groupes de discussion).

Voici un tutoriel que j'ai donné à PyCon 2011 avec un chapitre sur la classification de texte avec des exercices et des solutions:

J'ai également donné une conférence sur le sujet, qui est une version mise à jour de la version que j'ai donnée à PyCon FR. Voici les diapositives (et la vidéo intégrée dans les commentaires):

En ce qui concerne la sélection des fonctionnalités, consultez cette réponse sur quora où tous les exemples sont basés sur la documentation de scikit-learn:

Scikit-learn ne contient pas encore d'extraction de fonctionnalité de collocation. Utilisez nltk et nltk-trainer pour le faire entre-temps:


Merci. Cela semble être un bon moyen d’aller de l’avant. Je vais essayer.
Andy

@ogrisel, certains liens pourrissent avec les trois premiers liens (la vidéo dans le lien quatre est également manquante). Voici un lien vers le nouveau domaine Scikit scikit-learn.org
xtian

14

En termes de travail avec le texte, jetez un coup d'œil à NLTK. Très, très bien documenté (il existe même un livre en ligne ou sur papier si vous préférez) et effectuera le prétraitement dont vous avez besoin. Vous pourriez également trouver utile Gensim; l'accent est mis sur la modélisation de l'espace vectoriel et il comporte des implémentations évolutives de LSI et LDA (pLSI aussi, je pense) si cela présente un intérêt. Il fera également la sélection par tf-idf - je ne suis pas sûr que NLTK le fasse. J'ai utilisé des morceaux de ceux-ci sur des corpus de ~ 50k sans trop de difficulté.

NLTK: http://www.nltk.org/

Gensim: http://nlp.fi.muni.cz/projekty/gensim/

Malheureusement, en ce qui concerne l'essentiel de votre question, je ne connais pas bien les bibliothèques spécifiques auxquelles vous faites référence (bien que j'aie déjà utilisé des morceaux de scikits-learn auparavant).


3
+1 pour NLTK. Olivier Grisel, qui effectue des recherches sur l'apprentissage automatique et le traitement automatique du langage, propose quelques bons tutoriels et diapositives sur le Web. Je pense par exemple à l'apprentissage statistique et à la classification des textes avec NLTK et scikit-learn (PyCON FR 2010).
chl

@chi Merci pour ce tutoriel, j'ai fouillé un peu et il semble qu'il ait beaucoup de matériel sympa sur le marché. Affiche également une matrice de confusion avec une carte thermique dans ses diapositives;)
JMS

9

Python a une large gamme de bibliothèques ML (visitez également mloss.org). Cependant, j'ai toujours le sentiment que c'est plus utile pour les chercheurs de ml que pour les praticiens de ml.

Numpy / SciPy et matplotlib sont d'excellents outils pour les travaux scientifiques avec Python. Si vous n'avez pas peur de pirater vous-même la plupart des formules mathématiques, vous ne serez pas déçu. En outre, il est très facile d’utiliser le GPU avec Cudamat ou Gnumpy - les expériences qui ont pris quelques jours auparavant sont maintenant terminées en quelques heures, voire en quelques minutes.

Le dernier sur le bloc est probablement Theano . C'est un langage symbolique pour les expressions mathématiques qui vient avec des optimisations, des implémentations de GPU et la différenciation automatique über-feature qui n'est rien de moins que génial pour les méthodes à base de dégradé.

De plus, pour autant que je sache, le langage NLTK mentionné par JMS est fondamentalement la bibliothèque de langage naturel à code source libre numéro un du marché.

Python est le bon outil pour l'apprentissage automatique.


8

Laisse moi suggérer Orange

complet

Oui

évolutif (fonctionnalités 100k, exemples 10k)

Oui

bibliothèques bien supportées pour faire ML en Python?

Oui

une bibliothèque qui contient une bonne collection de classificateurs, de méthodes de sélection d’entités (gain d’information, Chi-Sqaured, etc.),

Tous ces travaux fonctionnent en orange

et des capacités de pré-traitement de texte (racine, suppression des mots vides, tf-idf, etc.).

Je n'ai jamais utilisé Orange pour le traitement de texte, bien que


+1 pour Orange. Ils ont une excellente documentation qui montre comment se mettre rapidement à niveau et vous pouvez utiliser soit leur interface graphique de programmation visuelle, soit des bibliothèques d’appel de Python.
Josh Hemann

4

Je ne sais pas si cela est particulièrement utile, mais il existe un guide pour les programmeurs pour apprendre les statistiques en Python disponible en ligne. http://www.greenteapress.com/thinkstats/

Cela me semble plutôt bon d'après mon analyse rapide, et il semble parler de méthodes d'apprentissage automatique. Ce pourrait donc être un bon point de départ.


3

Découvrez libsvm .


4
libsvm ne s'adapte pas bien à un grand nombre de fonctionnalités et d'échantillons. Mieux utiliser liblinear par les mêmes auteurs. les modèles linéaires sont généralement suffisants dans un espace de grande dimension.
ogrisel

Libsvm n'est-il pas le moteur svm pour scikits-learn et Orange? Ou bien retombent-ils réellement en linéaire dans le cas linéaire?
John Robertson

3

SHOGUN ( 将軍 ) est une grande boîte à outils d' apprentissage machine à l' échelle, ce qui semble prometteur.



1

Comme @ogrisel l'a souligné, scikit-learn est l'un des meilleurs packages d'apprentissage automatique pour Python. Il est bien adapté aux ensembles de données d'une taille aussi petite que 100 000 fonctionnalités (fragmentées) et de 10 000 échantillons, et même à des ensembles de données légèrement plus grands pouvant contenir plus de 200 000 lignes. Fondamentalement, tout jeu de données qui tient dans la mémoire.

Toutefois, si vous recherchez un framework Python Machine Learning hautement évolutif, je vous recommande vivement Pyspark MLlib. Étant donné que les jeux de données actuels peuvent grossir de manière exponentielle (en raison des données massives et de la vague d'apprentissage en profondeur), vous auriez souvent besoin d'une plate-forme capable de bien évoluer et de fonctionner rapidement non seulement sur la phase de formation du modèle, mais également pendant la phase d'ingénierie des fonctionnalités (transformation des fonctionnalités). , sélection de fonctionnalité). Examinons les trois mesures de la plate-forme Spark Mllib qui vous intéressent:

  1. Évolutivité: si votre jeu de données peut tenir dans la mémoire, scikit-learn devrait être votre choix. Si c'est trop gros pour tenir dans la mémoire, Spark est la solution. La chose importante à noter ici est que Spark fonctionne plus rapidement que dans un cadre distribué.

  2. Intégralité : Sklearn est beaucoup plus riche en termes de mise en œuvre décente d'un grand nombre d'algorithmes couramment utilisés par rapport à spark mllib. Le support pour la manipulation et la transformation de données est également plus riche en scikit-learn. Spark Mllib a suffisamment de modules de transformation de données pour résoudre le problème la plupart du temps. Ainsi, au cas où vous vous retrouveriez avec spark mllib pour des problèmes d’évolutivité, vous pourrez toujours faire le travail. Il prend en charge l'analyse de corrélation, l'extraction de caractéristiques (tf-idf, word2vec, CountVectorizer), la transformation de caractéristiques (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA, etc.). Pour une liste détaillée, voir le lien ci-dessous:

Extraire, transformer et sélectionner des fonctionnalités dans Spark mllib

  1. Classification: Spark mllib a l'implémentation de tous les principaux algorithmes que vous utiliseriez la plupart du temps (y compris les algos qui fonctionnent bien pour la classification de texte). Pour un aperçu détaillé des algorithmes disponibles via mllib, voir le lien ci-dessous.

Classification Mllib et régression

Bonus: Apache Spark prend en charge Python, R, Java et Scala. Donc, si demain vous décidez d'expérimenter une autre langue (à titre personnel ou pour des raisons professionnelles), vous n'aurez pas à apprendre un tout nouveau cadre.


0

Je ne sais pas si vous cherchez toujours des conseils (vous avez posé cette question il y a 5 mois ...). Je viens de commencer ce livre et jusqu'ici c'est plutôt bien:

https://www.amazon.com.mx/dp/1491962291/ref=cm_cr_ryp_prd_ttl_sol_3

L'auteur montre du code, des exemples et explique certaines notions théoriques et mathématiques "en coulisses" des algorithmes ML. Je trouve cela très instructif. J'espère que cela pourrait être la même chose pour vous.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.