2010-08-23 25 views
6

utente R e Python di lunga durata qui. Io uso R per la mia analisi giornaliera dei dati e Python per compiti più pesanti sull'elaborazione del testo e lo scripting della shell. Sto lavorando con insiemi di dati sempre più grandi e questi file sono spesso in file binari o di testo quando li ottengo. Il tipo di cose che faccio normalmente è applicare algoritmi statistici/di apprendimento automatico e creare grafici statistici nella maggior parte dei casi. Io uso R con SQLite a volte e scrivo C per compiti intensivi di iterazione; prima di esaminare Hadoop, sto considerando di investire un po 'di tempo in NumPy/Scipy perché ho sentito che ha una migliore gestione della memoria [e la transizione a Numpy/Scipy per uno con il mio background non sembra così grande] - Mi chiedo se qualcuno ha esperienza usando i due e potrebbe commentare i miglioramenti in quest'area, e se ci sono idiomi in Numpy che affrontano questo problema. (Sono anche consapevole di Rpy2 ma mi chiedo se Numpy/Scipy sia in grado di gestire gran parte delle mie esigenze). Grazie -Numpy per utente R?

+0

Voto per chiudere in base alle opinioni. –

risposta

10

di R quando alla ricerca di un ambiente per fare l'apprendimento e le statistiche macchina è sicuramente la diversità delle sue librerie. Per quanto ne so, SciPy + SciKits non può essere un sostituto di CRAN.

Per quanto riguarda l'utilizzo della memoria, R sta utilizzando un paradigma del pass-by-value mentre Python utilizza il riferimento pass-by. Il pass-by-value può portare a un codice più "intuitivo", il pass-by-reference può aiutare a ottimizzare l'utilizzo della memoria. Numpy consente anche di avere "viste" sugli array (tipo di sottoreti senza che una copia sia stata creata).

Per quanto riguarda la velocità, Python puro è più veloce della pura R per l'accesso ai singoli elementi di un array, ma questo vantaggio scompare quando si ha a che fare con gli array numpy (benchmark). Fortunatamente, Cython consente di ottenere facilmente miglioramenti di velocità seri.

Se si lavora con Big Data, trovo il supporto per gli array basati su storage meglio con Python (HDF5).

Non sono sicuro che dovresti abbandonare l'uno per l'altro ma rpy2 può aiutarti ad esplorare le opzioni su una possibile transizione (gli array possono essere spostati tra R e Numpy senza che venga eseguita una copia).

+0

Sì, la semantica del copy-by-value è un killer, anche se capisco che è più come una copia su modifica ... I Avevo intenzione di guardare anche ai Big Data. Ma come dici tu, il modo in cui mi sto facilitando si avvicina a SciPy. – hatmatrix

+0

Sì. Il mondo funzionale si è rapidamente spostato su trucchi di ottimizzazione come la copia su modifica (nel caso di R, chiamato "promesse" (da copiare se modificato).) Tuttavia, questo aiuta solo quando gli oggetti non vengono modificati (non aiuta se si cambiano i nomi di una matrice molto grande mentre si passa come parametro alla funzione). – lgautier

+1

In realtà, l'apprendimento automatico è un'area che è coperto abbastanza bene in python, ad esempio http://mdp-toolkit.sourceforge.net/ e un elenco più completo a http://mloss.org/software/language/python/ – user333700

11

Io uso NumPy ogni giorno e R quasi così.

Per il crunch pesante di numeri, preferisco NumPy a R con un ampio margine (inclusi pacchetti R, come 'Matrix') trovo il pulitore della sintassi, la funzione impostata più grande e il calcolo è più veloce (anche se non trovo R lentamente con qualsiasi mezzo). La funzionalità di Broadcast di NumPy, ad esempio, non credo abbia un analogico in R.

Ad esempio, per leggere un set di dati da un file csv e "normalizzarlo" per l'immissione in un algoritmo ML (ad esempio, centro medio quindi re-scala ogni dimensione) richiede solo questo:

data = NP.loadtxt(data1, delimiter=",") # 'data' is a NumPy array 
data -= NP.mean(data, axis=0) 
data /= NP.max(data, axis=0) 

inoltre, ho trovato che quando codifica algoritmi ML, devo strutture di dati che possa operare sull'elemento-saggio e che anche capire algebra lineare (ad esempio, la moltiplicazione di matrici , trasporre, ecc.). NumPy ottiene questo e ti permette di creare facilmente queste strutture ibride (nessun sovraccarico o sottoclasse dell'operatore, ecc.).

Non sarete delusi da NumPy/SciPy, più probabilmente sarete stupiti.

Così, alcune raccomandazioni - in generale e, in particolare, dati i fatti nella sua domanda:

  • installare sia NumPy e SciPy. Indicativamente, NumPy fornisce le strutture di dati nucleo (in particolare la ndarray) e SciPy (che è realtà parecchie volte più grande NumPy) include gli specifici del dominio funzioni (ad esempio, le statistiche, segnale elaborazione, integrazione).

  • installare le versioni repository, soprattutto w/r/t NumPy perché la versione dev è 2.0. Matplotlib e NumPy sono strettamente integrati, puoi ovviamente usarne uno senza l'altro, ma entrambi sono i migliori della loro rispettiva classe tra le librerie python. È possibile ottenere tutti e tre tramite easy_install, che presumo già.

  • NumPy/SciPy hanno diversi modules specificamente dirette to Machine Learning /statistiche, tra cui il pacchetto diClustering e il pacchetto statistiche.

  • così come i pacchetti indirizzati a calcolo generale, ma che sono di codifica make ML Algoritmi molto più veloce, in particolare, Ottimizzazione e Algebra lineare.

  • ci sono anche la SciKit s, non inclusi nella base NumPy o librerie SciPy; è necessario installarli separatamente. In generale, ogni SciKit è un set di wrapper di convenienza a codifica semplificata in un determinato dominio. Gli SciKit che si possono trovare più rilevanti sono: ann. (prossimo più vicino) e impara (un insieme di algoritmi di regressione e classificazione ML/Statistiche, ad esempio Regressione logistica, Perceptron multistrato, Macchina vettoriale di supporto) . forza

+0

non dovrebbe/= np.max() essere/= np.std()? – denis

+1

no, non dovrebbe.Ho dato un esempio sopra, non una esaustiva recitazione dei dati di pre-elaborazione per l'input ML. A volte il ridimensionamento in modo che ogni dimensione abbia la varianza dell'unità è ciò che voglio, altre volte no. In ogni caso, il mio esempio descrive una tecnica molto comune per preparare i dati come input ML, ma ce ne sono molti altri (vedi ad esempio "Machine Learning: An Algorithmic Perspective, Stephen Marsland, Ch 3., 2009, che usa il metodo nella mia risposta) – doug

+0

Grazie per tutti i riferimenti - darò loro una prova ... – hatmatrix

2

Non posso commentare su R, ma qui ci sono un paio di link su Numpy/SciPy e ML:

E un libro (ho visto solo alcuni dei suoi code): Marsland, Machine Learning (con NumPy) 2009 406p isbn 1420067184

Se si potesse raccogliere alcune note sulla vostra esperienza la curva di apprendimento Numpy/SciPy, che potrebbe essere utile per gli altri.

+0

Thx per i riferimenti! – hatmatrix