Python vs R per l'apprendimento automatico


101

Ho appena iniziato a sviluppare un'applicazione di apprendimento automatico per scopi accademici. Attualmente sto usando R e mi sto allenando. Tuttavia, in molti posti, ho visto persone che usano Python .

Cosa usano le persone nel mondo accademico e nell'industria e qual è la raccomandazione?


3
Bene, che tipo di machine learning (immagine / video? NLP? Finanziario? Astronomia?), Quali classificatori, quali set di dati di dimensioni (Mb? Gb? Tb?), Quale scala, quale latenza, su quale piattaforma (mobile / computer singolo / multicore / cluster / cloud) ...? Quali librerie specifiche useranno / necessiteranno la tua applicazione e hai verificato cosa è disponibile in ogni lingua? Stai solo creando un'applicazione giocattolo per il tuo apprendimento personale o importa se viene mai prodotto? Usi open-source o proprietario? Lavorerai con altre persone o app esistenti e cosa usano / supportano? Frontend Web / GUI? etc
smci

1
Un'osservazione è che Python è più usato dalle persone che imparano automaticamente lavorando con grandi serie di dati mentre R è più usato dagli "statistici" tradizionali, ad esempio quelli che lavorano con esperimenti di psicologia con centinaia di punti dati. Anche se quella differenza potrebbe diminuire.
xji,

pitone fino all'uomo! Faccio 4 volte quello che fanno i miei colleghi in un giorno. E puoi usare Python per tutti i tipi di attività di programmazione, non solo per l'apprendimento automatico.
Francesco Pegoraro,

Risposte:


91

Alcune differenze davvero importanti da considerare quando si sceglie R o Python l'uno sull'altro:

  • L'apprendimento automatico prevede 2 fasi. Fase di costruzione e previsione del modello. In genere, la creazione del modello viene eseguita come processo batch e le previsioni vengono eseguite in tempo reale . Il processo di costruzione del modello è un processo intensivo di calcolo mentre la previsione avviene in un batter d'occhio. Pertanto, le prestazioni di un algoritmo in Python o R non influiscono sul tempo di inversione dell'utente. Python 1, R 1.
  • Produzione: la vera differenza tra Python e R sta nel fatto che la produzione è pronta. Python, in quanto tale, è un linguaggio di programmazione completo e molte organizzazioni lo usano nei loro sistemi di produzione. R è un software di programmazione statistica favorito da molte università e, a causa dell'aumento della scienza dei dati e della disponibilità delle biblioteche ed essendo open source, l'industria ha iniziato a utilizzare R. Molte di queste organizzazioni hanno i loro sistemi di produzione in Java, C ++, C #, Python ecc. Quindi, idealmente vorrebbero avere il sistema di previsione nella stessa lingua per ridurre i problemi di latenza e manutenzione. Python 2, R 1.
  • Biblioteche: entrambe le lingue hanno librerie enormi e affidabili. R ha oltre 5000 librerie per molti domini mentre Python ha alcuni incredibili pacchetti come Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R 2.
  • Sviluppo: entrambe le lingue sono lingue interpretate. Molti sostengono che Python sia facile da imparare, è quasi come leggere l'inglese (per dirla con una nota più leggera) ma R richiede un maggiore sforzo iniziale di studio. Inoltre, entrambi hanno buoni IDE (Spyder ecc. Per Python e RStudio per R). Python 4, R 2.
  • Velocità: inizialmente il software R ha avuto problemi con calcoli di grandi dimensioni (diciamo, come le moltiplicazioni della matrice nxn). Ma questo problema viene affrontato con l'introduzione di R da Revolution Analytics. Hanno riscritto le operazioni intensive di calcolo in C che è incredibilmente veloce. Essendo Python un linguaggio di alto livello è relativamente lento. Python 4, R 3.
  • Visualizzazioni: nella scienza dei dati, tendiamo spesso a tracciare dati per mostrare modelli agli utenti. Pertanto, le visualizzazioni diventano un criterio importante nella scelta di un software e R uccide completamente Python in questo senso. Grazie a Hadley Wickham per un incredibile pacchetto ggplot2. R vince a mani basse. Python 4, R 4.
  • Trattare con Big Data: uno dei vincoli di R è che memorizza i dati nella memoria di sistema (RAM). Pertanto, la capacità della RAM diventa un vincolo quando si gestiscono i Big Data. Python funziona bene, ma direi che sia R che Python hanno connettori HDFS, sfruttare l'infrastruttura Hadoop darebbe un sostanziale miglioramento delle prestazioni. Quindi, Python 5, R 5.

