Apprendimento automatico tramite Python


53

Sto pensando di utilizzare le librerie Python per fare i miei esperimenti di Machine Learning. Finora mi ero affidato a WEKA, ma nel complesso sono rimasto piuttosto insoddisfatto. Questo principalmente perché ho trovato che WEKA non era così ben supportato (pochissimi esempi, la documentazione è scarsa e il supporto della comunità è meno desiderabile nella mia esperienza) e mi sono trovato in situazioni difficili senza alcun aiuto. Un altro motivo per cui sto contemplando questa mossa è perché mi piace davvero Python (sono nuovo di Python) e non voglio tornare alla programmazione in Java.

Quindi la mia domanda è: cosa sono di più

  1. globale
  2. scalabile (funzionalità 100k, esempi 10k) e
  3. librerie ben supportate per fare ML in Python là fuori?

Sono particolarmente interessato a fare la classificazione del testo, e quindi vorrei usare una libreria che ha una buona collezione di classificatori, metodi di selezione delle caratteristiche (guadagno di informazioni, Chi-Sqaured ecc.) E capacità di pre-elaborazione del testo (stemming, rimozione di stopword , tf-idf ecc.).

Sulla base dei precedenti thread di posta elettronica qui e altrove, finora ho esaminato PyML, scikits-learn e Orange. Come sono state le esperienze delle persone rispetto alle 3 metriche sopra menzionate?

Qualche altro suggerimento?


Grazie mille a tutti per i vostri commenti. Penso che per ora andrò con NLTK + scikit-learn e vedrò dove vanno le cose.
Andy,

1
Non posso fare a meno di proporti di guardare R , che ha una libreria ML molto più grande e (realizzata appositamente per questo lavoro) offre un ambiente molto più omogeneo. Il pacchetto di text mining di R è presentato qui .

@mbq: Sì, sono molto consapevole di R, ma dal momento che devo fare così tanta programmazione "non statistica" prima di fare l'effettivo mining di testo, penso che per ora mi atterrò a Python.
Andy,

1
È possibile utilizzare sia Python che R. Un'opzione consiste nell'utilizzare un metodo di archiviazione indipendente dal linguaggio come un database per mantenere i risultati tra le fasi di elaborazione dei dati.
Faheem Mitha,

Puoi usare Weka dal tuo codice Python: dimitri-christodoulou.blogspot.com/2012/03/…

Risposte:


40

Informazioni sull'opzione scikit-learn: le funzionalità 100k (sparse) e i campioni 10k sono abbastanza piccole da adattarsi alla memoria, quindi perfettamente realizzabili con scikit-learn (stesse dimensioni del set di dati di 20 newsgroup).

Ecco un tutorial che ho tenuto a PyCon 2011 con un capitolo sulla classificazione del testo con esercizi e soluzioni:

Ho anche tenuto un discorso sull'argomento che è una versione aggiornata della versione che ho dato a PyCon FR. Ecco le diapositive (e il video incorporato nei commenti):

Per quanto riguarda la selezione delle funzionalità, dai un'occhiata a questa risposta su quora in cui tutti gli esempi sono basati sulla documentazione di scikit-learn:

Non abbiamo ancora l'estrazione delle caratteristiche di collocazione in scikit-learn. Usa nltk e nltk-trainer per farlo nel frattempo:


Grazie. Sembra un modo particolarmente valido per andare avanti. Lo proverò.
Andy,

@ogrisel, alcuni marciscono con i primi tre collegamenti (manca anche il video nel collegamento quattro). Ecco un link al nuovo dominio Scikit scikit-learn.org
xtian,

14

In termini di lavoro con il testo, dai un'occhiata a NLTK. Molto, molto ben supportato e documentato (c'è anche un libro online o su carta se preferisci) e farà il preprocesing di cui hai bisogno. Potresti trovare utile anche Gensim; l'enfasi è sulla modellazione dello spazio vettoriale e ha implementazioni scalabili di LSI e LDA (penso anche pLSI) se queste sono di interesse. Farà anche la selezione di tf-idf - Non sono sicuro che NLTK lo faccia. Ho usato pezzi di questi su corpora di ~ 50k senza troppe difficoltà.

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

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

Sfortunatamente, per quanto riguarda la principale spinta della tua domanda, non ho familiarità con le librerie specifiche a cui fai riferimento (anche se ho già usato frammenti di scikit-impara prima).


3
+1 per NLTK. Olivier Grisel, che sta facendo ricerche sull'apprendimento automatico e l'elaborazione del linguaggio naturale, ha alcuni buoni tutorial e diapositive sul web. Mi viene in mente l' apprendimento statistico e la classificazione del testo con NLTK e scikit-learn (PyCON FR 2010), per esempio.
chl

@chi Grazie per quel tutorial, ho cercato un po 'in giro e sembra che abbia un sacco di materiale piacevole là fuori. Mostra anche una matrice di confusione con una mappa di calore nelle sue diapositive;)
JMS

9

Python ha una vasta gamma di librerie ML (controlla anche mloss.org). Tuttavia, ho sempre la sensazione che sia più utile per i ricercatori ml che per i professionisti ml.

