Uczenie maszynowe przy użyciu Pythona

53

Rozważam użycie bibliotek Python do przeprowadzania eksperymentów z uczeniem maszynowym. Do tej pory polegałem na WEKA, ale ogólnie byłem dość niezadowolony. Wynika to przede wszystkim z tego, że uważam, że WEKA nie jest tak dobrze wspierana (bardzo niewiele przykładów, dokumentacja jest rzadka, a wsparcie społeczności jest mniej niż pożądane z mojego doświadczenia) i znalazłem się w trudnych sytuacjach bez nadchodzącej pomocy. Innym powodem, dla którego rozważam ten ruch, jest to, że naprawdę lubię Python (jestem nowy w Pythonie) i nie chcę wracać do programowania w Javie.

Moje pytanie brzmi: co więcej

  1. wszechstronny
  2. skalowalny (100 000 funkcji, 10 000 przykładów) i
  3. dobrze obsługiwane biblioteki do robienia ML w Pythonie?

Szczególnie interesuje mnie klasyfikacja tekstu, dlatego chciałbym skorzystać z biblioteki, która ma dobry zbiór klasyfikatorów, metody wyboru funkcji (pozyskiwanie informacji, Chi-Sqaured itp.) Oraz możliwości wstępnego przetwarzania tekstu (pobieranie, usuwanie słów kluczowych , tf-idf itp.).

Na podstawie wcześniejszych wątków e-mail, tu i gdzie indziej, przyglądałem się PyML, scikits-learn i Orange. Jak wyglądały doświadczenia ludzi w odniesieniu do powyższych 3 wskaźników, o których wspomniałem?

Jakieś inne sugestie?

Andy
źródło
Dziękuję wszystkim za komentarze. Myślę, że na razie pójdę z NLTK + scikit-learn i zobaczę, co się stanie.
Andy
1
Nie mogę się powstrzymać od zaproponowania ci spojrzenia na R , który ma znacznie większą bibliotekę ML i (stworzony specjalnie do tego zadania) zapewnia znacznie bardziej jednorodne środowisko. Pakiet eksploracji tekstu R. jest przedstawiony tutaj .
@mbq: Tak, jestem bardzo świadomy R, ale ponieważ muszę wykonać tak wiele „niestatystycznych” programów przed rozpoczęciem eksploracji tekstu, myślę, że na razie będę trzymać się Pythona.
Andy
1
Możesz użyć zarówno Pythona, jak i R. Jedną z opcji jest użycie neutralnej językowo metody przechowywania danych, takiej jak baza danych, aby zachować wyniki między etapami przetwarzania danych.
Faheem Mitha
Możesz używać Weka z kodu Python: dimitri-christodoulou.blogspot.com/2012/03/…

Odpowiedzi:

40

O opcji scikit-learn: funkcje 100k (rzadkie) i próbki 10k są wystarczająco małe, aby zmieścić się w pamięci, a zatem doskonale wykonalne w scikit-learn (taki sam rozmiar jak zestaw danych 20 grup dyskusyjnych).

Oto samouczek, który przeprowadziłem na PyCon 2011 z rozdziałem dotyczącym klasyfikacji tekstu z ćwiczeniami i rozwiązaniami:

Wygłosiłem również wykład na ten temat, który jest zaktualizowaną wersją wersji, którą podałem w PyCon FR. Oto slajdy (i osadzone wideo w komentarzach):

Jeśli chodzi o wybór funkcji, spójrz na tę odpowiedź na quora, gdzie wszystkie przykłady oparte są na dokumentacji scikit-learn:

Nie mamy jeszcze ekstrakcji funkcji kolokacji w scikit-learn. Aby to zrobić, użyj nltk i nltk-trainer:

ogrisel
źródło
Dzięki. To wydaje się być szczególnie dobrym rozwiązaniem. Spróbuję.
Andy
@ogrisel, niektóre zgnilizna linków z pierwszymi trzema linkami (brakuje również wideo w linku czwartym). Oto link do nowej domeny Scikit scikit-learn.org
xtian
14