Quindi, entrambe le lingue sono ugualmente buone. Pertanto, a seconda del tuo dominio e del luogo in cui lavori, devi scegliere con intelligenza la lingua giusta. Il mondo della tecnologia di solito preferisce usare una sola lingua. Gli utenti aziendali (analisi di marketing, analisi di vendita al dettaglio) di solito usano linguaggi di programmazione statistica come R, poiché spesso eseguono prototipi rapidi e costruiscono visualizzazioni (che è più veloce in R di Python).


15
R batte appena il pitone nella visualizzazione. Penso che sia piuttosto il contrario; python non solo ha ggplot (che non uso da solo, dal momento che ci sono più opzioni pythonic, come seaborn ), può anche fare una visualizzazione interattiva nel browser con pacchetti come bokeh .
Emre,

10
Inoltre, R ha la capacità di interagire con Viny.
stanekam,

13
Bibliotecari - Non sono affatto d'accordo. R è di gran lunga il set di strumenti più ricco, e oltre a ciò fornisce le informazioni in modo corretto, in parte ereditando S, in parte da una delle più grandi comunità di rinomati esperti.
Rapaio,

34
"Velocità: inizialmente il software R ha avuto problemi con calcoli di grandi dimensioni (diciamo, come le moltiplicazioni di matrici nxn). Ma questo problema è stato risolto con l'introduzione di R da Revolution Analytics. Hanno riscritto operazioni intensive di calcolo in C che sono incredibilmente veloci. Python essendo un linguaggio di alto livello è relativamente lento. " Non sono un utente esperto di R, ma per quanto ne so praticamente tutto con implementazioni di basso livello in R ha anche un'implementazione di basso livello simile in numpy / scipy / pandas / scikit-learn / qualunque cosa. Python ha anche numba e cython. Questo punto dovrebbe essere un pareggio.
Dougal,

8
Per il tuo commento "Trattare con Big Data", aggiungerei che Python è una delle 3 lingue supportate da Apache Spark, che ha velocità incredibilmente elevate. Il tuo commento su R con un back-end C è vero, ma lo stesso vale per Python anche la libreria scikitlearn è molto veloce. Penso che il tuo post abbia un buon equilibrio, ma sostengo che la velocità sia almeno un pareggio e che la scalabilità (ovvero la gestione di big data) sia certamente a favore di Python.
Jagartner,

23

Non c'è niente come "python is better" o "R is much better of x".

L'unico fatto che so è che nel settore molte persone si attengono al pitone perché è quello che hanno imparato all'università. La community di Python è davvero attiva e ha alcuni ottimi framework per ML e data mining ecc.

Ma ad essere onesti, se ottieni un buon programmatore in c, può fare lo stesso delle persone in Python o R, se hai un buon programmatore in Java può anche fare (vicino a) tutto in Java.

Quindi mantieni la lingua con cui ti senti a tuo agio.


5
Ma che dire delle biblioteche? Esistono pacchetti R avanzati (pensate a Ranfom Forest o Caret) che sarebbero assolutamente impraticabili per la reimplementazione in un linguaggio di uso generale come C o Java
Santiago Cepas,

mahout cioè supporta la foresta casuale per java
Johnny000,