Numpy / SciPy e matplotlib sono strumenti eccellenti per il lavoro scientifico con Python. Se non hai paura di hackerare la maggior parte delle formule matematiche, non rimarrai deluso. Inoltre, è molto facile usare la GPU con cudamat o gnumpy - gli esperimenti che hanno richiesto giorni prima sono ora completati in ore o persino minuti.

L'ultimo bambino del blocco è probabilmente Theano . È un linguaggio simbolico per le espressioni matematiche che viene fornito con opmitimzations, implementazioni GPU e la differenziazione automatica über-funzionalità che è a dir poco impressionante per i metodi basati sul gradiente.

Inoltre, per quanto ne so, la NLTK menzionata da JMS è fondamentalmente la libreria di linguaggio naturale open source numero uno in circolazione.

Python è lo strumento giusto per l'apprendimento automatico.


8

Lasciami suggerire Orange

globale

scalabile (caratteristiche 100k, esempi 10k)

librerie ben supportate per fare ML in Python là fuori?

libreria che ha una buona collezione di classificatori, metodi di selezione delle caratteristiche (guadagno di informazioni, Chi-Sqaured ecc.),

Tutti questi funzionano fuori dagli schemi in Orange

e funzionalità di pre-elaborazione del testo (stemming, rimozione di stopword, tf-idf ecc.).

Tuttavia, non ho mai usato Orange per l'elaborazione del testo


+1 per Orange. Hanno un'ottima documentazione che mostra come ottenere rapidamente la velocità e puoi usare la loro GUI di programmazione visiva o le librerie di chiamate da Python.
Josh Hemann,

4

Non sono sicuro che ciò sia particolarmente utile, ma c'è una guida per i programmatori per apprendere le statistiche in Python disponibili online. http://www.greenteapress.com/thinkstats/

Sembra piuttosto buono dalla mia breve scansione e sembra parlare di alcuni metodi di apprendimento automatico, quindi potrebbe essere un buon punto di partenza.


3

Dai un'occhiata a libsvm .


4
libsvm non si adatta bene a un gran numero di funzioni ed esempi. Meglio usare liblinear degli stessi autori. i modelli lineari sono generalmente abbastanza buoni nello spazio ad alta dimensione.
Ogrisel,

Libsvm non è il motore svm sia per scikits-learn che per Orange? O ricadono davvero su Liblinear nel caso lineare?
John Robertson,

3

SHOGUN ( 将軍 ) è una cassetta degli attrezzi di apprendimento automatico su larga scala, che sembra promettente.



1

Come evidenziato da @ogrisel, scikit-learn è uno dei migliori pacchetti di machine learning disponibili per Python. È adatto per set di dati piccoli quanto 100k (sparsi) e 10k campioni, e anche per set di dati leggermente più grandi che possono contenere oltre 200k righe. Fondamentalmente, qualsiasi set di dati che si adatta alla memoria.

Ma, se stai cercando un framework Python Machine Learning altamente scalabile, consiglio vivamente Pyspark MLlib. Dato che i set di dati in questi giorni possono crescere in modo esponenziale (dati i big data e l'onda del deep learning), spesso avresti bisogno di una piattaforma in grado di scalare bene e correre veloce non solo nella fase di formazione del modello, ma anche durante la fase di progettazione delle funzionalità (trasformazione delle funzionalità , selezione funzionalità). Diamo un'occhiata a tutte e tre le metriche per la piattaforma Spark Mllib che ti interessano:

  1. Scalabilità: se il tuo set di dati si adatta alla memoria, scikit-learn dovrebbe essere la tua scelta. Se è troppo grande per adattarsi alla memoria, Spark è la strada da percorrere. La cosa importante da notare qui è che Spark funziona più velocemente solo in un'impostazione distribuita.

  2. Completezza: Sklearn è molto più ricco in termini di implementazioni decenti di un gran numero di algoritmi comunemente usati rispetto a spark mllib. Il supporto per la manipolazione e la trasformazione dei dati è anche più ricco in scikit-learn. Spark Mllib ha moduli di trasformazione dei dati sufficienti che fanno la maggior parte delle volte. Quindi, nel caso in cui finiate con spark mllib per problemi di scalabilità, sarete ancora in grado di portare a termine il lavoro. Ha tutto il supporto per l'analisi delle correlazioni, l'estrazione delle caratteristiche (tf-idf, word2vec, CountVectorizer), la trasformazione delle caratteristiche (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA ecc.). Per un elenco dettagliato consultare il link seguente:

Estrazione, trasformazione e selezione di funzioni in Spark mllib

  1. Classificazione: Spark mllib ha l'implementazione di tutti i principali algoritmi che useresti la maggior parte delle volte (compresi gli algoritmi che funzionano bene per la classificazione del testo). Per una panoramica dettagliata di quali algoritmi sono disponibili tramite mllib, vedere il link seguente.

Classificazione e regressione Mllib

Bonus: Apache Spark ha il supporto per Python, R, Java e Scala. Quindi, se domani decidi di sperimentare una lingua diversa (come scelta personale o per motivi professionali), non dovrai imparare un quadro completamente nuovo.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.