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
- wszechstronny
- skalowalny (100 000 funkcji, 10 000 przykładów) i
- 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?
źródło
Odpowiedzi:
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:
http://scikit-learn.github.com/scikit-learn-tutorial/ (wersja HTML online)
https://github.com/downloads/scikit-learn/scikit-learn-tutorial/scikit_learn_tutorial.pdf (wersja PDF)
https://github.com/scikit-learn/scikit-learn-tutorial (kod źródłowy + ćwiczenia)
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:
źródło
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).
źródło
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.
źródło
Pozwól, że zasugeruję Orange
tak
tak
tak
Wszystko to działa od razu w Orange
Jednak nigdy nie korzystałem z Orange do przetwarzania tekstu
źródło
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.
źródło
Sprawdź libsvm .
źródło
SHOGUN ( 将軍 ) to zestaw narzędzi do uczenia maszynowego na dużą skalę, który wydaje się obiecujący.
źródło
biblioteka open source python ml PySpark MLlib https://spark.apache.org/docs/0.9.0/mllib-guide.html
zastrzeżona biblioteka ml z bezpłatną wersją próbną GraphLab Utwórz https://dato.com/products/create/
źródło
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:
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.
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
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.
źródło
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.
źródło