1
Sì, forse, ma R non offre affatto le prestazioni di cui hai bisogno per elaborare grandi serie di dati e la maggior parte delle volte hai set di dati davvero grandi nell'uso industriale.
Johnny000,

1
Sì, un buon programmatore può fare lo stesso in C. MA un cattivo programmatore può farlo in Python tanto velocemente quanto un programmatore esperto può farlo in C.
Pithikos

1
Non penso che sia sempre vero @Pithikos Date le formule matematiche sottostanti, di solito posso implementarle più velocemente con VB / T-SQL più velocemente di quanto posso facendo guadare attraverso la sintassi inutilmente arcana per le librerie R o Python. E nel processo, rendi il codice risultante molto più scalabile. Sono contento che queste biblioteche esistano ma ci sono degli svantaggi incorporati; in alcune situazioni e progetti particolari è meglio aggirarli.
SQLServerSteve

16

Alcuni pensieri aggiuntivi.

Il linguaggio di programmazione "di per sé" è solo uno strumento. Tutti i linguaggi sono stati progettati per rendere alcuni tipi di costrutti più facili da costruire rispetto ad altri. E la conoscenza e la padronanza di un linguaggio di programmazione sono più importanti ed efficaci delle caratteristiche di quel linguaggio rispetto ad altri.

Per quanto posso vedere ci sono due dimensioni di questa domanda. La prima dimensione è la capacità di esplorare, costruire prove di concetti o modelli a un ritmo rapido, avendo infine a portata di mano strumenti sufficienti per studiare ciò che sta accadendo (come test statistici, grafica, strumenti di misurazione, ecc.). Questo tipo di attività è generalmente preferito da ricercatori e data scientist (mi chiedo sempre cosa significhi, ma uso questo termine per la sua definizione libera). Tendono a fare affidamento su strumenti noti e verificati, che possono essere utilizzati per prove o argomenti.

La seconda dimensione è la capacità di estendere, modificare, migliorare o persino creare strumenti, algoritmi o modelli. Per ottenere ciò è necessario un linguaggio di programmazione adeguato. All'incirca tutti sono uguali. Se lavori per un'azienda, allora dipendi molto dalle infrastrutture dell'azienda, la cultura interna e le tue scelte diminuiscono in modo significativo. Inoltre, quando si desidera implementare un algoritmo per l'uso in produzione, è necessario affidarsi all'implementazione. E l'implementazione in un'altra lingua che non padroneggi non ti aiuterà molto.

Tendo a favorire per il primo tipo di attività l'ecosistema R. Hai una grande comunità, un enorme set di strumenti, prove che questi strumenti funzionano come previsto. Inoltre, puoi considerare Python, Octave (solo per citarne alcuni), che sono candidati affidabili.

Per la seconda attività, devi prima pensare a ciò che vuoi davvero. Se desideri strumenti robusti pronti per la produzione, C / C ++, Java, C # sono ottimi candidati. Considero Python come un secondo cittadino in questa categoria, insieme a Scala e amici. Non voglio iniziare una guerra alla fiamma, è solo la mia opinione. Ma dopo più di 17 anni come sviluppatore, tendo a preferire un contratto rigoroso e le mie conoscenze, rispetto alla libertà di fare qualsiasi cosa tu possa pensare (come accade con molti linguaggi dinamici).

Personalmente, voglio imparare il più possibile. Ho deciso che devo scegliere nel modo più duro, il che significa implementare tutto da zero. Uso la R come modello e ispirazione. Ha grandi tesori nelle biblioteche e molta esperienza distillata. Tuttavia, R come linguaggio di programmazione è un incubo per me. Quindi ho deciso di utilizzare Java e di non utilizzare alcuna libreria aggiuntiva. Questo è solo per la mia esperienza e nient'altro.

Se hai tempo, la cosa migliore che puoi fare è passare del tempo con tutte queste cose. In questo modo guadagnerai per te la migliore risposta possibile, adatta a te. Dijkstra ha detto una volta che gli strumenti influenzano il modo in cui pensi, quindi è consigliabile conoscere i tuoi strumenti prima di lasciarli modellare come pensi. Puoi leggere di più al riguardo nel suo famoso articolo chiamato The Humble Programmer