Jeśli chodzi o pracę z tekstem, spójrz na NLTK. Bardzo, bardzo dobrze obsługiwane i udokumentowane (istnieje nawet książka online lub w formie papierowej, jeśli wolisz) i wykona wstępne przetwarzanie, którego potrzebujesz. Przydatny może być również Gensim; nacisk kładziony jest na modelowanie przestrzeni wektorowej i ma skalowalne implementacje LSI i LDA (chyba też pLSI), jeśli są one interesujące. Dokonuje również wyboru przez tf-idf - nie jestem pewien, czy NLTK to robi. Zużyłem ich fragmenty na ciałach około 50k bez większego trudu.

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

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

Niestety, jeśli chodzi o główny wątek twojego pytania, nie znam konkretnych bibliotek, do których się odwołujesz (chociaż wcześniej korzystałem z części scikits-learn).

JMS
źródło
3
+1 dla NLTK. Olivier Grisel, który prowadzi badania nad uczeniem maszynowym i przetwarzaniem języka naturalnego, ma kilka dobrych samouczków i slajdów w Internecie. Mogę na przykład myśleć o statystycznym uczeniu się i klasyfikacji tekstu za pomocą NLTK i scikit-learn (PyCON FR 2010).
chl
@chi Dzięki za ten samouczek, trochę się grzebałem i wygląda na to, że ma tam sporo fajnego materiału. Wyświetla także matrycę pomieszania z mapą termiczną w swoich slajdach;)
JMS
9

Python ma szeroką gamę bibliotek ML (sprawdź także mloss.org). Jednak zawsze mam wrażenie, że jest to bardziej użyteczne dla badaczy ml niż dla praktyków ml.

Numpy / SciPy i matplotlib to doskonałe narzędzia do pracy naukowej z Pythonem. Jeśli nie boisz się włamać do większości formuł matematycznych, nie będziesz rozczarowany. Ponadto bardzo łatwo jest używać procesora graficznego z cudamat lub gnumpy - eksperymenty, które trwały kilka dni wcześniej, są teraz ukończone za kilka godzin, a nawet minut.

Najnowszym dzieckiem na bloku jest prawdopodobnie Theano . Jest to język symboliczny dla wyrażeń matematycznych, który zawiera optymalizacje, implementacje GPU i automatyczne różnicowanie z funkcją über, które jest niesamowite w przypadku metod opartych na gradientach.

Ponadto, o ile wiem, wspomniany przez JMS język NLTK jest w zasadzie numerem jeden wśród bibliotek języka naturalnego typu open source.

Python jest właściwym narzędziem do uczenia maszynowego.

bayerj
źródło
8

Pozwól, że zasugeruję Orange

wszechstronny

tak

skalowalny (100 000 funkcji, 10 000 przykładów)

tak

dobrze obsługiwane biblioteki do robienia ML w Pythonie?

tak

biblioteka, która ma dobry zbiór klasyfikatorów, metody wyboru cech (Information Gain, Chi-Sqaured itp.),

Wszystko to działa od razu w Orange

oraz możliwości wstępnego przetwarzania tekstu (usuwanie, usuwanie słów kluczowych, tf-idf itp.).

Jednak nigdy nie korzystałem z Orange do przetwarzania tekstu

Boris Gorelik
źródło
+1 dla pomarańczy. Mają świetną dokumentację, która pokazuje, jak szybko przyspieszyć, i możesz użyć graficznego interfejsu GUI lub bibliotek wywołań z Pythona.
Josh Hemann
4

Nie jestem pewien, czy jest to szczególnie przydatne, ale dla programistów dostępny jest przewodnik do nauki statystyki w języku Python dostępny online. http://www.greenteapress.com/thinkstats/

Z mojego krótkiego skanu wydaje się całkiem nieźle i wydaje się mówić o niektórych metodach uczenia maszynowego, więc może to być dobre miejsce na rozpoczęcie.

richiemorrisroe
źródło
3

Sprawdź libsvm .

