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
- umfassend
- skalierbar (100k Features, 10k Beispiele) und
- 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?
quelle
Antworten:
Ü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:
http://scikit-learn.github.com/scikit-learn-tutorial/ (Online-HTML-Version)
https://github.com/downloads/scikit-learn/scikit-learn-tutorial/scikit_learn_tutorial.pdf (PDF-Version)
https://github.com/scikit-learn/scikit-learn-tutorial (Quellcode + Übungen)
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:
quelle
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).
quelle
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.
quelle
Lassen Sie mich Orange vorschlagen
Ja
Ja
Ja
All dies funktioniert in Orange
Ich habe Orange jedoch noch nie für die Textverarbeitung verwendet
quelle
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.
quelle
Schauen Sie sich libsvm an .
quelle
SHOGUN ( 将軍 ) ist eine umfangreiche Toolbox für maschinelles Lernen, die vielversprechend erscheint.
quelle
Open-Source-Python-ml-Bibliothek PySpark MLlib https://spark.apache.org/docs/0.9.0/mllib-guide.html
proprietäre ml-Bibliothek mit kostenloser Testversion GraphLab Create https://dato.com/products/create/
quelle
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:
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.
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
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.
quelle
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.
quelle