Maschinelles Lernen mit Python

53

Ich denke darüber nach, Python-Bibliotheken für meine maschinellen Lernexperimente zu verwenden. Bisher hatte ich mich auf WEKA verlassen, war aber insgesamt ziemlich unzufrieden. Dies ist in erster Linie darauf zurückzuführen, dass ich festgestellt habe, dass WEKA nicht so gut unterstützt wird (sehr wenige Beispiele, Dokumentation ist spärlich und Community-Support ist meiner Erfahrung nach weniger wünschenswert) und dass ich mich in schwierigen Situationen ohne Hilfe befunden habe. Ein weiterer Grund, warum ich über diesen Schritt nachdenke, ist, dass ich Python wirklich mag (ich bin neu in Python) und nicht auf das Programmieren in Java zurückgreifen möchte.

Also meine Frage ist, was sind die mehr

  1. umfassend
  2. skalierbar (100k Features, 10k Beispiele) und
  3. gut unterstützte Bibliotheken für ML in Python da draußen?

Ich bin besonders an der Textklassifizierung interessiert und möchte daher eine Bibliothek verwenden, die eine gute Sammlung von Klassifizierern, Feature-Auswahlmethoden (Informationsgewinn, Chi-Sqaured usw.) und Textvorverarbeitungsfunktionen (Stemming, Entfernen von Stoppwörtern) enthält , tf-idf usw.).

Basierend auf den letzten E-Mail-Threads hier und anderswo habe ich mich bisher mit PyML, Scikits-Learn und Orange befasst. Wie waren die Erfahrungen der Menschen in Bezug auf die oben genannten drei Metriken?

Irgendwelche anderen Vorschläge?

Andy
quelle
Vielen Dank für Ihre Kommentare. Ich denke im Moment werde ich mit NLTK + scikit lernen und sehen, wohin die Dinge gehen.
Andy
1
Ich kann nicht umhin, Ihnen vorzuschlagen, sich R anzuschauen , das eine viel größere ML-Bibliothek hat und (speziell für diesen Job gemacht) eine viel homogenere Umgebung bietet. Das Text-Mining-Paket von R wird hier vorgestellt .
@mbq: Ja, ich bin mir R sehr bewusst, aber da ich vor dem eigentlichen Text-Mining so viel "Nicht-Statistik" -Programmieren muss, werde ich mich vorerst an Python halten.
Andy
1
Sie können sowohl Python als auch R verwenden. Eine Option besteht darin, eine sprachneutrale Speichermethode wie eine Datenbank zu verwenden, um die Ergebnisse zwischen den Datenverarbeitungsschritten zu speichern.
Faheem Mitha
Sie können Weka aus Ihrem Python-Code verwenden: dimitri-christodoulou.blogspot.com/2012/03/…

Antworten:

40

Über die Scikit-Learn-Option: 100k (spärliche) Features und 10k Samples sind ausreichend klein, um in den Arbeitsspeicher zu passen, sodass sie mit Scikit-Learn (dieselbe Größe wie der 20-Newsgroups-Datensatz) perfekt ausgeführt werden können.

Hier ist ein Tutorial, das ich auf der PyCon 2011 mit einem Kapitel zur Textklassifizierung mit Übungen und Lösungen gegeben habe:

Ich habe auch einen Vortrag über das Thema gehalten, das eine aktualisierte Version der Version ist, die ich bei PyCon FR gegeben habe. Hier sind die Folien (und das eingebettete Video in den Kommentaren):

Schauen Sie sich für die Funktionsauswahl diese Antwort auf Quora an, in der alle Beispiele auf der Scikit-Learn-Dokumentation basieren:

Wir haben noch keine Kollokationsfeaturextraktion in scikit-learn. Verwenden Sie dazu in der Zwischenzeit nltk und nltk-trainer:

Oger
quelle
Vielen Dank. Dies scheint ein besonders guter Weg zu sein. Ich werde es versuchen.
Andy
@ogrisel, einige Links verrotten mit den ersten drei Links (das Video in Link vier fehlt ebenfalls). Hier ist ein Link zur neuen Scikit-Domain scikit-learn.org
xtian
14