Mike Lawrence
źródło
4
libsvm nie skaluje się dobrze do dużej liczby funkcji i próbek. Lepiej używaj liblinearnego przez tych samych autorów. modele liniowe są zwykle wystarczająco dobre w przestrzeni o dużych wymiarach.
ogrisel
Czy libsvm nie jest silnikiem svm zarówno dla scikits-learn, jak i dla Orange? A może w przypadku liniowym naprawdę wracają do liblinearnego?
John Robertson
3

SHOGUN ( 将軍 ) to zestaw narzędzi do uczenia maszynowego na dużą skalę, który wydaje się obiecujący.

Wok
źródło
1

Jak podkreślono @ogrisel, scikit-learn jest jednym z najlepszych pakietów uczenia maszynowego dla Pythona. Jest dobrze przystosowany do zestawów danych tak małych jak 100k (rzadkie) funkcje i 10k próbek, a nawet do nieznacznie większych zestawów danych, które mogą zawierać ponad 200 tysięcy wierszy. Zasadniczo każdy zestaw danych, który mieści się w pamięci.

Ale jeśli szukasz wysoce skalowalnego środowiska uczenia maszynowego w języku Python, zdecydowanie polecam Pyspark MLlib. Ponieważ zbiory danych w dzisiejszych czasach mogą rosnąć wykładniczo (biorąc pod uwagę falę dużych zbiorów danych i głębokiego uczenia), często potrzebna jest platforma, która może dobrze skalować się i działać szybko nie tylko na etapie szkolenia modelu, ale także na etapie projektowania cech (transformacja cech , wybór funkcji). Spójrzmy na wszystkie trzy parametry platformy Spark Mllib, którymi jesteś zainteresowany:

  1. Skalowalność: jeśli Twój zestaw danych mieści się w pamięci, scikit-learn powinien być twoim wyborem. Jeśli jest zbyt duży, aby zmieścił się w pamięci, Spark jest właściwym rozwiązaniem. Należy tutaj zauważyć, że Spark działa szybciej tylko w środowisku rozproszonym.

  2. Kompleksowość: Sklearn jest znacznie bogatszy pod względem przyzwoitych implementacji dużej liczby powszechnie używanych algorytmów w porównaniu do Spark MLLIB. Obsługa manipulacji i transformacji danych jest również bogatsza w scikit-learn. Spark Mllib ma wystarczającą liczbę modułów do transformacji danych, które wykonują większość zadań. Tak więc, jeśli skończysz z iskrem mllib z powodu problemów ze skalowalnością, nadal będziesz w stanie wykonać zadanie. Obsługuje analizę korelacji, ekstrakcję funkcji (tf-idf, word2vec, CountVectorizer), transformację funkcji (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA itp.). Aby uzyskać szczegółową listę, zobacz poniższy link:

Wyodrębnianie, przekształcanie i wybieranie funkcji w Spark mllib

  1. Klasyfikacja: Spark mllib ma wszystkie główne algorytmy, których będziesz używać przez większość czasu (w tym algos, które dobrze sprawdzają się w klasyfikacji tekstu). Aby uzyskać szczegółowy przegląd dostępnych algorytmów przez mllib, zobacz poniższy link.

Klasyfikacja i regresja Mllib

Bonus: Apache Spark obsługuje Python, R, Java i Scala. Tak więc, jeśli jutro zdecydujesz się eksperymentować z innym językiem (jako osobisty wybór lub z powodów zawodowych), nie będziesz musiał uczyć się zupełnie nowych ram.

Abhishek Arora
źródło
0

Nie wiem, czy nadal szukasz porady (zadałeś to pytanie 5 miesięcy temu ...). Właśnie zacząłem tę książkę i jak dotąd całkiem nieźle:

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

Autor pokazuje kod, przykłady i wyjaśnia niektóre teorie i matematykę „za kulisami” algorytmów ML. Uważam to za bardzo pouczające. Mam nadzieję, że to może być dla ciebie to samo.

Alejandro Carrera
źródło