15

Aggiungerei ciò che altri hanno detto fino ad ora. Non esiste una sola risposta che una lingua sia migliore dell'altra.

Detto questo, R ha una comunità migliore per l'esplorazione e l'apprendimento dei dati. Ha ampie capacità di visualizzazione. Python, d'altra parte, è diventato migliore nella gestione dei dati dall'introduzione dei panda. I tempi di apprendimento e sviluppo sono molto meno in Python, rispetto a R (R è un linguaggio di basso livello).

Penso che alla fine si riduca all'ecosistema in cui ti trovi e alle preferenze personali. Per maggiori dettagli, puoi guardare questo confronto qui .


2
"R ha una comunità migliore per l'apprendimento [...]" - Immagino che ciò dipenda fortemente dal tipo di apprendimento. Quanto sta succedendo con le reti neurali (architetture feed-forward arbitrarie, CNN, RNN) in R?
Martin Thoma,

1
R non è in realtà quell'IMO "di basso livello". È anche un linguaggio dinamico.
xji,

12

Non esiste un linguaggio proiettile d'argento che può essere utilizzato per risolvere ogni singolo problema relativo ai dati. La scelta della lingua dipende dal contesto del problema, dalla dimensione dei dati e se si lavora in un luogo di lavoro, è necessario attenersi a ciò che usano.

Personalmente uso R più spesso di Python grazie alle sue librerie di visualizzazione e al suo stile interattivo. Ma se ho bisogno di più prestazioni o codice strutturato uso sicuramente Python poiché ha alcune delle migliori librerie come SciKit-Learn, numpy, scipy ecc. Uso R e Python nei miei progetti in modo intercambiabile.

Quindi, se inizi a lavorare sulla scienza dei dati, ti suggerisco di imparare entrambi e non è difficile poiché Python fornisce anche un'interfaccia simile a R con Panda .

Se hai a che fare con set di dati molto più grandi, non puoi sfuggire agli ecosistemi creati con Java (Hadoop, Pig, Hbase ecc.).


8

Non esiste una lingua "migliore". Ho provato entrambi e mi sento a mio agio con Python, quindi lavoro solo con Python. Anche se sto ancora imparando cose, ma finora non ho riscontrato alcun ostacolo con Python. La cosa positiva di Python è che la community è troppo buona e puoi ottenere molto aiuto su Internet facilmente. A parte questo, direi di andare con la lingua che ti piace non quella che la gente raccomanda.


8

Nella mia esperienza, la risposta dipende dal progetto in corso. Per pura ricerca, preferisco R per due motivi: 1) ampia varietà di librerie e 2) gran parte della letteratura scientifica sui dati include campioni di R.

Se il progetto richiede un'interfaccia interattiva per essere utilizzata dai laici, ho scoperto che R è troppo limitato. Shiny è un ottimo inizio, ma non è ancora abbastanza flessibile. In questi casi, inizierò a esaminare il porting del mio lavoro R su Python o js.


8

Un problema che tutte le altre risposte non riescono a risolvere è la licenza .

La maggior parte delle meravigliose librerie R sopra menzionate sono GPL (ad es. Ggplot2 , data.table ). Questo ti impedisce di distribuire il tuo software in forma proprietaria.

Sebbene molti usi di tali librerie non implicino la distribuzione del software (ad esempio per addestrare modelli offline), la GPL può da sola attirare le aziende dall'utilizzarli. Almeno nella mia esperienza.

Nel regno di Python, d'altra parte, la maggior parte delle librerie ha licenze di distribuzione business-friendly, come BSD o MIT.

In ambito accademico, i problemi di licenza normalmente non sono problemi.



6