Wenn Sie mit Text arbeiten möchten, schauen Sie sich NLTK an. Sehr, sehr gut unterstützt und dokumentiert (es gibt sogar ein Buch online oder in Papierform, wenn Sie es vorziehen) und wird die Vorverarbeitung durchführen, die Sie benötigen. Sie könnten Gensim auch nützlich finden; Der Schwerpunkt liegt auf der Modellierung des Vektorraums und es gibt skalierbare Implementierungen von LSI und LDA (ich denke auch pLSI), wenn diese von Interesse sind. Es wird auch eine Auswahl durch tf-idf machen - ich bin nicht sicher, ob NLTK dies tut. Ich habe Stücke von diesen auf Korpora von ~ 50k ohne viel Schwierigkeit benutzt.

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

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

Leider kenne ich die Bibliotheken, auf die Sie verweisen, in Bezug auf den Hauptschwerpunkt Ihrer Frage nicht (obwohl ich bereits einige Scikits verwendet habe, die ich zuvor gelernt habe).

JMS
quelle
3
+1 für NLTK. Olivier Grisel, der maschinelle Lernforschung und Verarbeitung natürlicher Sprachen betreibt, hat einige gute Tutorials und Folien im Internet. Ich kann zum Beispiel an statistisches Lernen und Textklassifikation mit NLTK und Scikit-Learn (PyCON FR 2010) denken.
Chl
@chi Danke für das Tutorial, ich habe ein bisschen rumgespielt und es scheint, als hätte er eine Menge schönes Material da draußen. Zeigt auch eine Verwirrungsmatrix mit einer Heatmap in seinen Folien an;)
JMS
9

Python bietet eine große Auswahl an ML-Bibliotheken (siehe auch mloss.org). Ich habe jedoch immer das Gefühl, dass es für ml-Forscher nützlicher ist als für ml-Praktiker.

Numpy / SciPy und Matplotlib sind hervorragende Werkzeuge für die wissenschaftliche Arbeit mit Python. Wenn Sie keine Angst haben, die meisten mathematischen Formeln selbst zu hacken, werden Sie nicht enttäuscht sein. Außerdem ist es sehr einfach, die GPU mit Cudamat oder Gnumpy zu verwenden - Experimente, die Tage zuvor gedauert haben , sind jetzt in Stunden oder sogar Minuten abgeschlossen.

Das neueste Kind auf dem Block ist wahrscheinlich Theano . Es ist eine symbolische Sprache für mathematische Ausdrücke, die mit Optimierungen, GPU-Implementierungen und der automatischen Über-Feature-Differenzierung einhergeht, die für gradientenbasierte Methoden geradezu fantastisch ist.

Soweit ich weiß, ist das von JMS erwähnte NLTK im Grunde die Open-Source-Bibliothek Nummer eins für natürliche Sprachen.

Python ist das richtige Werkzeug für maschinelles Lernen.

bayerj
quelle
8

Lassen Sie mich Orange vorschlagen

umfassend

Ja

skalierbar (100k Features, 10k Beispiele)

Ja

gut unterstützte Bibliotheken für ML in Python da draußen?

Ja

Bibliothek mit einer guten Sammlung von Klassifikatoren, Merkmalauswahlmethoden (Informationsgewinn, Chi-Quadrat usw.),

All dies funktioniert in Orange

und Textvorverarbeitungsfunktionen (Stemming, Entfernen von Stoppwörtern, tf-idf usw.).

Ich habe Orange jedoch noch nie für die Textverarbeitung verwendet

Boris Gorelik
quelle
+1 für Orange. Sie haben eine großartige Dokumentation, die zeigt, wie Sie schnell auf den neuesten Stand kommen. Sie können entweder die grafische Programmierschnittstelle verwenden oder Bibliotheken von Python aufrufen.
Josh Hemann
4

Ich bin mir nicht sicher, ob dies besonders nützlich ist, aber es gibt eine Anleitung für Programmierer, um Statistiken in Python online zu lernen. http://www.greenteapress.com/thinkstats/

Nach meinem kurzen Scan scheint es ziemlich gut zu sein, und es scheint über einige Methoden des maschinellen Lernens zu sprechen, daher ist es möglicherweise ein guter Ort, um anzufangen.