Una delle sfide reali che ho affrontato con R è che diversi pacchetti sono compatibili con versioni diverse .. molti pacchetti R non sono disponibili per l'ultima versione di R .. E R un bel po 'di tempo dà errori a causa della libreria o il pacchetto è stato scritto per vecchi versione..


3
Non sono sicuro che questo sia un problema particolare con R o che risponda alla domanda su come Python e R differiscono.
Sean Owen,

5

Non ho provato R (beh, un po ', ma non abbastanza per fare un buon confronto). Tuttavia, ecco alcuni dei punti di forza di Pythons:

  • Sintassi molto intuitivo : tupla disimballaggio, element in a_list, for element in sequence, matrix_a * matrix_b(per la moltiplicazione di matrici), ...
  • Molte biblioteche :
    • scipy : calcoli scientifici; molte parti di esso sono solo wrapper per il codice Fortran abbastanza veloce
    • theano > Lasagne > nolearn : librerie per reti neurali - possono essere addestrate su GPU (nvidia, è richiesto CUDA) senza alcuna regolazione
    • sklearn : algoritmi di apprendimento generale
  • Buona comunità :
  • Notebook IPython
  • Varie :
    • Array con indicizzazione 0 ... Ho fatto sempre quell'errore con R.
    • Strutture di pacchetto stabilite
    • Buon supporto per testare il tuo codice

3

Preferisco Python rispetto a R perché Python è un linguaggio di programmazione completo, quindi posso svolgere attività di apprendimento automatico end-to-end come raccogliere dati utilizzando un server HTTP scritto in Python, eseguire attività ML avanzate e quindi pubblicare i risultati online. Tutto ciò può essere fatto in Python. In realtà ho trovato R più difficile da imparare e i payoff per l'apprendimento di Python sono molto maggiori perché può essere utilizzato praticamente per qualsiasi attività di programmazione.


2
Puoi fare tutte queste 3 cose molto facilmente in R
Gaius,

2

R: R è la controparte Open source. che è stato tradizionalmente utilizzato nel mondo accademico e nella ricerca. A causa della sua natura open source, le ultime tecniche vengono rilasciate rapidamente. C'è molta documentazione disponibile su Internet ed è un'opzione molto conveniente. Python: con l'origine come linguaggio di scripting open source, l'utilizzo di Python è cresciuto nel tempo. Oggi, mette in mostra le librerie (intorpidimento, scipy e matplotlib) e funziona per quasi qualsiasi operazione statistica / costruzione di modelli che potresti voler fare. Dall'introduzione dei panda, è diventato molto forte nelle operazioni sui dati strutturati.

Codice Python

Importa libreria

Importa altre librerie necessarie come panda, numpy ...

da sklearn import linear_model

Carica set di dati Train e Test

Identificare le variabili e i valori delle caratteristiche e delle risposte deve essere una matrice numerica e numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Crea un oggetto di regressione lineare

linear = linear_model.LinearRegression ()

Allena il modello usando i set di allenamento e controlla il punteggio

linear.fit (x_train, y_train) linear.score (x_train, y_train)

Coefficiente di equazione e intercetta

print ('Coefficiente: \ n', linear.coef_) print ('Intercept: \ n', linear.intercept_)

Uscita prevista

predicted = linear.predict (x_test) Codice R

Carica set di dati Train e Test

Identificare le variabili e i valori delle caratteristiche e delle risposte deve essere una matrice numerica e numpy

x_train <- input_variables_values_training_datasets y_train <- target_variables_values_training_datasets x_test <- input_variables_values_test_datasets x <- cbind (x_train, y_train)

Allena il modello usando i set di allenamento e controlla il punteggio

lineare <- lm (y_train ~., data = x) sommario (lineare)

Uscita prevista

predicted = predict (lineare, x_test)



0

inserisci qui la descrizione dell'immagine

Ho ottenuto questa immagine in un post di linkedin. Ogni volta che ho un dubbio sull'uso di Python o R, ci guardo dentro e si rivela molto utile.


Quindi cosa scegli?
Serhii Polishchuk,
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.