richiemorrisroe
quelle
3

Schauen Sie sich libsvm an .

Mike Lawrence
quelle
4
libsvm lässt sich nicht gut auf eine große Anzahl von Funktionen und Beispielen skalieren. Verwenden Sie besser liblinear von denselben Autoren. lineare Modelle sind normalerweise im hochdimensionalen Raum gut genug.
Ogrisel
Ist libsvm nicht die SVM-Engine für Scikits-Learn und Orange? Oder greifen sie im linearen Fall wirklich auf liblinear zurück?
John Robertson
3

SHOGUN ( 将軍 ) ist eine umfangreiche Toolbox für maschinelles Lernen, die vielversprechend erscheint.

Wok
quelle
1

Wie @ogrisel hervorhob, ist scikit-learn eines der besten maschinellen Lernpakete für Python. Es eignet sich gut für Datensätze mit nur 100.000 (spärlichen) Features und 10.000 Samples und sogar für geringfügig größere Datensätze, die mehr als 200.000 Zeilen enthalten können. Grundsätzlich jeder Datensatz, der in den Speicher passt.

Wenn Sie jedoch ein hoch skalierbares Python Machine Learning-Framework suchen, kann ich Pyspark MLlib nur empfehlen. Da Datensätze heutzutage exponentiell anwachsen können (angesichts der großen Datenmengen und der starken Lernwelle), benötigen Sie häufig eine Plattform, die sich nicht nur in der Modellschulungsphase, sondern auch während der Feature-Engineering-Phase (Feature-Transformation) gut skalieren und schnell ausführen lässt , Merkmalsauswahl). Schauen wir uns alle drei Metriken für die Spark Mllib-Plattform an, an denen Sie interessiert sind:

  1. Skalierbarkeit: Wenn Ihr Datensatz in den Speicher passt, sollten Sie Scikit-Learn wählen. Wenn es zu groß ist, um in den Speicher zu passen, ist Spark der richtige Weg. Wichtig hierbei ist, dass Spark nur in einer verteilten Umgebung schneller arbeitet.

  2. Umfassend: Sklearn ist weitaus umfangreicher in Bezug auf die Implementierung einer großen Anzahl häufig verwendeter Algorithmen als Spark-Mllib. Die Unterstützung für Datenmanipulation und -umwandlung ist auch umfangreicher beim Erlernen von Scikits. Spark Mllib verfügt über genügend Datenumwandlungsmodule, die die meisten Tricks ausführen. Wenn Sie also aus Gründen der Skalierbarkeit mit spark mllib enden, können Sie die Arbeit trotzdem erledigen. Es bietet umfassende Unterstützung für Korrelationsanalysen, Feature-Extraktion (tf-idf, word2vec, CountVectorizer) und Feature-Transformation (Tokenizer, StopWordsRemover, nn-Gramm, Binarizer, PCA usw.). Eine detaillierte Liste finden Sie unter dem folgenden Link:

Extrahieren, Transformieren und Auswählen von Features in Spark mllib

  1. Klassifizierung: Spark mllib verfügt über alle wichtigen Implementierungen von Algorithmen, die Sie meistens verwenden würden (einschließlich Algen, die für die Textklassifizierung gut funktionieren). Eine detaillierte Übersicht über die in mllib verfügbaren Algorithmen finden Sie unter dem folgenden Link.

Mllib Klassifikation und Regression

Bonus: Apache Spark unterstützt Python, R, Java und Scala. Wenn Sie sich also morgen entscheiden, mit einer anderen Sprache zu experimentieren (aus persönlichen oder beruflichen Gründen), müssen Sie kein völlig neues Framework erlernen.

Abhishek Arora
quelle
0

Ich weiß nicht, ob Sie noch Rat suchen (Sie haben diese Frage vor 5 Monaten gestellt ...). Ich habe gerade mit diesem Buch angefangen und bis jetzt ist es ziemlich gut:

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

Der Autor zeigt Code, Beispiele und erklärt einige Theorie und Mathematik "hinter den Kulissen" von ML-Algorithmen. Ich finde das sehr lehrreich. Ich hoffe, das könnte für Sie genauso sein.

Alejandro Carrera
quelle